AWS上でIPsecを構築してみたので、設定方法をメモしておこうと思います。
環境
- AWS(Tokyo,Oregon-region)
- AmazonLinux
- IPSecのパラメータ(IKEv1,aes128,modp1024,PSK)
構成図
設定
1. インストール作業
# yum install -y --enablerepo=epel strongswan
2. ファイルの配置設定
IPsecトンネルの設定ファイルの保管場所を作成します。
# mkdir /etc/strongswan/ipsec.d/peers # echo "include /etc/strongswan/ipsec.d/peers/*.conf" >> /etc/strongswan/ipsec.conf
3. IPsecのパラメーター設定
場所:/etc/strongswan/ipsec.d/peers/
東京リージョン
conn oregon auto=start type=tunnel authby=secret keyexchange=ikev1 ike=aes128-sha1-modp1024 esp=aes128-sha1 left=10.31.1.185 leftid=10.31.1.185 leftsubnet=10.31.0.0/16 right=xxx.xxx.xxx.xxx(EIP) rightid=10.77.1.210 rightsubnet=10.77.0.0/16 compress=no ikelifetime=8h lifetime=8h keyingtries=%forever dpddelay=20 dpdtimeout=60 dpdaction=restart closeaction=restart
オレゴンリージョン
conn jp auto=start type=tunnel authby=secret keyexchange=ikev1 ike=aes128-sha1-modp1024 esp=aes128-sha1 left=10.77.1.210 leftid=10.77.1.210 leftsubnet=10.77.0.0/16 right=xxx.xxx.xxx.xxx(EIP) rightid=10.31.1.185 rightsubnet=10.31.0.0/16 compress=no ikelifetime=8h lifetime=8h keyingtries=%forever dpddelay=20 dpdtimeout=60 dpdaction=restart closeaction=restart
4. PSKの設定
今回は、認証キーをsecret-keyで設定します。
ファイル名:/etc/strongswan/ipsec.secrets
東京リージョン
10.31.1.185 10.77.1.210 : PSK "testtesttest"
オレゴンリージョン
10.77.1.210 10.31.1.185 : PSK "testtesttest"
5. サービス再起動
# strongswan restart
設定確認
1. トンネルの状態確認
# strongswan status Security Associations (1 up, 0 connecting): jp[1]: ESTABLISHED 14 seconds ago, 10.77.1.210[10.77.1.210]...xxx.xxx.xxx.xxx[10.31.1.185] jp{2}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c7312270_i cc0ed9ec_o jp{2}: 10.77.0.0/16 === 10.31.0.0/16 # ip xfrm policy src 10.31.0.0/16 dst 10.77.0.0/16 dir fwd priority 2947 ptype main tmpl src xxx.xxx.xxx.xxx dst 10.77.1.210 proto esp reqid 1 mode tunnel src 10.31.0.0/16 dst 10.77.0.0/16 dir in priority 2947 ptype main tmpl src xxx.xxx.xxx.xxx dst 10.77.1.210 proto esp reqid 1 mode tunnel src 10.77.0.0/16 dst 10.31.0.0/16 dir out priority 2947 ptype main tmpl src 10.77.1.210 dst xxx.xxx.xxx.xxx proto esp reqid 1 mode tunnel
2. ルートテーブル確認
strongSwanはデフォルトでtable 220に経路情報が登録されます。
以下のように経路が登録されていることが確認できます。
東京リージョン
# ip route list table 220 10.77.0.0/16 via 10.31.1.1 dev eth0 proto static src 10.31.1.185
オレゴンリージョン
# ip route list table 220 10.31.0.0/16 via 10.77.1.1 dev eth0 proto static src 10.77.1.210
3. 疎通確認
・その前にEC2インスタンスの”ソース/宛先チェック"を無効にしておく。
・双方のVPCルートテーブルに対向リージョンStrongswanのプライベートIPをStrongswanを設定したNICから送信されるよう経路設定しておく。
東京 to オレゴン
# オレゴンのStrongswanに対してPrivateIPで $ ping 10.77.1.210 -c 3 PING 10.77.1.210 (10.77.1.210) 56(84) bytes of data. 64 bytes from 10.77.1.210: icmp_seq=1 ttl=255 time=124 ms 64 bytes from 10.77.1.210: icmp_seq=2 ttl=255 time=124 ms 64 bytes from 10.77.1.210: icmp_seq=3 ttl=255 time=124 ms --- 10.77.1.210 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 124.524/124.546/124.579/0.408 ms # オレゴンのServerに対して $ ping 10.77.2.230 -c 3 PING 10.77.2.230 (10.77.2.230) 56(84) bytes of data. 64 bytes from 10.77.2.230: icmp_seq=1 ttl=254 time=125 ms 64 bytes from 10.77.2.230: icmp_seq=2 ttl=254 time=125 ms 64 bytes from 10.77.2.230: icmp_seq=3 ttl=254 time=125 ms --- 10.77.2.230 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 125.273/125.388/125.483/0.086 ms
オレゴン TO 東京も同様に疎通がとれます(上と同じなので記載しませんが)
最後に
今回は双方共にstrongSwanを利用している設定しているので、トンネル構築後に対向リージョンのserverに対して疎通を行うことができます。一般的にIPsecは他ベンダー機器との接続は仕様が微妙に相違しているため難関です。例えばルータと接続する場合はベンダーによって仕様が異なり、トンネルは貼れるが、経路が伝搬できないといった問題が起こることが多々あります。その際はIPsecのパラメータをチューニングする、あるいはL2TPと併用(いわゆるL2TP/IPsec)することによって通信を確保するといった方法が可能です。
その他、質問などありましたら、コメント欄にどうぞ!
以上