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

photo_openswan

はじめに

くどうです

今回は、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などでも動作可能です。
# yum update
# yum install openswan
secretsファイルの変更を行います。pre-shared-keyは任意に設定してください。
# vi /etc/ipsec.secrets
include /etc/ipsec.d/*.secrets
: PSK "xxxxxxxxxxxxxxxx"
最初に設定を行います。
# vi /etc/ipsec.conf
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
対向のルータRTX810に接続する情報はvpnxx.confとしてipsec.dディレクトリに保存します。
# vi /etc/ipsec.d/vpnxx.conf
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])
IPフォーワードのおまじない。
 
# echo 1 >/proc/sys/net/ipv4/ip_forward
以下は再起動後も設定が反映されるよう設定します。
networkファイルに設定します。
# vim /etc/sysconfig/network
以下を追記します。
FORWARD_IPV4=yes
sysctl.confへ設定します
# vim /etc/sysctl.conf
以下に変更します。
net.ipv4.ip_forward = 1
OpenswanインスタンスのSource/Destination CheckをDisableにします。
つぎに、VPCのRoute TableにオンプレのネットワークアドレスをOpenswanインスタンスに向けに登録します。
また、セキュリティグループにはオンプレのネットワークアドレスも追加しましょう。
以上でOpenswan側に設定は完了です。

YAHAMA RTX810の準備

トンネルの準備を行います。トンネルIDなどは環境に応じて変更してください。
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
saveは忘れずに。

接続確認

Openswanを起動しましょう。
# /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
pingをオンプレに打ってみましょう。
レスポンスがあれば成功です。
ついで、tcpdumpでパケットを確認してみましょう。
以下はpingのパケットになります。
IP インスタンスのプライベートIPアドレス > オンプレのグローバルIPアドレス: ESP(spi=0x0706f373,seq=0x6), length 132
IP オンプレのグローバルIPアドレス > インスタンスのプライベートIPアドレス: ESP(spi=0x8f98d71d,seq=0x1b), length 132
IPSecでデータ転送に使われるESPパケットがが確認できれば成功です。

まとめ

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