Conoha VPSにOpenVPNを立てる
今回VPNを作るのは通信の安全性を確保するというよりは、物理的に分散した場所にあるマシンをどこからでも管理できるようにしたいという目的になります。
公共のWiFiをより安全に利用する場合は以前自宅に構築したL2TP/IPsecに接続し、各管理したいマシンはOpenVPNでConoHa VPSに接続します。
最初は標準のCentOSでやってみたのですが、構築後の接続がうまくいかないので使い慣れたdebianで環境を構築しています。
以下設定メモ
まずはopenvpnをインストールします。
後で証明書関係をまとめるために一緒にzipもインストールしました。
# sudo apt-get install openvpn zip
インストールが完了したらeasy-rsaのディレクトリに移動して証明書を作成します。
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/ # sudo nano -w ./vars
下記の部分を変更しました。
export KEY_COUNTRY="JP" export KEY_PROVINCE="Saitama" export KEY_CITY="Kawagoe" export KEY_ORG="MyConoHa" export KEY_EMAIL="%メールアドレス%"
varsを実行して各種証明書とキーを作成しますが、以前もrootにならないと動いてくれなかったので一時的にrootになります。
証明書作成時にいくつか質問が出てきますが、varsファイルを編集しているので変更した内容がデフォルト値になっていると思います。
# sudo su $ . ./vars $ ./clean-all $ ./build-ca $ ./build-key-server conoha $ ./build-key mac $ ./build-dh
サーバーの証明書はconohaという名前にし、クライアント用にはmacの他にも6つほど証明書を作成しています。接続するクライアントの数だけ,/build-key hogeを実行しておきます。
証明書の作成が終わったら証明書なんかを/etc/openvpnディレクトリにコピーします。
$ cd keys/ $ cp dh1024.pem /etc/openvpn/ $ cp conoha.crt /etc/openvpn/ $ cp conoha.key /etc/openvpn/ $ cp ca.crt /etc/openvpn/
証明書作りの最後に/etc/openvpnに移動してTLS-AUTHキーを作成します。
$ cd /etc/openvpn/ $ openvpn --genkey --secret ./ta.key
一通り作成が終わったら設定ファイルを用意します。サンプルをコピーしてきて編集すればOK。
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ $ gunzip server.conf.gz $ nano -w ./server.conf
設定では全ての通信をOpenVPN経由で行うpush "redirect-gateway def1"を設定せず、OpenVPN経由で接続される仮想ネットワーク(今回は192.168.2.0/24)に接続するroute設定をpushさせます。
port 1194 proto udp dev tun ca ca.crt cert conoha.crt key conoha.key dh dh1024.pems erver 192.168.2.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 192.168.2.0 255.255.255.0" client-to-client keepalive 10 120 tls-auth ta.key 0 comp-lzo persist-key persist-tun status openvpn-status.log verb 3
システムの設定でパケットの転送を許可します。
$ nano -w /etc/sysctl.conf net.ipv4.ip_forward = 1 $ sysctl -p
次にiptablesで転送の設定をします。
$ iptables -A INPUT -p udp --dport 1194 -j ACCEPT $ iptables -A INPUT -i tun+ -j ACCEPT $ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $ iptables -A FORWARD -i tun+ -j ACCEPT $ iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT $ iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $ iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT $ iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
作成したコンフィグファイルで正常に起動できるか試します。
$ openvpn --config ./server.conf
これでエラーを出さずに接続待機状態になればOK。Ctrl-Cで終了してデーモンを再起動します。
$ sudo service openvpn restart
続いてクライアント側の用意です。
Macで使用するのでTunnelblikを使用しました。
鍵と証明書はscpなどの適当な方法でサーバーから取得しておきます。
~/Libraryにopenvpnディレクトリを作成してそこに鍵と証明書を配置します。配置ができたらクライアント用の設定ファイルconfig.ovpnを作成します。内容は下記のような感じで。
client tls-auth ta.key 1 dev tun proto udp remote %OpenVPNサーバーのIPアドレス% 1194 ca ca.crt cert mac.crt key mac.key resolv-retry infinite nobind persist-key persist-tun comp-lzo verb 3
この状態でTunnelblikを起動するとconfig.ovpnをTunnelblikに取り込みつつ必要なファイルを~/Library/openvpn/conoha.tblk/Contents/Resources/に移動して接続の準備が完了します。
Tunnelblikのポップアップで接続をクリックすれば接続・認証を経てVPNが確立すると思います。