2010年3月8日月曜日

OpenVPNを導入

自宅にOpenVPN導入した際のメモです。

環境はサーバーがCentOS4.2、クライアントがWinXP。
OpenVPNはルーティングモードとブリッジモードがありますが、今回はブリッジモードで構築。
違いはこの辺を参照。
http://www.atmarkit.co.jp/flinux/special/openvpn/openvpnb.html


以下、参考にしたページ。

http://www.stackasterisk.jp/tech/systemConstruction/openVpn01_01.jsp(このサイトのやり方をベースにしました)
http://freescitech.net/2/ovpn2_examples.html
http://nai.homelinux.net/openvpn.html
http://centossrv.com/openvpn.shtml(ルーティングモードでの手順だが、鍵の作成あたりはブリッジモードでもそのまま参考にできる)
http://kano.feena.jp/?OpenVPN

各種設定は上記のページを参考にしつつ、IPなどを自分の環境に置き換えてすんなり対応できました。
そして最後に自宅のルーターにvpn接続用の穴を開けて完了です。

以下は対応手順。鍵作成はメモするのを忘れていたで割愛しています。

openvpnをインストール
# yum install openvpn

仮想デバイス作成用のbridge-utilsをインストール
# yum install bridge-utils

openvpnの設定
# /etc/openvpn/server.conf
port 1194
proto udp
dev tap0
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
ifconfig-pool-persist ipp.txt
server-bridge 192.168.1.3 255.255.255.0 192.168.1.110 192.168.1.111
push "route 192.168.1.0 255.255.255.0"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
management localhost 7505


各種起動・停止スクリプトをコピーして実行権限を与える
# cp /usr/share/doc/openvpn-2.0.9/sample-scripts/bridge-start /etc/openvpn
# cp /usr/share/doc/openvpn-2.0.9/sample-scripts/bridge-stop /etc/openvpn
# cp /usr/share/doc/openvpn-2.0.9/sample-scripts/openvpn.init /etc/openvpn
# chmod +x /etc/openvpn/bridge-start
# chmod +x /etc/openvpn/bridge-stop
# chmod +x /etc/openvpn/openvpn.init

IPフォワードの設定。これをしておかないと、VPNで接続できてもVPNサーバから外に出て行けない。
# echo 1 > /proc/sys/net/ipv4/ip_forward
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 ##0を1に変更

openvpnの起動スクリプトを作成(http://www.stackasterisk.jp/tech/systemConstruction/openVpn01_03.jsp#4_5)
# cp /etc/rc.d/init.d/network /etc/rc.d/init.d/vpn
# vi /etc/rc.d/init.d/vpn
(ボールド部分を追記する)

(~省略~)
touch /var/lock/subsys/network

#ブリッジモードの有効化
/etc/openvpn/bridge-start

#OpenVPNサーバの起動
/etc/openvpn/openvpn.init start


;;

stop)
#OpenVPNサーバの停止
/etc/openvpn/openvpn.init stop

#ブリッジモードの無効化
/etc/openvpn/bridge-stop



# If this is a final shutdown/halt, check for network FS,
# and unmount them even if the user didn't turn on netfs
(~省略~)


起動スクリプトの調整
# chkconfig --del network
# chkconfig --add vpn
# chkconfig --del openvpn




それからつまずいた点が2点ほど。

(1)鍵
「./build-key-pass client1」で証明書を作ろうとしたらエラーが出る。
以前client1という名前で鍵を作っているのでNGということらしく、名前を「client2」にして回避。
http://wiki.milkcup.jp/index.php?%BE%DA%CC%C0%BD%F1%A4%CE%C8%AF%B9%D4

(2)iptables
iptables -A INPUT -i tap0 -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A FORWARD -i br0 -j ACCEPT
をやり忘れていたため、VPNサーバーへの接続はできるけど、他のマシンにアクセスできない状態でしばらく悩みました。
http://freescitech.net/2/ovpn2_ether_ja.html

最後に「redirect-gateway def1」について。

このオプションを使うと、デフォルトゲートウェイがOpenVPNサーバになり、すべての通信がVPNサーバを介することになる。
サーバ側、クライアント側のどちらでも設定可能。ONとOFFでそれぞれtracertで経路を確認すると動きがよく分かります。
自分の場合はとりあえずOFFにしておいて、クライアント側で状況に応じて使い分ける予定です。

0 件のコメント:

コメントを投稿