オープンソースの strongSwan ソフトウェアを使用して、Alibaba Cloud の VPN ゲートウェイとの間に IPsec-VPN 接続を確立し、オンプレミス環境とクラウド環境間のプライベートネットワーク通信を有効化します。
例となるシナリオ
このシナリオでは、データセンター内のゲートウェイデバイスに strongSwan をデプロイし、Alibaba Cloud との間にデュアルトンネル IPsec-VPN 接続を確立します。これにより、データセンターとクラウドリソースが接続されます。
IP アドレス計画
データセンター
プライベート CIDR ブロック: 172.16.0.0/16
strongSwan デバイス
NIC eth0: 172.16.20.80、パブリック送信元 IP アドレス 1: 120.XX.XX.202 にマッピング
(任意)NIC eth1: 172.16.21.248、パブリック送信元 IP アドレス 2: 47.XX.XX.127 にマッピング
説明NAT を使用しないシナリオについては、「NIC にパブリック IP アドレスを持つ strongSwan デバイスの設定方法」をご参照ください。
1 つのパブリック送信元 IP アドレス(シングル送信元)または 2 つのパブリック送信元 IP アドレス(デュアル送信元)を持つデバイスを使用して、デュアルトンネル IPsec-VPN 接続を確立できます。本トピックでは、両方のシナリオの例を示します。
Alibaba Cloud
VPC CIDR ブロック: 192.168.0.0/16
vSwitch 1 CIDR ブロック: 192.168.10.0/24
vSwitch 2 CIDR ブロック: 192.168.20.0/24
vSwitch 3 CIDR ブロック: 192.168.40.0/24
vSwitch 4 CIDR ブロック: 192.168.50.0/24
vSwitch 5 CIDR ブロック: 192.168.55.0/24
VPN ゲートウェイ
IPsec アドレス 1: 47.XX.XX.151
IPsec アドレス 2: 47.XX.XX.87
説明VPN ゲートウェイを作成すると、システムは自動的に 2 つの IPsec アドレスを VPN ゲートウェイインスタンスに割り当てます。
BGP IP アドレス
本トピックでは、静的ルーティングおよび BGP 動的ルーティングを使用する IPsec-VPN 接続向けに strongSwan デバイスを設定する方法について説明します。BGP 動的ルーティングを使用しない場合は、このセクションをスキップできます。次の表は、この例における BGP CIDR ブロック計画を示しています。
リソース | トンネル | BGP トンネル CIDR ブロック | BGP IP アドレス | BGP ASN |
VPN ゲートウェイインスタンス | トンネル 1 | 169.254.10.0/30 説明 同じ VPN ゲートウェイインスタンスにおいて、各トンネルの CIDR ブロックは一意である必要があります。 | 169.254.10.1 | 65535 |
トンネル 2 | 169.254.20.0/30 | 169.254.20.1 | ||
strongSwan デバイス | トンネル 1 | 169.254.10.0/30 | 169.254.10.2 | 65530 |
トンネル 2 | 169.254.20.0/30 | 169.254.20.2 |
VPN パラメーター
この例では、両方のトンネルで同じパラメーターを使用します。各トンネルについて、strongSwan デバイスと Alibaba Cloud 上の設定が一致していることを確認してください。
事前共有鍵: ChangeMe***
IKE 設定
IKE バージョン: ikev2
ネゴシエーションモード: main
暗号化アルゴリズム: aes
認証アルゴリズム: sha1
DH グループ: group2
SA 有効期間(秒): 86400
IPsec 設定:
暗号化アルゴリズム: aes
認証アルゴリズム: sha1
DH グループ: group2
SA 有効期間(秒): 86400
Alibaba Cloud 側の準備
計画するパブリック送信元 IP アドレスの数およびルーティング方式に基づき、Alibaba Cloud 側で以下の設定を完了します。
BGP 動的ルーティングによるデュアルエグレス
「VPC とデータセンター間の接続(デュアルトンネルモードおよび BGP 動的ルーティング)」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成、カスタマーゲートウェイの作成、IPsec-VPN 接続の作成、およびBGP 自動ルート広告の有効化。
strongSwan デバイスには 2 つのパブリック送信元 IP アドレスがあります。カスタマーゲートウェイを 2 つ作成する必要があります。
IPsec-VPN 接続を作成する際、トンネル 1 をパブリック送信元 1 に、トンネル 2 をパブリック送信元 2 に関連付けてください。このシナリオでは、ルーティングモードが 宛先ルーティングモード に設定されます。
デュアル送信元での静的ルーティング
「標準 VPN ゲートウェイのクイックスタート」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成、カスタマーゲートウェイの作成、IPsec-VPN 接続の作成、およびVPN ゲートウェイのルート設定。
strongSwan デバイスには 2 つのパブリック送信元 IP アドレスがあります。カスタマーゲートウェイを 2 つ作成する必要があります。
IPsec-VPN 接続を作成する際、トンネル 1 をパブリック送信元 1 に、トンネル 2 をパブリック送信元 2 に関連付けてください。このシナリオでは、ルーティングモードが 宛先ルーティングモード に設定されます。
シングル送信元 - BGP 動的ルーティング
「VPC とデータセンター間の接続(デュアルトンネルモードおよび BGP 動的ルーティング)」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成、カスタマーゲートウェイの作成、IPsec-VPN 接続の作成、およびBGP 自動ルート広告の有効化。
strongSwan デバイスには 1 つのパブリック送信元 IP アドレスのみがあります。カスタマーゲートウェイは 1 つだけ作成する必要があります。
IPsec-VPN 接続を作成する際、両方のトンネルを同じカスタマーゲートウェイに関連付けてください。このシナリオでは、ルーティングモードが 宛先ルーティングモード に設定されます。
シングル送信元での静的ルーティング
「標準 VPN ゲートウェイのクイックスタート」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成、カスタマーゲートウェイの作成、IPsec-VPN 接続の作成、およびVPN ゲートウェイのルート設定。以下の点にご注意ください。
strongSwan デバイスには 1 つのパブリック送信元 IP アドレスのみがあります。カスタマーゲートウェイは 1 つだけ作成する必要があります。
IPsec-VPN 接続を作成する際、保護対象データフロー モード を使用し、以下のパラメーターを指定する必要があります。両方のトンネルを同じカスタマーゲートウェイに関連付けてください。
ローカルネットワーク: Alibaba Cloud 側の VPC の CIDR ブロック(192.168.0.0/16)を入力します。
リモートネットワーク: データセンターのプライベート CIDR ブロック(172.16.0.0/16)を入力します。
IPsec-VPN 接続がトランジットルーターに関連付けられているシナリオでは、この方法ではなく BGP 動的ルーティングを使用することを推奨します。
strongSwan デバイスの設定
以下の手順では、CentOS Stream 9 64 ビットオペレーティングシステムを実行する strongSwan デバイスを例として使用します。他のオペレーティングシステムについては、「strongSwan 公式ドキュメント」をご参照ください。
1. ファイアウォールポリシーの設定
strongSwan デバイス上で、ESP プロトコル(IP プロトコル番号 50)、UDP ポート 500、および UDP ポート 4500 を通過するトラフィックを許可します。
iptables -I INPUT -p 50 -j ACCEPT
iptables -I INPUT -p udp --dport 500 -j ACCEPT
iptables -I INPUT -p udp --dport 4500 -j ACCEPT2. トラフィック転送の有効化
echo 1 > /proc/sys/net/ipv4/ip_forward上記のコマンドは一時的なものであり、デバイス再起動後には持続しません。変更を永続化するには、以下の手順に従ってください。
3. strongSwan のインストール
dnf install epel-release -y
dnf install strongswan -y4. デュアルトンネルの設定
静的ルーティングと BGP ルーティングによるデュアルイグレス
デュアル送信元は XFRM 仮想ネットワークインターフェースに基づいています。XFRM 仮想ネットワークインターフェースを使用するには、strongSwan 5.8.0 以降をインストールし、Linux カーネル 4.19 以降および iproute2 5.1.0 以降を使用し、カーネルが xfrm モジュールをサポートしている必要があります。lsmod | grep xfrm コマンドを実行しても結果が返されない場合、xfrm モジュールはサポートされていません。詳細については、「XFRM Interfaces on Linux」をご参照ください。
Alibaba Cloud 側の 2 つの IPsec アドレスへのルートを追加します。これにより、IPsec アドレス 1 宛のトラフィックは eth0 経由でルーティングされ、IPsec アドレス 2 宛のトラフィックは eth1 経由でルーティングされます。
ip route add 47.XX.XX.151 via 172.16.20.253 dev eth0 #172.16.20.253 は eth0 のプライベートゲートウェイアドレスです。 ip route add 47.XX.XX.87 via 172.16.21.253 dev eth1 #172.16.21.253 は eth1 のプライベートゲートウェイアドレスです。以下の 2 つの IPsec アドレスに PING できることを確認してください。
ping 47.XX.XX.151 ping 47.XX.XX.87IPsec-VPN トンネルを確立するための仮想ネットワークインターフェースを 2 つ作成します。
ip link add ipsec0 type xfrm dev eth0 if_id 42 # トンネル 1 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 42、基盤となるインターフェースはパブリックインターフェース eth0 です。 ip link add ipsec1 type xfrm dev eth1 if_id 43 # トンネル 2 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 43、基盤となるインターフェースはパブリックインターフェース eth1 です。 ip link set ipsec0 up # トンネル 1 用の XFRM 仮想ネットワークインターフェースを起動します。 ip link set ipsec1 up # トンネル 2 用の XFRM 仮想ネットワークインターフェースを起動します。重要仮想ネットワークインターフェースを作成する設定は一時的なものです。strongSwan デバイスを再起動した後は、再度設定を追加し、
sudo systemctl restart strongswan;swanctl --load-allコマンドを実行する必要があります。このコマンドには root 権限が必要です。strongSwan デバイスの起動スクリプトを追加することで、デバイス再起動後に自動的に仮想ネットワークインターフェースが追加されるようにできます。strongSwan 設定ファイルを修正します。
元の strongSwan 設定ファイルをバックアップします。
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bakstrongSwan 設定ファイルを作成します。
vi /etc/strongswan/swanctl/swanctl.conf例となるシナリオで指定された IPsec パラメーターに基づき、以下の設定を追加して保存します。
重要静的ルーティングを使用する場合は、設定ファイル内の
updown = /root/connect_1.shおよびupdown = /root/connect_2.shコマンドのコメントを外す必要があります。connections { vco1 { # IPsec-VPN トンネル 1 の VPN 設定を追加します。 version = 2 # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。 local_addrs = 172.16.20.80 # 最初のローカル NIC の IP アドレス。 remote_addrs = 47.XX.XX.151 # トンネル 1 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス(IPsec アドレス 1)です。 dpd_delay = 10 rekey_time = 84600 # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IKE 設定の SA 有効期間と同じ値である必要があります。 over_time = 1800 proposals = aes-sha1-modp1024 # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の設定と同じ値である必要があります。group2 は modp1024 に対応します。 encap = yes local { auth = psk # ローカル側の認証方式として PSK を指定します。 id = 120.XX.XX.202 # 最初のローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じ値である必要があります。 } remote { auth = psk # ピア側の認証方式として PSK を指定します。 id = 47.XX.XX.151 # Alibaba Cloud 側の IPsec アドレス 1。Alibaba Cloud 側のトンネル 1 の LocalId と同じ値である必要があります。 } children { vco_child1 { local_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 remote_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 mode = tunnel rekey_time = 85500 life_time = 86400 # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定の SA 有効期間と同じ値である必要があります。 dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。 if_id_out = 42 # トンネル 1 の XFRM 仮想ネットワークインターフェースを、トンネル 1 の送信および受信インターフェースとして指定します。 if_id_in = 42 #updown = /root/connect_1.sh # トンネル 1 の UP/DOWN ステータスに基づいてルートを設定する /root/connect_1.sh スクリプトを実行します。このパラメーターは静的ルーティングを使用する場合にのみ必要です。 } } } vco2 { # IPsec-VPN トンネル 2 の VPN 設定を追加します。 version = 2 # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 2 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。 local_addrs = 172.16.21.248 # 2 番目のローカル NIC の IP アドレス。 remote_addrs = 47.XX.XX.87 # トンネル 2 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス(IPsec アドレス 2)です。 dpd_delay = 10 rekey_time = 84600 # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定の SA 有効期間と同じ値である必要があります。 over_time = 1800 # proposals = aes-sha1-modp1024 # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定と同じ値である必要があります。group2 は modp1024 に対応します。 encap = yes local { auth = psk # ローカル側の認証方式として PSK を指定します。 id = 47.XX.XX.127 # 2 番目のローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 2 の RemoteId と同じ値である必要があります。 } remote { auth = psk # ピア側の認証方式として PSK を指定します。 id = 47.XX.XX.87 # Alibaba Cloud 側の IPsec アドレス 2。Alibaba Cloud 側のトンネル 2 の LocalId と同じ値である必要があります。 } children { vco_child2 { local_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 remote_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 mode = tunnel rekey_time = 85500 life_time = 86400 # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定の SA 有効期間と同じ値である必要があります。 dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。 if_id_out = 43 # トンネル 2 の XFRM 仮想ネットワークインターフェースを、トンネル 2 の送信および受信インターフェースとして指定します。 if_id_in = 43 #updown = /root/connect_2.sh # トンネル 2 の UP/DOWN ステータスに基づいてルートを設定する /root/connect_2.sh スクリプトを実行します。このパラメーターは静的ルーティングを使用する場合にのみ必要です。 } } } } secrets { ike-vco1 { id = 47.XX.XX.151 # Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス。 secret = ChangeMe*** # トンネル 1 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じ値である必要があります。 } ike-vco2 { id = 47.XX.XX.87 # Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス。 secret = ChangeMe*** # トンネル 2 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 2 の事前共有鍵と同じ値である必要があります。 } }
strongSwan プロセスを再起動し、strongSwan 設定を再読み込みした後、トンネルステータスを確認します。
sudo systemctl restart strongswan swanctl --load-all watch swanctl --list-sas出力には IPsec-VPN 接続が確立されていることが表示されますが、ルートが設定されていないため、ネットワーク通信はまだ有効になっていません。

ルートを設定します。
使用するルーティング方式に基づき、関連する内容をご確認ください。
BGP 動的ルーティング
説明strongSwan デバイスを再起動した後は、再度 BGP 設定を追加する必要があります。
以下のコマンドを実行して BGP IP アドレスを設定します。
ip address add 169.254.10.2/30 dev ipsec0 ip address add 169.254.20.2/30 dev ipsec1FRRouting (FRR) ソフトウェアをインストールします。
yum install -y frrvi /etc/frr/daemonsコマンドを実行して設定ファイルを編集し、BGP 動的ルーティングを有効にします。iキーを押して挿入モードに入ります。bgpd パラメーターの値をyesに変更して BGP 動的ルーティングを有効にします。Escキーを押して挿入モードを終了し、:wqと入力して設定を保存します。FRR を実行します。
systemctl enable frr systemctl restart frrBGP 設定を追加します。
以下のコマンドを実行して設定インターフェースに入ります。
vtysh以下のコマンドを実行して設定モードに入ります。
config terminalBGP 設定を追加します。
コマンドを実行する際、以下の値を実際に使用する値に置き換えてください。
"169.254.10.1" および "169.254.20.1" を Alibaba Cloud 側のトンネルの BGP IP アドレスに置き換えます。
"65535" をお客様のシナリオにおける VPN ゲートウェイの BGP ASN に置き換えます。
"172.16.20.0/24" および "172.16.21.0/24" をデータセンターの CIDR ブロックに置き換えます。
route-map allow-all permit 1 exit router bgp 65530 bgp router-id 169.254.10.2 neighbor 169.254.10.1 remote-as 65535 neighbor 169.254.10.1 timers 10 30 neighbor 169.254.20.1 remote-as 65535 neighbor 169.254.20.1 timers 10 30 address-family ipv4 unicast network 172.16.20.0/24 network 172.16.21.0/24 neighbor 169.254.10.1 soft-reconfiguration inbound neighbor 169.254.10.1 route-map allow-all in neighbor 169.254.10.1 route-map allow-all out neighbor 169.254.20.1 soft-reconfiguration inbound neighbor 169.254.20.1 route-map allow-all in neighbor 169.254.20.1 route-map allow-all out maximum-paths 32 exit-address-family exit
exitコマンドを実行して設定モードを終了し、show ip bgpコマンドを実行して BGP ルートを表示します。strongSwan デバイスが VPC へのルートを学習しており、データセンターと VPC 間で通信できていることが確認できます。

静的ルーティング
strongSwan が呼び出してルートを設定し、トラフィック転送を制御するためのスクリプトを 2 つ作成します。
/root/connect_1.sh スクリプトを作成・編集します。
vi /root/connect_1.sh以下の内容を追加して保存します。
#!/usr/bin/env bash if [ x"$PLUTO_VERB" == "xup-client" ]; then echo "ip route add 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec0 metric 100 elif [ x"$PLUTO_VERB" == "xdown-client" ]; then echo "ip route del 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec0 metric 100 fi目的:トンネル 1 が UP 状態になると、このスクリプトは Alibaba Cloud VPC(192.168.0.0/16)宛のトラフィックをトンネル 1 の XFRM 仮想ネットワークインターフェース経由でルーティングするルートを追加します。スクリプトはルートメトリックを 100 に設定し、トンネル 2 の XFRM 仮想ネットワークインターフェースを指すルートよりも優先度を高くします。トンネル 1 が DOWN 状態になると、スクリプトはこのルートを削除します。
/root/connect_2.sh スクリプトを作成・編集します。
vi /root/connect_2.sh以下の内容を追加して保存します。
#!/usr/bin/env bash if [ x"$PLUTO_VERB" == "xup-client" ]; then echo "ip route add 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec1 metric 101 elif [ x"$PLUTO_VERB" == "xdown-client" ]; then echo "ip route del 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec1 metric 101 fi目的:トンネル 2 が UP 状態になると、このスクリプトは Alibaba Cloud VPC(192.168.0.0/16)宛のトラフィックをトンネル 2 の XFRM 仮想ネットワークインターフェース経由でルーティングするルートを追加します。スクリプトはルートメトリックを 101 に設定し、トンネル 1 の XFRM 仮想ネットワークインターフェースを指すルートよりも優先度を低くします。トンネル 2 が DOWN 状態になると、スクリプトはこのルートを削除します。
2 つのスクリプトに実行権限を付与します。
sudo chmod +x /root/connect_1.sh sudo chmod +x /root/connect_2.shstrongSwan プロセスを再起動します。
sudo systemctl restart strongswan以下のコマンドを実行してルートが設定されているか確認します。
route -n
単一エグレスと BGP 動的ルーティング
BGP 動的ルーティングは XFRM 仮想ネットワークインターフェースに基づいています。XFRM 仮想ネットワークインターフェースを使用するには、strongSwan 5.8.0 以降をインストールし、Linux カーネル 4.19 以降および iproute2 5.1.0 以降を使用し、カーネルが xfrm モジュールをサポートしている必要があります。lsmod | grep xfrm コマンドを実行しても結果が返されない場合、xfrm モジュールはサポートされていません。詳細については、「XFRM Interfaces on Linux」をご参照ください。
IPsec-VPN トンネルを確立するための仮想ネットワークインターフェースを 2 つ作成します。
ip link add ipsec0 type xfrm dev eth0 if_id 42 # トンネル 1 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 42、基盤となるインターフェースはパブリックインターフェース eth0 です。 ip link add ipsec1 type xfrm dev eth0 if_id 43 # トンネル 2 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 43、基盤となるインターフェースはパブリックインターフェース eth0 です。 ip link set ipsec0 up # トンネル 1 用の XFRM 仮想ネットワークインターフェースを起動します。 ip link set ipsec1 up # トンネル 2 用の XFRM 仮想ネットワークインターフェースを起動します。重要仮想ネットワークインターフェースを作成する設定は一時的なものです。strongSwan デバイスを再起動した後は、再度設定を追加し、
sudo systemctl restart strongswan;swanctl --load-allコマンドを実行する必要があります。このコマンドには root 権限が必要です。strongSwan デバイスの起動スクリプトを追加することで、デバイス再起動後に自動的に仮想ネットワークインターフェースが追加されるようにできます。strongSwan 設定ファイルを修正します。
元の strongSwan 設定ファイルをバックアップします。
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bakstrongSwan 設定ファイルを作成します。
vi /etc/strongswan/swanctl/swanctl.conf例となるシナリオで指定された IPsec パラメーターに基づき、以下の設定を追加して保存します。
connections { vco1 { # IPsec-VPN トンネル 1 の VPN 設定を追加します。 version = 2 # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。 local_addrs = 172.16.20.80 # eth0 インターフェースのプライベート IP アドレス。 remote_addrs = 47.XX.XX.151 # トンネル 1 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス(IPsec アドレス 1)です。 dpd_delay = 10 rekey_time = 84600 # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IKE 設定の SA 有効期間と同じ値である必要があります。 over_time = 1800 proposals = aes-sha1-modp1024 # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の設定と同じ値である必要があります。group2 は modp1024 に対応します。 encap = yes local { auth = psk # ローカル側の認証方式として PSK を指定します。 id = 120.XX.XX.202 # eth0 のパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じ値である必要があります。 } remote { auth = psk # ピア側の認証方式として PSK を指定します。 id = 47.XX.XX.151 # Alibaba Cloud 側の IPsec アドレス 1。Alibaba Cloud 側のトンネル 1 の LocalId と同じ値である必要があります。 } children { vco_child1 { local_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 remote_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 mode = tunnel rekey_time = 85500 life_time = 86400 # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定の SA 有効期間と同じ値である必要があります。 dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。 if_id_out = 42 # トンネル 1 の XFRM 仮想ネットワークインターフェースを、トンネル 1 の送信および受信インターフェースとして指定します。 if_id_in = 42 } } } vco2 { # IPsec-VPN トンネル 2 の VPN 設定を追加します。 version = 2 # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 2 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。 local_addrs = 172.16.20.80 # eth0 インターフェースのプライベート IP アドレス。 remote_addrs = 47.XX.XX.87 # トンネル 2 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス(IPsec アドレス 2)です。 dpd_delay = 10 rekey_time = 84600 # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定の SA 有効期間と同じ値である必要があります。 over_time = 1800 # proposals = aes-sha1-modp1024 # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定と同じ値である必要があります。group2 は modp1024 に対応します。 encap = yes local { auth = psk # ローカル側の認証方式として PSK を指定します。 id = 120.XX.XX.202 # eth0 のパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 2 の RemoteId と同じ値である必要があります。 } remote { auth = psk # ピア側の認証方式として PSK を指定します。 id = 47.XX.XX.87 # Alibaba Cloud 側の IPsec アドレス 2。Alibaba Cloud 側のトンネル 2 の LocalId と同じ値である必要があります。 } children { vco_child2 { local_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 remote_ts = 0.0.0.0/0 # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。 mode = tunnel rekey_time = 85500 life_time = 86400 # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定の SA 有効期間と同じ値である必要があります。 dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。 if_id_out = 43 # トンネル 2 の XFRM 仮想ネットワークインターフェースを、トンネル 2 の送信および受信インターフェースとして指定します。 if_id_in = 43 } } } } secrets { ike-vco1 { id = 47.XX.XX.151 # Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス。 secret = ChangeMe*** # トンネル 1 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じ値である必要があります。 } ike-vco2 { id = 47.XX.XX.87 # Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス。 secret = ChangeMe*** # トンネル 2 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 2 の事前共有鍵と同じ値である必要があります。 } }
strongSwan プロセスを再起動し、strongSwan 設定を再読み込みした後、トンネルステータスを確認します。
sudo systemctl restart strongswan swanctl --load-all watch swanctl --list-sas出力には IPsec-VPN 接続が確立されていることが表示されますが、ルートが設定されていないため、ネットワーク通信はまだ有効になっていません。

BGP 動的ルーティングを設定します。
説明strongSwan デバイスを再起動した後は、再度 BGP 設定を追加する必要があります。
以下のコマンドを実行して BGP IP アドレスを設定します。
ip address add 169.254.10.2/30 dev ipsec0 ip address add 169.254.20.2/30 dev ipsec1FRRouting (FRR) ソフトウェアをインストールします。
yum install -y frrvi /etc/frr/daemonsコマンドを実行して設定ファイルを編集し、BGP 動的ルーティングを有効にします。iキーを押して挿入モードに入ります。bgpd パラメーターの値をyesに変更して BGP 動的ルーティングを有効にします。Escキーを押して挿入モードを終了し、:wqと入力して設定を保存します。FRR を実行します。
systemctl enable frr systemctl restart frrBGP 設定を追加します。
以下のコマンドを実行して設定インターフェースに入ります。
vtysh以下のコマンドを実行して設定モードに入ります。
config terminalBGP 設定を追加します。
コマンドを実行する際、以下の値を実際に使用する値に置き換えてください。
"169.254.10.1" および "169.254.20.1" を Alibaba Cloud 側のトンネルの BGP IP アドレスに置き換えます。
"65535" をお客様のシナリオにおける VPN ゲートウェイの BGP ASN に置き換えます。
"172.16.20.0/24" および "172.16.21.0/24" をデータセンターの CIDR ブロックに置き換えます。
route-map allow-all permit 1 exit router bgp 65530 bgp router-id 169.254.10.2 neighbor 169.254.10.1 remote-as 65535 neighbor 169.254.10.1 timers 10 30 neighbor 169.254.20.1 remote-as 65535 neighbor 169.254.20.1 timers 10 30 address-family ipv4 unicast network 172.16.20.0/24 network 172.16.21.0/24 neighbor 169.254.10.1 soft-reconfiguration inbound neighbor 169.254.10.1 route-map allow-all in neighbor 169.254.10.1 route-map allow-all out neighbor 169.254.20.1 soft-reconfiguration inbound neighbor 169.254.20.1 route-map allow-all in neighbor 169.254.20.1 route-map allow-all out maximum-paths 32 exit-address-family exit
exitコマンドを実行して設定モードを終了し、show ip bgpコマンドを実行して BGP ルートを表示します。strongSwan デバイスが VPC へのルートを学習しており、データセンターと VPC 間で通信できていることが確認できます。

静的ルートを使用したシングルエグレス
静的ルーティングを使用するシングル送信元シナリオでは、Alibaba Cloud がアクティブトンネルでリスクを検出した場合、トラフィックをスタンバイトンネルに切り替える可能性があります。これにより、トラフィックが中断する可能性があります。/proc/net/xfrm_stat ファイル内の XfrmInTmplMismatch パラメーターの値を監視することで、Alibaba Cloud がトラフィックをスタンバイトンネルに切り替えたかどうかを判断できます。このパラメーターの値が継続的に変化している場合、トラフィックが切り替えられたことを示します。その場合、/etc/strongswan/swanctl/swanctl.conf ファイル内のスタンバイトンネルの priority パラメーターの値を変更し、データセンターからクラウドへのトラフィックをスタンバイトンネル経由で優先するようにできます。
元の strongSwan 設定ファイルをバックアップします。
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bakstrongSwan 設定ファイルを作成します。
vi /etc/strongswan/swanctl/swanctl.conf「例となるシナリオ」セクションで指定された設定に基づき、以下の設定を追加して保存します。
connections { vco1 { # IPsec-VPN トンネル 1 の VPN 設定を追加します。 version = 2 # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。 local_addrs = 172.16.20.80 # eth0 インターフェースのプライベート IP アドレス。 remote_addrs = 47.XX.XX.151 # トンネル 1 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス(IPsec アドレス 1)です。 dpd_delay = 10 rekey_time = 84600 # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IKE 設定の SA 有効期間と同じ値である必要があります。 over_time = 1800 proposals = aes-sha1-modp1024 # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の設定と同じ値である必要があります。group2 は modp1024 に対応します。 encap = yes local { auth = psk # ローカル側の認証方式として PSK を指定します。 id = 120.XX.XX.202 # ローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じ値である必要があります。 } remote { auth = psk # ピア側の認証方式として PSK を指定します。 id = 47.XX.XX.151 # Alibaba Cloud 側の IPsec アドレス 1。Alibaba Cloud 側のトンネル 1 の LocalId と同じ値である必要があります。 } children { vco_child1 { local_ts = 172.16.0.0/16 # ローカル側の保護対象データフロー。データセンターのプライベート CIDR ブロック(172.16.0.0/16)を入力します。 remote_ts = 192.168.0.0/16 # Alibaba Cloud 側の保護対象データフロー。VPC CIDR ブロック(192.168.0.0/16)を入力します。 mode = tunnel rekey_time = 85500 life_time = 86400 # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定の SA 有効期間と同じ値である必要があります。 dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。 priority = 1 # トンネル 1 の優先度を指定します。これにより、アクティブトンネル経由でのトラフィック転送が優先されます。 } } } vco2 { # IPsec-VPN トンネル 2 の VPN 設定を追加します。 version = 2 # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 2 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。 local_addrs = 172.16.20.80 # eth0 インターフェースのプライベート IP アドレス。 remote_addrs = 47.XX.XX.87 # トンネル 2 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス(IPsec アドレス 2)です。 dpd_delay = 10 rekey_time = 84600 # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定の SA 有効期間と同じ値である必要があります。 over_time = 1800 proposals = aes-sha1-modp1024 # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定と同じ値である必要があります。group2 は modp1024 に対応します。 encap = yes local { auth = psk # ローカル側の認証方式として PSK を指定します。 id = 120.XX.XX.202 # ローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 2 の RemoteId と同じ値である必要があります。 } remote { auth = psk # ピア側の認証方式として PSK を指定します。 id = 47.XX.XX.87 # Alibaba Cloud 側の IPsec アドレス 2。Alibaba Cloud 側のトンネル 2 の LocalId と同じ値である必要があります。 } children { vco_child2 { local_ts = 172.16.0.0/16 # ローカル側の保護対象データフロー。データセンターのプライベート CIDR ブロック(172.16.0.0/16)を入力します。 remote_ts = 192.168.0.0/16 # Alibaba Cloud 側の保護対象データフロー。VPC CIDR ブロック(192.168.0.0/16)を入力します。 mode = tunnel rekey_time = 85500 life_time = 86400 # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定の SA 有効期間と同じ値である必要があります。 dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。 priority = 2 # トンネル 2 の優先度を指定します。これはトンネル 1 の優先度よりも低くなります。 } } } } secrets { ike-vco1 { id = 47.XX.XX.151 # Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス。 secret = ChangeMe*** # トンネル 1 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じ値である必要があります。 } ike-vco2 { id = 47.XX.XX.87 # Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス。 secret = ChangeMe*** # トンネル 2 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 2 の事前共有鍵と同じ値である必要があります。 } }strongSwan プロセスを再起動し、strongSwan 設定を再読み込みした後、トンネルステータスを確認します。
sudo systemctl restart strongswan swanctl --load-all watch swanctl --list-sas出力には IPsec-VPN 接続が確立されており、データセンターと VPC 間で通信できていることが表示されます。

5. 接続性および高可用性のテスト
データセンターと VPC 間の接続性をテストします。
データセンター内のクライアントから、Alibaba Cloud VPC 内の ECS インスタンスに対して
pingを実行します。応答パケットを受信できれば、接続が成功しています。ping <VPC 内の ECS インスタンスの IP アドレス>IPsec-VPN 接続の高可用性をテストします。
PING を実行している間に、IPsec-VPN 接続のアクティブトンネルを中断します。
アクティブトンネルの事前共有鍵を変更することで、アクティブトンネルを中断できます。トンネルの両端の事前共有鍵が一致しない場合、アクティブトンネルは中断されます。
アクティブトンネルを中断した後、
pingコマンドを使用して再度接続性を確認します。pingトラフィックが一時的に中断された後、通信が復旧すれば、トラフィックが自動的にスタンバイトンネルにフェイルオーバーしたことを確認できます。
よくある質問
トランジットルーター接続向けの strongSwan 設定
IPsec-VPN 接続がトランジットルーターに関連付けられている場合、strongSwan デバイスの設定は本トピックで説明したものと同じです。BGP 動的ルーティングを使用することを推奨します。設定が完了したら、strongSwan デバイス上で BGP 経由で学習した VPC ルートを確認できます。IPsec-VPN 接続の 2 つのトンネルは自動的に ECMP ルーティングを確立します。
IKEv1 のサポート
はい。
/etc/strongswan/swanctl/swanctl.conf ファイルを設定する際、version = 1 を指定してください。
保護対象データフローの指定
/etc/strongswan/swanctl/swanctl.conf ファイルを設定する際、以下の設定で CIDR ブロックを指定してください。また、Alibaba Cloud 側の IPsec-VPN 接続でも保護対象データフロー モードが設定されていることを確認してください。
データセンターまたは Alibaba Cloud VPC に対して複数の CIDR ブロックを指定する必要がある場合、strongSwan デバイスおよび IPsec-VPN 接続の両方が IKEv2 を使用する必要があります。
children {
vco_child1 {
local_ts = 192.168.20.0/24,192.168.50.0/24 # データセンターの CIDR ブロック。
remote_ts = 10.0.0.0/16 # Alibaba Cloud 側の VPC の CIDR ブロック。
}
}NIC にパブリック IP アドレスを持つ strongSwan の設定
strongSwan デバイスのネットワークインターフェースにパブリック IP アドレスが割り当てられている場合(NAT を使用しないシナリオ)、/etc/strongswan/swanctl/swanctl.conf ファイル内の各トンネルの local_addrs フィールドの値をパブリック IP アドレスに変更するだけで済みます。他の設定は変更不要です。
connections {
vco1 {
local_addrs = 1.1.XX.XX # strongSwan デバイスの NIC に割り当てられたパブリック IP アドレス。
}
}シングルトンネル設定
ご利用の VPN ゲートウェイがシングルトンネル IPsec-VPN 接続のみをサポートしている場合、「IPsec-VPN 接続をデュアルトンネルモードにスペックアップ」することを推奨します。デュアルトンネル IPsec-VPN 接続は、可用性ゾーン間のディザスタリカバリをサポートし、高可用性を向上させます。
