no-image

strongSwanによるIPsec構築(AmazonLinux <-> Amazon Linux)

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)することによって通信を確保するといった方法が可能です。

その他、質問などありましたら、コメント欄にどうぞ!

以上