とうとうOpenVPNでブリッジできました。

試行錯誤の結果、なんとかブリッジできるようになりました。実行環境ではIPフォーワードをしている訳でもなく、今回はiptablesを無視します。将来的にセキュリティー向上のためになにか行うかもしれませんが。。。。

環境

  • PC1 家のLAN中DMZにおいておきます。openvpnのセッションがはれればいいので、IP forwardで十分かもしれませんが、とりあえず。
  • PC2 職場の LAN(eth0)とWAN(eth1)に直接つながっている。特にNAT等をしていません。LAN: 192.168.100.2/24 gw 192.168.100.1

まずはPC2をサーバー化

http://www.senryu.biz/linux/openvpn/openvpn1.htm
を参考にして、server.confスクリプトをベースに訂正を加えていきます。

bridgeタイプにするので、


server-bridge 192.168.100.2 255.255.255.0 192.168.100.51 192.168.100.59

としておきます。eth0と同じIPを振っておきました。

認証キーを作ります。


> cd /etc/openvpn
> openssl req -nodes -new -x509 -keyout ca.key -out ca.crt -days 3650

openssl.cnfを編集します。ファイルはディストリビューションによって異なるでしょう。
変更箇所

dir = /etc/openvpn
new_certs_dir = $dir
certificate = $dir/ca.crt
private_key = $dir/ca.key
default_days = 3650

ファイルを作ります。

> echo 01 > serial
> touch index.txt
> openssl req -nodes -new -keyout server.key -out server.csr
> openssl ca -out server.crt -in server.csr
> openssl dhparam -out dh1024.pem 1024

ホストキーの作成時に「A Challenge password」と「 An optinal company mname」を聞かれますが、入力しません。

これで準備OK。

Bridgeの準備

bridge-utilsをインストールしておきます。するとbrctlコマンドが利用できるようになります。server.confでは、クライアントに51-59のIPを振るように設定してあります。

等も参考にしました。サーバーはDebianを使う事にしたので、/etc/network/interfaces


iface br0 inet static
address 192.168.100.2
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
gateway 192.168.100.1
bridge_ports eth2 tap0

としておきます。

サーバーを動かしてみましょう。


1 /etc/init.d/openvpn start
2 ifconfig tap0 up ここではまった。。。
3 ifup br0

で完了!!ある所ではbridgeをつくってからVPNをスタートさせていました。別の所では逆。セッションははれても、どうしてもブリッジされないので困っていたのですが、tap0デバイスをupしていない事が判明。いやはや。

クライアントの設定

client.confスクリプトをベースに変更していきます。変更点は


ca ca.crt
cert client1.crt
key client1.key
pull   サーバーからのパラメータを引き受ける
float   IPアドレスはサーバーからもらう

こんな所ですかね。キーも準備します。サーバーPCで

> openssl req -nodes -new -keyout client1.key -out client1.csr
> openssl ca -out client1.crt -in client1.csr

所属までは同じデーターを入力して、名前は別にしておきます。出来たファイルをクライアントの/etc/openvpnディレクトリにコピーします。*.keyのpermissonを600にしておきましょう。

これで完了!!あとは


> /etc/init.d/openvpn start

で接続してみましょう。

ブリッジをやめるには

やめるのも試行錯誤の間がありましたが、結局


> ifconfig br0
> brctl delbr br0
> sleep 5
> /etc/init.d/openvpn stop
> ifdown eth0
> ifup eth0

でしょうかね。