事前共有鍵(PSK)を用いた単純なOpenVPNの設定
さくらVPSをOpenVPNサーバにしました。サーバ環境はDebian(sid)(d:id:rigarash:20101010#1286695769)です。クライアントは最大で1台のみの接続(私のノートPCからのみ)であり、OpenSSLのCA運用に自信がないので、事前共有鍵(Pre-Shared Key, PSK)を利用しました。これは、出張の時などに安全な通信を行うためのもので、クライアント(DebianかWindows)からの通信がすべてさくらVPS経由になるようにします。
サーバ側の設定
まず、openvpnをインストールします。
$ sudo -H aptitude install openvpn
次に、事前共有鍵(/etc/openvpn/winclient.key)を生成します。
$ sudo -H openvpn --genkey --secrett /etc/openvpn/winclient.key
作成したサーバ設定ファイル(/etc/openvpn/winclient.conf)は以下の通りです。一応権限をnobody/nogroupに落としています。オプションの説明は、openvpn(8)に書いてあります。
$ cat /etc/openvpn/winclient.conf port 1194 proto udp dev tun ifconfig 192.168.200.1 192.168.200.2 user nobody group nogroup persist-key persist-tun secret /etc/openvpn/winclient.key status /etc/openvpn/winclient.log
OpenVPNをifup/ifdownできるようにします。ip_forwardの設定と、NATの設定が必要になります。
$ cat /etc/network/interfaces ... ## OpenVPN(winclient) auto tun_winclient iface tun_winclient inet manual pre-up iptables -t nat -A POSTROUTING -s 192.168.200.2/32 -j MASQUERADE openvpn winclient post-down iptables -t nat -D POSTROUTING -s 192.168.200.2/32 -j MASQUERADE
$ cat /etc/default/openvpn ... AUTOSTART="none" ...
$ cat /etc/sysctl.conf ... net.ipv4.ip_forward=1 ...
クライアント(Windows Vista (x64))の設定
私がWindows Vista (x64)ユーザのため、他の環境でテストしてませんが、Windows XP以降ならあまり変わらないはずです。UACがあるので少し面倒でした。
まず、OpenVPNのサイト(Community Downloads | OpenVPN)から、"OpenVPN Community Software Windows Client Download"をダウンロードして、インストールします。
次に、メモ帳を管理者権限で起動して、以下の内容をC:\Program Files (x86)\OpenVPN\config\winclient.ovpnとして保存します。
remote XXX.XXX.XXX.XXX port 1194 proto udp dev tun ifconfig 192.168.200.2 192.168.200.1 redirect-gateway bypass-dhcp bypass-dns def1 persist-key persist-tun secret winclient.key status winclient.log
同様にC:\Program Files (x86)\OpenVPN\config\winclient.keyをサーバから持ってきます。鍵ファイルの改行コードはCR+LFに変換しておきました。(しないと動かないかどうかは未検証)
最後に、OpenVPN GUIを管理者権限で起動して、右クリック->"Connect"が成功すればOK。
クライアント(Debian)の設定
まず、openvpnをインストールします。
$ sudo -H aptitude install openvpn
クライアント側の設定ファイル(/etc/openvpn/winclient.conf)を作成します。redirect-gatewayが肝で、サーバ側に通信を振ってくれます。なお、私はローカルにunbound(DNSキャッシュサーバ)を立てているので必要ないのですが、一般的には、DNSの設定(/etc/resolv.confの処理等)が必要になります(未検証)。
$ cat /etc/openvpn/winclient.conf remote XXX.XXX.XXX.XXX port 1194 proto udp dev tun ifconfig 192.168.200.2 192.168.200.1 redirect-gateway def1 secret /etc/openvpn/winclient.key status /etc/openvpn/winclient.log
次に、サーバ側で作成した/etc/openvpn/winclient.keyをローカルに準備(コピー)します。パーミッションは0600に合わせましょう。
$ ls -lAFi /etc/openvpn ... 269219 -rw-r--r-- 1 root root 432 2010-10-12 11:12 winclient.conf 269145 -rw------- 1 root root 636 2010-10-12 06:12 winclient.key ...
クライアント側でもifup/ifdownを利用することにします。クライアント側ではiptablesの設定は必要ないため、単純です。
$ cat /etc/network/interfaces ... ## OpenVPN(winclient) auto tun_winclient iface tun_winclient inet manual openvpn winclient
$ cat /etc/default/openvpn ... AUTOSTART="none" ...