次善の策として、OpenVPNを使って、同じように、リモートからVPN越しにつないで、あたかもVPN先のセグメントに繋がってるが如くに振る舞うようにする設定したのであった。サーバーはCentOS5.7、クライアントはWindows7である。
サーバー側の設定
設定ファイルは、/etc/openvpnに置くことを仮定している。
1. OpenVPNのインストール
RPMforgeにあるので、yumで一発。また、bridge-utilsを使ってブリッジを作るので、それもインストール。
# yum install --enablerepo=rpmforge openvpn2. 鍵を作る
[略]
# /usr/sbin/openvpn --version
OpenVPN 2.2.0 x86_64-redhat-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] built on Jun 6 2011
[略]
# yum install bridge-utils
# brctl --version
bridge-utils, 1.1
OpenVPNをブリッジで使うときは static-key が使えないみたいなので、CAを作って鍵を作って署名する。
# cd /etc/openvpn/ ※どこのディレクトリでやってもいいのだが。3. ブリッジの用意
# cp -r /usr/share/doc/openvpn-2.2.0/easy-rsa/2.0/ easy-rsa
# cd easy-rsa
# vi vars ※設定値を変えておくと作業が楽になる
export KEY_COUNTRY="JP"
export KEY_PROVINCE="ToKyo"
export KEY_CITY="ChiyoDaku"
export KEY_ORG="usoinfo"
export KEY_EMAIL="usoinfo_at_ahoaho.net"
# source vars
# ./clean-all
# ./build-ca ※CAを作る。プロンプトにはEnterでいいが適宜お好みで。
# ./build-key-server server ※サーバーの鍵。これもお好みで。
# ./build-key ahoaho ※クライアントの鍵。接続するクライアント毎に作る。
# cp keys/ca.crt /etc/openvpn/
※出来たCAの証明書をconfigのあるところへ配置。
# cp keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/
※出来たサーバ用の鍵をconfigのあるところへ配置。
※ keys/ca.crt keys/ahoaho.crt keys/ahoaho.key はクライアントの動作に使う
# cp /usr/share/doc/openvpn-2.2.0/sample-scripts/bridge-start /etc/openvpnブリッジインターフェース名は、他にブリッジがなければbr0でいいだろう。TAPインターフェース名は、OpenVPNの設定と合っていないとダメ。ethの各項目は、ローカルセグメントに繋がっているインターフェースの設定を書く。
# cp /usr/share/doc/openvpn-2.2.0/sample-scripts/bridge-stop /etc/openvpn
※ブリッジの開始・停止スクリプトをコピー
# chmod 755 bridge-start bridge-stop ※実行ビットを付与
# vi bridge-start ※ブリッジ開始の設定を編集
br="br0" ※ブリッジインターフェース名。
tap="tap0" ※ブリッジするOpenVPNのTAPインターフェース名。
eth="eth0" ※ブリッジするローカルセグメントのインターフェース名。
eth_ip="192.168.x.y"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.x.255"
# vi bridge-stop ※ブリッジ停止の設定を編集
br="br0" ※bridge-startに合わせる
tap="tap0" ※bridge-startに合わせる
OpenVPNでブリッジするときは、bridge-start → openvpn startの順で開始し、openvpn stop → bridge-stopの順で停止しないといけない。面倒なので、スタートアップスクリプトに開始と終了を埋め込む。
# vi /etc/rc.d/init.d/openvpn4. OpenVPNサーバーの設定
[略]
case "$1" in
start)
echo -n $"Starting openvpn: "
/etc/openvpn/bridge-start ※開始時OpenVPNが始まる前にブリッジ開始
/sbin/modprobe tun >/dev/null 2>&1
[略]
stop)
echo -n $"Shutting down openvpn: "
for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -f $pidf
done
# Run shutdown script, if defined
if [ -f $work/openvpn-shutdown ]; then
$work/openvpn-shutdown
fi
/etc/openvpn/bridge-stop ※OpenVPNが停止した後でブリッジ停止
OpenVPNサーバーの設定は、設定ディレクトリ(/etc/openvpn)に、xxxx.confという名前で保存しておくと、スタートアップスクリプトが .conf の設定を読み込んで実行してくれる。/usr/share/doc/openvpn-2.2.0/sample-config-files/server.conf にサンプルの設定ファイルがあるので、これをベースに書き換えてもいい。
OpenVPNサーバー設定のポイントを抜粋:server-bridgeが、ブリッジモードを指定する。1,2番目がローカルセグメントの(つまりeth1の)アドレスとネットマスク、3,4番目が、クライアントに割り当たるアドレスの開始アドレスと終了アドレスである。
server-bridge 192.168.1.1 255.255.255.0 192.168.1.222 192.168.1.230
dev tap0
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
client-to-client
push "route 192.168.2.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"
dev tap0で、OpenVPNのTAPインターフェースを指定する。bridge-start/stopで指定したインターフェース名を、数字も込みでで指定する。"dev tap"ではダメである。
ca cert key dhは、2.で作った証明書と鍵をOpenVPNに読み込ませる設定。
client-to-clientは、OpenVPNクライアント同士が通信するときに必要。クライアントが1台だけならいらない。
push "route 192.168.2.0 255.255.255.0"は、他のネットワーク(ここでは192.168.2.0)への通信がVPNを経由するようにクライアントに経路を設定させる。
push "dhcp-option DNS 192.168.1.1"は、クライアントにDNSサーバーのアドレスを通知する。
TCPサーバーモード、ポート5000で動かす場合の設定ファイルのサンプルはこちら。
5. 設定ファイルを配置したら、service openvpn startでデーモン開始。ブリッジを開始するときにしばらく通信できなくなることがある(ブリッジの設定を失敗するとずっと通信できなくなる)ことがあるので、実行はコンソールからやるのがお勧め。
正常動作を確認できたら、chkconfig openvpn onで自動的に開始するようにしておく。
クライアント側の設定
1. OpenVPNのインストール
http://www.openvpn.net/index.php/open-source/downloads.htmlから Windows Installer をダウンロードしてきて、インストールする。
2. クライアントの設定
サーバーの2.で作ったクライアント用の鍵と証明書のファイル(ca.crt,ahoaho.crt,ahoaho.key)を、クライアントのconfigフォルダに置く。デフォルトでは、C:\Program Files\OpenVPN\config。
configフォルダにクライアント用の設定ファイルをxxxx.opvnという名前で作成する。
OpenVPNクライアント設定のポイントを抜粋:dev tapで、OpenVPNのTAPインターフェースを指定する。
dev tap
ca ../config/ca.crt
cert ../config/barkhorn.crt
key ../config/barkhorn.key
tls-client
pull
float
ca cert key dhは、2.で作った証明書と鍵をOpenVPNに読み込ませる設定。
tls-clientで、TLSクライアントを指定する。
pullで、サーバーからconfigを読み取る。サーバーがpushで設定した項目が設定される。
tls-clientで、IPアドレスが可変であることを指定する。
TCPクライアントモード、ポート5000で動かす場合の設定ファイルのサンプルはこちら。
3. スタートメニューから、OpenVPN GUIを実行し、通知領域アイコンを右クリック、「Connect」を実行する。うまくいけば、"Initalization Sequence Completed" と出て、TAPアダプターにIPアドレスが付与されるはずである。
ブロバンルータで、OpenVPNのポートを内側のホストにアドレスに振っておくのを忘れずに。
▼レンタルサーバー・VPS比較表を見る▼