インターネットVPNで主に利用されている技術としてはIPsecVPN、SSLVPN、PPTP(またはL2TP)の3つなのではないかと思うのだが、今日はSSLを利用したVPNを構築する事ができるOpenVPNに着目したい。
普通インターネットVPNでLAN間接続と言えばNetScreen5でも2個買ってきて鍵交換して置いて終わりてなもんだろう。だがしかし、その金すら惜しいという場合は、ソフトウェアでVPNを張る事になる。要求は、

  • 3拠点間でVPNを張る。速度は要求しないので、拠点Aをサーバーとし、B-C間の通信はB-A-Cという経路で行っても良い。
  • 全拠点のLAN内ホストが相互に見れるように。
  • ブリッジ(3拠点が同一のLAN)は不可。拠点Aは192.168.1.0/24、拠点Bは192.168.16.0/24、拠点Cは192.168.24.0/24とする。拠点A用に192.168.2~15.0/24を予約、拠点BとCはそれぞれ3つのセグメント(17.18.19と25.26.27)を予約。
  • 全拠点とも、インターネットはそれぞれ独自に行う。相手のLANに対するパケットのみVPNで転送する。
  • 拠点間のLANを見るためにNAT、NAPTを利用するのは不可。

本当にねぇ・・・・NetScreen5を3台買ってこいよ・・・・。

OpenVPNについて情報を漁ると大抵「ブリッジするならTAPデバイス、ルーティングするならTUNデバイス」と書かれている。だが、本当にそうなのか? TAPデバイスではルーティングできないのか? TUNデバイスではブリッジできないのか? TAPデバイスもTUNデバイスもデータリンク層のデバイスとして認識されるはずなので、ブリッジデバイスにもできるはずだしルーティングの対象にする事もできるはずだ。また、DHCPだサーバからの設定のPUSHだなんだとあるが、OpenVPNは2ノードのTAPデバイス間で相互通信を実現するためのもののはずなので本来そんなものは不要だ(有用ではあるが、必須ではないという意味)。

実際にやってみた。

TUNデバイスには何の興味もないので、TAPデバイスでルーティングを行う設定とする。以下のように、接続する前から既にTAPデバイスに対してIPアドレスをふっている。もう一度言うが、TAPデバイス間でデータリンク層のリンクが行われるので、言うなれば2つのパソコンをクロスケーブルでつなぐ動作を行うわけだ。

 VM1:Vine Linux 4.2
  eth0=192.168.1.211
  eth0:0=192.168.100.1
  eth0:1=192.168.101.1
  tap0=192.168.99.1
  OpenVPN 2.0.9
 VM2:Windows XP Professional
  ローカルエリア接続=192.168.100.2
  ローカルエリア接続2=192.168.99.16 TAPデバイス
  OpenVPN 2.0.9
 VM3:Windows XP Professional
  ローカルエリア接続=192.168.101.2
  ローカルエリア接続2=192.168.99.24 TAPデバイス
  OpenVPN 2.0.9

Vine Linux 4.2でOpenVPNをビルドするのは普通にopenssl-develを入れて(pam-develは要らない)lzoをビルドしとけば良い。

# apt-get install openssl-devel
# tar xzf lzo-1.08.tar.gz
# cd lzo-1.08
# configure --prefix=/usr/local/lzo
# make
# make install
# cd ..
# tar xzf openvpn-2.0.9.tar.gz
# cd openvpn-2.0.9
# configure --prefix=/usr/local/openvpn --with-lzo-headers=/usr/local/lzo/include --with-lzo-lib
# make
# make install
# vi /etc/ld.so.conf ← /usr/local/lzo/libを加えるため
# ldconfig

さて、さくさく鍵を作ってさくさく設定。検索すればやりかたはいくらでも出てくるし、サンプルのconfigもキーを作るスクリプトもあるので何の問題もなかろう。ルーティングを行うのでIP転送も有効にする。
次にWindows XP Professional達にもOpenVPN 2.0.9のWindows版をインストール。うわー楽じゃなーこれ。
今回は一つのパソコン上にVMを3つ立ち上げているので、鍵ファイルはコピー&ペーストで持っていく。ああ、楽チン。

データリンク層のリンクは確立。ログを見てると192.168.0.2がサーバーから割り振られているのね。自動取得にしてるとそれが使われるのかにゃん。それでも固定で192.168.0.24を振っているのでそのままだが。

結論として、やはりTAPデバイスでもルーティングはできる。今回の案件では、本当はそれぞれにTUNデバイスでリンクを張りスター型のトポロジーでやるべきなんだろうが、スター型は拠点が増えたら飛躍的にしんどくなってくからな。どうするべか。