インターネット VPN (Virtual Private Network) には二拠点間の通信を暗号化する方式によって IPsec-VPN や SSL-VPN などがあります。OpenVPN は SSL-VPN の実装のひとつです。AWS VPC を二つ用意してそれらを OpenVPN で接続してみます。
myvpc-1
myvpc-2
以下の内容を許可します。検証用ですので簡単のため 0.0.0.0/0 としています。
以下の二つのインスタンスを OpenVPN サーバとして設定します。
上記二つのインスタンスについて、AWS コンソールにおいて「Actions」→「Networking」→「Change Source/Dest. Check」を Disable します。
/sbin/sysctl は起動中にカーネルパラメータを変更するためのコマンドです。OpenVPN サーバは IP パケットを転送する必要があるため設定を変更します。
$ sudo vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 ← 0 を 1 に変更して保存
設定を反映させます。
$ sudo /sbin/sysctl -e -p
$ sudo yum install openvpn
今回は鍵を共有することで通信の暗号化を行うように設定します。
$ sudo openvpn --genkey --secret /etc/openvpn/secret.key
何らかの方法で手動で鍵をコピーしてきます。権限を変更します。
$ sudo chmod 600 /etc/openvpn/secret.key
myinstance-1-1(52.6.58.160):/etc/openvpn/1-to-2.conf
port 1194
proto udp
dev tun ←トンネル
secret "/etc/openvpn/secret.key"
remote 52.6.159.238 ←相手のVPNサーバ
route 10.2.0.0 255.255.0.0 ←ルーティングするパケット
ifconfig 169.254.255.1 169.254.255.2 ←OpenVPN同士で利用する自分と相手のIP
status openvpn-status.log
verb 3
myinstance-2-1(52.6.159.238):/etc/openvpn/2-to-1.conf
port 1194
proto udp
dev tun
secret "/etc/openvpn/secret.key"
remote 52.6.58.160
route 10.1.0.0 255.255.0.0
ifconfig 169.254.255.2 169.254.255.1
status openvpn-status.log
verb 3
myinstance-1-1 (10.1.1.4, EIP 52.6.58.160)
$ sudo openvpn --config /etc/openvpn/1-to-2.conf
myinstance-2-1 (10.2.1.4, EIP 52.6.159.238)
$ sudo openvpn --config /etc/openvpn/2-to-1.conf
以下のように表示されれば VPN 接続成功です。
...
Wed May 6 14:16:27 2015 Peer Connection Initiated with [AF_INET]52.6.159.238:1194
Wed May 6 14:16:28 2015 Initialization Sequence Completed
myinstance-1-2 (10.1.2.4, EIP 52.6.133.31)
$ ping 10.2.2.4
myinstance-2-2 (10.2.2.4, EIP 52.6.254.18)
$ ping 10.1.2.4
$ sudo service openvpn start
ログファイル
$ sudo cat /var/log/messages | grep openvpn
$ sudo cat /etc/openvpn/openvpn-status.log