以前、poptop を使って pptp ができるようにしたが、proxyを通せなかったのであまり使いどころがなかった。
今回、openvpnと言うものがあることを知り、こいつは http の proxy を超えるらしいので、インストールしてみた。
いつものように、portsから security/openvpn をインストール。パスワードをファイルに保存する?みたいなことを聞いてくるので、Noを選ぶ。(と、言うか、チェックしない)
インストールされると、設定ファイルのサンプル等が /usr/local/share/doc/openvpn に入る。設定ファイルの場所は /usr/local/etc/openvpn がデフォルトらしいけど、ディレクトリすら作られない。
早速、/usr/local/etc/openvpn ディレクトリを作り、/usr/local/share/doc/openvpn/server.conf を openvpn.conf と言う名前でコピーする。
後は、中身を編集していくのだが、openvpnのモードには大きくわけてトンネルモード(TCP/IPレベルのVPN)とブリッジモード(EtherレベルのVPN)があるらしい。
外からうちに繋ぐのであれば、ブリッジの方が幸せになれそうなのでそうする。
ブリッジで動作させるためには、tapデバイスと、ブリッジの設定が必要。まずは、以下のコマンドでカーネルモジュールをロードしておく。
# kldload if_tap
# kldload bridge
bridgeを有効にするために、以下を実行する。(rl0がブリッジしたい内部向けのインターフェイスで、tap0がvpnが使うインターフェイス)
# sysctl -w net.link.ether.bridge.config="rl0 tap0"
# sysctl -w net.link.ether.bridge.enable=1
続いて、必要なキーファイルと証明書を作る。
いろんなサイトで説明しているから、ここでは詳しく説明しない。もともとうちの場合は、webサーバ用にCAの鍵と証明書はあったので、新しくvpnサーバ用の鍵を作成し、CAで署名する。
vpnサーバが動くのに必要な鍵関係のファイルは以下。(ファイル名はなんでも良い)
ファイル名説明
ca.crtCAの証明書
server.crtVPNサーバの証明書
server.crtVPNサーバの鍵(rootしか読めないようにしておく)
dh1024.pemDHパラメータ
これらのファイルが揃ったら、/usr/local/etc/openvpnに置き、openvpn.confファイルを編集する。
# vpnがListenするアドレス。うちの場合外部のIP
local 210.254.71.72
# vpn がListenするポート
port 1194
# vpnが使うプロトコル。proxyを使いたい場合はtcpを選ぶ
proto tcp
# bridgeの場合はtapを選ぶ
dev tap0
# 鍵関係
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
# ブリッジの設定(ブリッジのIPが192.168.0.1で、クライアントには 201~210を割り当てる)
server-bridge 192.168.0.1 255.255.255.0 192.168.0.201 192.168.0.210
# クライアントに送るルーティング情報
push "route 192.168.0.0 255.255.255.0"
# この辺はデフォルト
keepalive 10 120
comp-lzo
# vpnサーバを nobodyで動かす
user nobody
group nobody
# この辺もデフォルト
persist-key
persist-tun
# ログの設定
status /var/log/openvpn-status.log
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log
verb 3
後は、/etc/rc.confに以下を追加。
openvpn_enable="YES"
/usr/local/etc/rc.d/openvpn start でvpn起動。

クライアントは、別の外部のネットワークにあるWindowsマシンにした。GUI版をインストーラから入れて、設定ファイルを編集する。
client
proto tcp
dev tap0
# 接続するサーバ
remote 210.254.71.72 1194
ca ca.crt
cert client.crt
key client.key
resolv-retry infinite
nobind
comp-lzo
persist-key
persist-tun
verb 3
pull
float
そうそう、クライアントの鍵を作ってCAで証明書を作り、それらとCAの証明書をクライアントに入れておく。 後は、タスクトレイのアイコンを右クリックして、Connectなんてやれば接続される。
proxy越しでもうまく接続され、IPアドレスが割り当てられる。
んが、肝心の通信ができないのでござりますよ。
pingも通らない、tracerouteもうまく行かない。ブリッジの設定が悪いのかな~と思いつつ、おいらの知識では解決できなかった。

ブリッジモードが駄目ならトンネルモードを試してみようということで、設定ファイルの以下を変える。
# dev tap0
dev tun2
# server-bridge 192.168.0.1 255.255.255.0 192.168.0.201 192.168.0.210
server 192.168.22.0 255.255.255.0
tun2になっているのは、うちのpppでtun0とtun1を使っているから。
クライアント側もdev tap をdev tun に変えて、試して見る。
・・・_| ̄|○
やっぱり、接続できてIPまでは振られるけど、通信ができません。こちらの場合はサブネットが変わるので、ipfの設定がいるのかも知れないけど、くじけたので今日はここまで。

このくらい書いておけば、誰か親切な人が何か教えてくれるかも知れないし(笑)

もちっとだけ調べて見ました。
上に書いたbridgeは古いらしく、最近は bridge ではなく if_bridgeを使うようです。
# kldload if_bridge
んで、/etc/rc.d/bridgeとか言うものがあるので、/etc/rc.conf に autobridge_interfaceとかautobridge_bridge0 とかごにょごにょすると行けそうな感じです。とりあえず、直接コマンドラインから、
# ifconfig bridge0 create
# ifconfig bridge0 addm rl0 addm tap0
なんてやると、bridgeが作れるみたいです。
if_bridgeのマニュアルをつらつら読んだところ、rc.confを以下のような感じにしてやると、良さそうな感じです。(面倒なので、再起動してません。ので、動作確認してません)
network_interfaces="rl0 lo0 tap0"
ifconfig_tap0="up"
cloned_interfaces="bridge0"
autobridge_interfaces="bridge0"
autobridge_bridge0="rl0 tap0"
openvpn_enable="YES"
動作確認していなくて不安なのは、tap0を入れる位置が network_interfacesで良いかどうかです。次に停電とかあって再起動したら確認しますので報告します。
それから、bridgeのパラメータをちょっといじります。/etc/sysctl.confに以下を追加
net.link.bridge.pfil_onlyip=0
あ、後はカーネルモジュールをロードしないといけないので、/boot/loader.confに以下を追加します。
if_tap_load="YES"
if_bridge_load="YES"
ひょっとしたら、書かなくてもrcが勝手にやってくれるかも知れないですが、一応。

ここまでやって、vpnで接続した後、サーバからクライアントにpingを打つとサーバとクライアントの間でだけ通信ができるようになりました。
何故か、一度でもサーバからpingを打つまでは通信ができません。
後は、クライアントと家庭内LANの間の通信もできないようです。む~、先は長いなあ・・・。

カテゴリ

トラックバック(1)

このブログ記事を参照しているブログ一覧: openvpn

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1071

» openvpn(その2)(PC日記)~のトラックバック

FreeBSDでopenvpnその2 なんとか、通信できる方法は見つかったけど、まだまだ問題あり 続きを読む

コメントする

このブログ記事について

このページは、falseが2006年9月18日 11:24に書いたブログ記事です。

ひとつ前のブログ記事は「trac と mod_python」です。

次のブログ記事は「binが死ぬ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1