VPN検証中

まずはルーティングモードで検証してからブリッジで・・、の方が楽そうだったのでこのルートにしたのだが、失敗だったな。
メモ程度に残しておく。

ルーティングモードでのOpenVPN

OpenVPN自体の接続は、ハウツー君に沿ってやれば比較的簡単に接続可能。
userやgroupなどがコメントアウトされているので、セキュリティを考える場合に何が必要かを理解する必要があり、その必要な項目だけ設定してやればいい。
で、証明書やら鍵やらを発行してクライアントに配ってあげれば、あとはサーバの立ち上げ、クライアントの立ち上げで終了。
ルータの設定を忘れずに。ルータがしょぼすぎの場合はUDPでのVPN自体に失敗する可能性もあるので、プロトコルの選択も抜かりなくやってやれば、まあまずトラブル0でいけるだろう。
起動スクリプトLinux用にカスタマイズされててFreeBSDではイマイチ使いにくいので、テスト時はOpenVPNのバイナリを直接叩くことを忘れずに。私の環境では/usr/local/bin/openvpnにインストールされていたので(社員がいれていた)、/usr/local/bin/openvpn --config /etc/openvpn/server.confでテストしていた。
設定ファイルもLogに出したりせず、コンソールにがんがん出してもらった方がわかりやすいかも。まあこの辺は好みで適当に。


さて、接続はそんなに面倒でもないのだが、問題はVPNクライアントからサーバ側LANの他PCに接続しようとする場合。
仮想ではないNICに通すのだから当然といえば当然なのだが、その前提に対する考察が足りていなかったということで・・。
OpenVPNをルーティングモードで動かす場合、OSの機能などを用いてパケットの転送をしてあげる必要がある。
FreeBSDの場合、デフォルトでパケット転送自体が無効になっており、まずをこれをやるため、場合によってはカーネルの再構築という作業が必要になる。
今回はカーネルの再構築は、幸い重たいカーネルを社員君が構築してくれたようで大丈夫だった。日本に行った時はちゃんとダイエットさせてやった方がいいかもしれんが、仕上げは後日、後日。
まずはここの9.2辺りを読んで、FreeBSDゲートウェイにしてやろう。
http://www.freebsd.org/doc/ja_JP.eucJP/books/faq/networking.html
で、FreeBSDの場合ipfwというやつがついてまわるので、この辺も読んで色々やろう。
http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/firewalls.html


色々やってやると、とりあえず一方的にパケットを通してやることは出来るようになるが、TCP/IPの仕組み上パケットを返すルートについての設定も必要なので、VPNサーバ側LANのルータにもVPN経由の配送ルートを記してやる必要がある。
あるが、大抵の安物ルータにはそんな高度な機能はない(LANからのパケットをWANに通すだけ)、ルーティングテーブルが作成出来ずに途方にくれることもあるかもしれない。
そんな時はVPNサーバ側にあるPCがWindowsならコマンドプロンプト君を立ち上げて、「route」と打ってみる。このrouteコマンドは比較的便利なので、私も今回お世話になることにした。
「route add VPNClientのNetworkAddress mask 255.255.255.0(VPNClient側のサブネットマスク) VPNServerのアドレス」
で、VPNサーバ側にあるPCに、個別にルーティングテーブルを作成することが出来る。
pingテストに関しては、設備がしょぼくてもこれでなんとか出来るだろう。

早くもまとめ

この他、Client-to-Clientの接続等で、「push "route ??"」だけでなく「push "iroute ??"」がどうだとか、色々てこずったのだが、この辺は後日まとめる。
要するに、ルーティングモードの方が簡単だと書いているが、ブリッジタイプの使用方法を想定しているなら手間は似たようなもんで、少なくともサーバがFreeBSDならルーティングモードも相当面倒くさいぞ、という話。
あー、久々に大変だった。
本当は本日ルーティングモード、ブリッジモード双方を終了させる予定だったのだが、てこずったのでブリッジは明日。
明日は会計監査もあるんだが・・・、まあ、なんとかなるだろ。
おいおいやってこうか。