以前、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デバイスと、ブリッジの設定が必要。まずは、以下のコマンドでカーネルモジュールをロードしておく。
いろんなサイトで説明しているから、ここでは詳しく説明しない。もともとうちの場合は、webサーバ用にCAの鍵と証明書はあったので、新しくvpnサーバ用の鍵を作成し、CAで署名する。
vpnサーバが動くのに必要な鍵関係のファイルは以下。(ファイル名はなんでも良い)
これらのファイルが揃ったら、/usr/local/etc/openvpnに置き、openvpn.confファイルを編集する。
クライアントは、別の外部のネットワークにあるWindowsマシンにした。GUI版をインストーラから入れて、設定ファイルを編集する。
proxy越しでもうまく接続され、IPアドレスが割り当てられる。
んが、肝心の通信ができないのでござりますよ。
pingも通らない、tracerouteもうまく行かない。ブリッジの設定が悪いのかな~と思いつつ、おいらの知識では解決できなかった。
ブリッジモードが駄目ならトンネルモードを試してみようということで、設定ファイルの以下を変える。
クライアント側もdev tap をdev tun に変えて、試して見る。
・・・_| ̄|○
やっぱり、接続できてIPまでは振られるけど、通信ができません。こちらの場合はサブネットが変わるので、ipfの設定がいるのかも知れないけど、くじけたので今日はここまで。
このくらい書いておけば、誰か親切な人が何か教えてくれるかも知れないし(笑)
今回、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 bridgebridgeを有効にするために、以下を実行する。(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.crt | CAの証明書 |
server.crt | VPNサーバの証明書 |
server.crt | VPNサーバの鍵(rootしか読めないようにしておく) |
dh1024.pem | DHパラメータ |
# 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.0tun2になっているのは、うちのpppでtun0とtun1を使っているから。
クライアント側もdev tap をdev tun に変えて、試して見る。
・・・_| ̄|○
やっぱり、接続できてIPまでは振られるけど、通信ができません。こちらの場合はサブネットが変わるので、ipfの設定がいるのかも知れないけど、くじけたので今日はここまで。
このくらい書いておけば、誰か親切な人が何か教えてくれるかも知れないし(笑)
openvpnの続きを読む