ちょっと話題の記事

OpenswanでVPN接続してIPSec通信をやってみた。

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

はじめに

くどうです

今回は、VPN(Virtual Private Network)について投稿します。
AWSではオンプレとVPNを利用し接続する場合、VPCで用意されているVPNを利用するか、マーケットプレイスで用意されているvyatta、OpenVPN、Sophosなどのソフトウェアルータを利用するのが一般的だと思います。
他にも、DirectConnectが用意されていますが専用線のためコスト面など簡単に導入できないのが実情です。

そこで、簡単に導入が可能なVPNがOpenswanを紹介します。
https://www.openswan.org/
今回の投稿の背景として、VPCで用意されているVPNやvyattaが利用しできなかったことがあります。
マーケットプレイスにvyattaなどのイメージは利用できますが下記のような問題に直面しOpenswanを検証しました。

10拠点を超える多拠点で接続する

VPCで用意されているVPNの制限は1VPCあたり10拠点までの接続制限がある。
詳細は下記のURLよりご確認ください。
Amazon VPC 制限

VPNのランニングコスト

VPCで用意されているVPNについてはランニングコストが発生します。
一時間当たり約0.05 USD。
約5円換算で
24時間=5x24=120円
1か月30日=120x30=3,600円
1年365日=120x365=43,800円
これに加え拠点が増えるとその分の掛け算となり
10拠点だとした場合43,800x10=438,000となります。
また、標準的な AWS データ転送料も発生し、場合によってはコストが増大することも考えられます。
詳しい費用については下記のURLよりご確認ください。
VPN 接続料金表

vyattaとYAMAHAのRTXと相性が悪い。

vyattaと接続が簡単ではない(接続はできるが面倒である)。
IPSecで接続する場合、IPSec Over IPIPでの接続が必要である。
vyattaについてはCore Editionの開発が終了しているため今後のサポートを考えると問題があります。
http://ja.wikipedia.org/wiki/Vyatta

他のマーケットプレイスのソフトウェアルータでも相性が悪い。

SophosやOpenVPNでも検証を行ったが接続を行えなかった。
検証不足かもしれませんがあしからず。

以上、10拠点以上の接続をYAMAHA RTXを行った場合の問題に直面しました。
Openswanで多拠点接続の不安定さなど不確定要素の部分は考慮していません。
また、拠点数が少ない場合は、安定性などを考慮した場合、VPCで用意されているVPNを利用することをお勧めします。

ネットワーク構成図

検証を行う環境は以下になります。
openswan

Openswanの準備

AWS側に用意するAMIはAmazon Linuxを用意しましょう。
Ubuntu、CentOSなどでも動作可能です。
[Bash] # yum update # yum install openswan [/Bash] secretsファイルの変更を行います。pre-shared-keyは任意に設定してください。
[Bash] # vi /etc/ipsec.secrets [/Bash] [Bash] include /etc/ipsec.d/*.secrets : PSK "xxxxxxxxxxxxxxxx" [/Bash]

最初に設定を行います。
[Bash] # vi /etc/ipsec.conf [/Bash] [Bash] version 2.0 config setup dumpdir=/var/run/pluto/ nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10 oe=off protostack=auto include /etc/ipsec.d/*.conf [/Bash] 対向のルータRTX810に接続する情報はvpnxx.confとしてipsec.dディレクトリに保存します。
[Bash] # vi /etc/ipsec.d/vpnxx.conf [/Bash] [Bash] conn vpn01 auto=start type=tunnel aggrmode=no authby=secret keyexchange=ike ike=aes128-sha1;modp1024 phase2=esp phase2alg=aes128-sha1;modp1024 pfs=no compress=no ikelifetime=8h salifetime=8h

#AWS Config left=(インスタンスのプライベートIPアドレス[xxx.xxx.xxx.xxx]) leftsubnet=(VPCのネットワークアドレス[xxx.xxx.xxx.xxx/xx]) leftid=(EIP[xxx.xxx.xxx.xxx])

#Internal Config right=(オンプレのグローバルIPアドレス[xxx.xxx.xxx.xxx]) rightsubnet=(オンプレのネットワークアドレス[xxx.xxx.xxx.xxx/xx]) rightid=(オンプレのLAN側IPアドレス[xxx.xxx.xxx.xxx]) [/Bash] IPフォーワードのおまじない。
[Bash] # echo 1 >/proc/sys/net/ipv4/ip_forward [/Bash] 以下は再起動後も設定が反映されるよう設定します。
networkファイルに設定します。 [Bash] # vim /etc/sysconfig/network [/Bash] 以下を追記します。
[Bash] FORWARD_IPV4=yes [/Bash] sysctl.confへ設定します
[Bash] # vim /etc/sysctl.conf [/Bash] 以下に変更します。
[Bash] net.ipv4.ip_forward = 1 [/Bash]

OpenswanインスタンスのSource/Destination CheckをDisableにします。
つぎに、VPCのRoute TableにオンプレのネットワークアドレスをOpenswanインスタンスに向けに登録します。
また、セキュリティグループにはオンプレのネットワークアドレスも追加しましょう。
以上でOpenswan側に設定は完了です。

YAHAMA RTX810の準備

トンネルの準備を行います。トンネルIDなどは環境に応じて変更してください。
[Bash] ip route (VPCのネットワークアドレス) gateway tunnel 1 tunnel select 1 tunnel encapsulation ipsec ipsec tunnel 1001 ipsec sa policy 1001 1 esp aes-cbc sha-hmac ipsec ike encryption 1 aes-cbc ipsec ike group 1 modp1024 ipsec ike hash 1 sha ipsec ike local address 1 (オンプレのLAN側IPアドレス[xxx.xxx.xxx.xxx]) ipsec ike local id 1 (オンプレのLAN側IPアドレス[xxx.xxx.xxx.xxx]) ipsec ike pre-shared-key 1 text xxxxxxxxxxxxxxxx ipsec ike remote address 1 (EIP[xxx.xxx.xxx.xxx]) ipsec ike remote id 1 (EIP[xxx.xxx.xxx.xxx]) ipsec auto refresh 1 on tunnel enable 1 [/Bash] saveは忘れずに。

接続確認

Openswanを起動しましょう。
[Bash] # /etc/init.d/ipsec start # /etc/init.d/ipsec status IPsec running - pluto pid: xxxxx pluto pid xxxxx 1 tunnels up some eroutes exist # chkconfig ipsec on [/Bash] pingをオンプレに打ってみましょう。
レスポンスがあれば成功です。
ついで、tcpdumpでパケットを確認してみましょう。
以下はpingのパケットになります。
[Bash] IP インスタンスのプライベートIPアドレス > オンプレのグローバルIPアドレス: ESP(spi=0x0706f373,seq=0x6), length 132 IP オンプレのグローバルIPアドレス > インスタンスのプライベートIPアドレス: ESP(spi=0x8f98d71d,seq=0x1b), length 132 [/Bash] IPSecでデータ転送に使われるESPパケットがが確認できれば成功です。

まとめ

今回はVPNの設定を行ってみました。
ただし、運用には気を付けましょう。IPSecは複合化暗号化にリソースを使います。そのため、データ転送量や拠点数によってスケールアップ、スケールアウトが必要になるかもしれません。
また、YAHAMAに限らずCISCOなどでもIPSec接続は可能だと思います。
これで、オンプレとAWSへの道が開けるかもかも・・・