複数のAmazon VPCのプライベートネットワークをOpenswanを使って接続する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

openswan_logo

今度はOpenswanだっ。OpenVPNはSSL-VPNの実装でしたが、OpenswanはIPsec-VPNの実装です。

共通手順

前半の手順はOpenVPN編と全く同じです。「OpenVPNのインストールと設定」の直前まで(「IPv4フォワーディングの有効化」のセクションまで)を読んで、作業してください。

OpenVPN編を実際にやってみた方は、その環境で、openvpnのプロセスを止めてしまえば、引き続きこのOpenswan編もお楽しみ頂けます。

Openswanのインストールと設定

VPC Instance-AにおけるOpenswanのインストールと設定

まず、Openswanをインストール。

$ sudo yum -y install openswan

続いて、設定ファイルを作成します。 /etc/ipsec.conf というファイルの末尾にある「include /etc/ipsec.d/*.conf」のコメントアウトを外します。さらに、 /etc/ipsec.d/a-to-b.conf というファイルに下記の内容を記述します。「{VPN Instance-AのEIP}」及び「{VPN Instance-BのEIP}」は適宜置換してください。

conn a-to-b
	type=tunnel
	authby=secret
	left=%defaultroute
	leftid={VPN Instance-AのEIP(つまり自分のEIP)}
	leftnexthop=%defaultroute
	leftsubnet=10.0.0.0/16
	right={VPN Instance-BのEIP(つまり相手のEIP)}
	rightsubnet=10.1.0.0/16
	pfs=yes
	auto=start

さらに /etc/ipsec.d/a-to-b.secrets というファイルに下記の内容を記述します。

{VPN Instance-AのEIP(つまり自分のEIP)} {VPN Instance-BのEIP(つまり相手のEIP)}: PSK "foobar"

ちなみに上記の foobar の部分が、通信の暗号化に利用する共通鍵となります。実運用の際は、適切なパスフレーズに変更してください。

VPC-AのOpenswanを起動します。

$ sudo service ipsec start

VPC Instance-BにおけるOpenswanのインストールと設定

こちらも同様に、Openswanをインストール。

$ sudo yum -y install openswan

同じように /etc/ipsec.conf というファイルの末尾にある「include /etc/ipsec.d/*.conf」のコメントアウトを外します。さらに、 /etc/ipsec.d/b-to-a.conf というファイルに下記の内容を記述します。「{VPN Instance-AのEIP}」及び「{VPN Instance-BのEIP}」は適宜置換してください。

conn b-to-a
	type=tunnel
	authby=secret
	left=%defaultroute
	leftid={VPN Instance-BのEIP(つまり自分のEIP)}
	leftnexthop=%defaultroute
	leftsubnet=10.1.0.0/16
	right={VPN Instance-AのEIP(つまり相手のEIP)}
	rightsubnet=10.0.0.0/16
	pfs=yes
	auto=start

さらに /etc/ipsec.d/b-to-a.secrets というファイルに下記の内容を記述します。

{VPN Instance-BのEIP(つまり自分のEIP)} {VPN Instance-AのEIP(つまり相手のEIP)}: PSK "foobar"

VPC-BのOpenswanを起動します。

$ sudo service ipsec start

ゴールの検証

以上で、VPN接続が確立したはずです。各インスタンスから相互にpingを飛ばし合って、全組み合わせで問題なくpingの到達応答があることを確認します。さらにtracerouteで通信経路も確認してみます。

まずは、アイルランドTerminal-AからサンパウロTerminal-Bへ。

[ec2-user@ip-10-0-1-30 ~]$ ping -c2 10.1.1.40
PING 10.1.1.40 (10.1.1.40) 56(84) bytes of data.
64 bytes from 10.1.1.40: icmp_seq=1 ttl=62 time=216 ms
64 bytes from 10.1.1.40: icmp_seq=2 ttl=62 time=214 ms

--- 10.1.1.40 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1216ms
rtt min/avg/max/mdev = 214.771/215.638/216.506/0.983 ms

[ec2-user@ip-10-0-1-30 ~]$ traceroute 10.1.1.40
traceroute to 10.1.1.40 (10.1.1.40), 30 hops max, 60 byte packets
 1  10.0.0.10 (10.0.0.10)  1.856 ms  1.824 ms  1.856 ms
 2  10.1.0.20 (10.1.0.20)  216.433 ms  216.488 ms  216.467 ms
 3  10.1.1.40 (10.1.1.40)  216.732 ms  216.714 ms  216.687 ms

続いて、サンパウロTerminal-BからアイルランドTerminal-Aへ。

[ec2-user@ip-10-1-1-40 ~]$ ping -c2 10.0.1.30
PING 10.0.1.30 (10.0.1.30) 56(84) bytes of data.
64 bytes from 10.0.1.30: icmp_seq=1 ttl=62 time=214 ms
64 bytes from 10.0.1.30: icmp_seq=2 ttl=62 time=214 ms

--- 10.0.1.30 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1216ms
rtt min/avg/max/mdev = 214.549/214.613/214.678/0.467 ms

[ec2-user@ip-10-1-1-40 ~]$ traceroute 10.0.1.30
traceroute to 10.0.1.30 (10.0.1.30), 30 hops max, 60 byte packets
 1  10.1.0.20 (10.1.0.20)  0.293 ms  0.267 ms  0.244 ms
 2  10.0.0.10 (10.0.0.10)  214.257 ms  214.466 ms  214.447 ms
 3  10.0.1.30 (10.0.1.30)  214.975 ms  214.957 ms  214.933 ms

以上で、Openswanでもゴールは達成です。お疲れ様でした!

参考文献

Connecting Multiple VPCs with EC2 Instances (IPSec)