Alibaba cloudでデータセンターと仮想プライベートクラウド (VPC) 間にIPsec-VPN接続を確立する場合、Alibaba CloudでVPNゲートウェイを設定した後、データセンターのゲートウェイデバイスにVPN設定を追加する必要があります。 このトピックでは、strongSwanを使用してデータセンターのゲートウェイデバイスにVPN設定を追加する方法について説明します。
シナリオ
この例では、企業がAlibaba CloudにVPCをデプロイしています。 VPCのCIDRブロックは10.0.0.0/16です。 アプリケーションは、VPCのECS (Elastic Compute Service) インスタンスにデプロイされます。 同社には、VPCと通信するためにCIDRブロック192.168.0.0/16を使用する必要があるデータセンターがあります。 同社は、相互リソースアクセスを実装するために、データセンターとクラウド上のVPC間にIPsec-VPN接続を確立したいと考えています。
このサンプルシナリオでは、strongSwanがデプロイされるローカルゲートウェイデバイスをstrongSwanデバイスと呼びます。 データセンターは、strongSwanデバイスのパブリックIPアドレスを使用して、デュアルトンネルモードでAlibaba CloudとのIPsec-VPN接続を確立します。 VPNゲートウェイがシングルトンネルモードのIPsec-VPN接続のみをサポートしている場合は、このトピックの「単一トンネルを使用するようにstrongSwanデバイスを構成する」をご参照ください。
VPNゲートウェイをアップグレードしてデュアルトンネルモードを有効にすることを推奨します。 IPsec-デュアルトンネルモードのVPN接続は、ゾーン間のディザスタリカバリをサポートします。 これは、ネットワークの高可用性を効果的に高める。 詳細については、「VPN gatewayのアップグレードによるデュアルトンネルモードの有効化」をご参照ください。
CIDRブロックプランとサンプルVPN設定
CIDRブロックプラン
リソース | CIDRブロック | IPアドレス |
データセンター | VPCとの通信に必要なCIDRブロック: 192.168.0.0/16。 | サーバーのIPアドレス: 192.168.10.198。 |
strongSwanデバイス | 非該当 |
|
VPC | プライマリCIDRブロック: 10.0.0.0/16 vSwitch 1: 10.0.10.0/24 vSwitch 2: 10.0.20.0/24 | ECS IPアドレス: 10.0.10.250 |
パブリックVPNゲートウェイ | 非該当 |
説明 VPNゲートウェイを作成すると、システムはVPNゲートウェイにIPアドレスを自動的に割り当てます。 |
サンプルVPN設定
この例では、トンネル1はアクティブトンネルであり、トンネル2はスタンバイトンネルである。 2つのトンネルは同じサンプル値を使用する。
Alibaba CloudとstrongSwanデバイスのVPN設定は、各トンネルで同じである必要があります。
パラメーター | Alibaba Cloudのサンプル値 | strongSwanデバイスのサンプル値 | |
事前共有キー (PSK) | 123456 **** | 123456 **** | |
インターネットキー交換 (IKE) 設定 | IKE バージョン | ikev2 | ikev2 |
ネゴシエーションモード | メイン | メイン | |
暗号化アルゴリズム | aes | aes | |
認証アルゴリズム | sha1 | sha1 | |
DH グループ | group2 | group2 | |
SAライフサイクル (秒) | 86400 | 86400 | |
IPsec設定 | 暗号化アルゴリズム | aes | aes |
認証アルゴリズム | sha1 | sha1 | |
DH グループ | group2 | group2 | |
SAライフサイクル (秒) | 86400 | 86400 |
前提条件
このトピックでは、strongSwanデバイスにVPN設定を追加する方法についてのみ説明します。 Alibaba CloudでVPNゲートウェイを設定する手順は省略します。 strongSwanデバイスを設定する前に、VPNゲートウェイの作成、カスタマーゲートウェイの作成、IPsec-VPN接続の作成、およびVPNゲートウェイのルーティングの設定を完了していることを確認してください。 詳細については、「デュアルトンネルモードでVPCをデータセンターに接続する」をご参照ください。
このシナリオでは、データセンターのstrongSwanデバイスは、パブリックIPアドレスを使用してAlibaba CloudへのIPsec-VPN接続をデュアルトンネルモードで確立します。 したがって、カスタマーゲートウェイを1つだけ作成する必要があります。 IPsec-VPN接続を作成すると、2つのトンネルを同じカスタマーゲートウェイに関連付けることができます。
手順
次の例では、CentOS Stream 9 64ビットを使用して、strongSwanデバイスを設定する方法を示します。 別のオペレーティングシステムを使用している場合は、strongSwan Installation Documentationを参照してください。
strongSwanデバイスのCLIを開きます。
次のコマンドを実行してstrongSwanをインストールします。
sudo yum install -y strongswan-5.9.10
strongSwanデバイスのトラフィック転送を有効にします。
echo 1 > /proc/sys/net/ipv4/ip_forward
重要上記のコマンドはroot権限を必要とし、一時的なコマンドです。 strongSwanデバイスを再起動した後、コマンドを再度実行する必要があります。 強力なSwanデバイスのトラフィック転送を有効にする場合は、次の手順を実行します。
IPsec-VPNトンネルを確立するための2つの仮想ネットワークインターフェイスを作成します。
sudo ip link add ipsec0 type xfrm dev eth0 if_id 42 # Create an XFRM virtual network interface for Tunnel 1, with the interface ID 42 and the public interface eth0 as the underlying interface. sudo ip link add ipsec1 type xfrm dev eth0 if_id 43 # Create an XFRM virtual network interface for Tunnel 2, with the interface ID 43 and the public interface eth0 as the underlying interface. sudo ip link set ipsec0 up # Start the XFRM virtual network interface for Tunnel 1. sudo ip link set ipsec1 up # Start the XFRM virtual network interface for Tunnel 2.
重要XFRM仮想ネットワークインターフェイスを使用するには、strongSwan 5.8.0以降をインストールする必要があります。 また、Linuxのカーネルバージョンは4.19以降、Linuxのiproute2バージョンは5.1.0以降である必要があります。 詳細については、「Linux上のXFRMインターフェイス」をご参照ください。
仮想ネットワークインターフェイスを作成するための上記の設定は、一時的な設定です。 strongSwanデバイスを再起動した後、設定を再度追加し、
sudo systemctl restart strongswan;swanctl -- load-all
コマンドを実行する必要があります。 コマンドにはroot権限が必要です。 strongSwanデバイスの再起動後に仮想ネットワークインターフェイスを自動的に作成するように、システムの起動時に実行されるスクリプトを構成する場合は、次の手順を実行します。
strongSwan設定ファイルを変更します。
次のコマンドを実行してstrongSwan設定ファイルを開きます。
sudo vi /etc/strongswan/swanctl/swanctl.conf
I
キーを押して編集モードに入ります。ファイル内の元の設定をすべて削除し、次のサンプルコードを参照してファイルにVPN設定を追加します。
重要サンプルコードのIPアドレスを実際に使用するIPアドレスに置き換え、Alibaba CloudのVPN設定とstrongSwanデバイスのVPN設定が同じであることを確認します。
connections { vco1 { # The VPN configurations of IPsec-VPN Tunnel 1. version = 2 # The IKE version, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. A value of 2 indicates IKEv2. local_addrs = 8.XX.XX.99 # The public IP address for which you want to create an IPsec-VPN connection. remote_addrs = 8.XX.XX.149 # Set the remote address of Tunnel 1 to the VPN gateway address of Tunnel 1 on Alibaba Cloud, which is IPsec Address 1. dpd_delay = 10 rekey_time = 84600 # The SA lifecycle of Tunnel 1, which must be the same as that specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. over_time = 1800 proposals = aes-sha1-modp1024 # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. encap = yes local { auth = psk # Set the authentication algorithm of the data center to PSK. id = 8.XX.XX.99 # The ID of the data center, which must be the same as the RemoteId value of Tunnel 1 on Alibaba Cloud. } remote { auth = psk # Set the authentication algorithm of the VPC to PSK. id = 8.XX.XX.149 # The ID of the VPC, which must be the same as the LocalId value of Tunnel 1 on Alibaba Cloud. } children { vco_child1 { local_ts = 0.0.0.0/0 # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. remote_ts = 0.0.0.0/0 # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. mode = tunnel rekey_time = 85500 life_time = 86400 # The SA lifecycle of Tunnel 1, which must be the same as that specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. if_id_out = 42 # Specify that the XFRM virtual network interface of Tunnel 1 is used as the egress port and ingress port of Tunnel 1. if_id_in = 42 updown = /root/connect_1.sh # Execute the /root/connect_1.sh script to configure routing based on the UP/DOWN status of Tunnel 1. } } } vco2 { # The VPN configurations of IPsec-VPN Tunnel 2. version = 2 # The IKE version, which must be the same as that configured for Tunnel 2 on Alibaba Cloud. A value of 2 indicates IKEv2. local_addrs = 8.XX.XX.99 # The public IP address for which you want to create an IPsec-VPN connection. remote_addrs = 8.XX.XX.137 # Set the remote address of Tunnel 2 to the VPN gateway address of Tunnel 2 on Alibaba Cloud, which is IPsec address 2. dpd_delay = 10 rekey_time = 84600 # The SA lifecycle of Tunnel 2, which must be the same as that specified in the IKE configurations of Tunnel 2 on Alibaba Cloud. over_time = 1800 # proposals = aes-sha1-modp1024 # The encryption algorithm, authentication algorithm, and DH group of Tunnel 2, which must be the same as those specified in the IKE configurations of Tunnel 2 on Alibaba Cloud. A value of group2 indicates modp1024. encap = yes local { auth = psk # Set the authentication algorithm of the data center to PSK. id = 8.XX.XX.99 # The ID of the data center, which must be the same as the RemoteId value of Tunnel 2 on Alibaba Cloud. } remote { auth = psk # Set the authentication algorithm of the VPC to PSK. id = 8.XX.XX.137 # The ID of the VPC, which must be the same as the LocalId value of Tunnel 2 on Alibaba Cloud. } children { vco_child2 { local_ts = 0.0.0.0/0 # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. remote_ts = 0.0.0.0/0 # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. mode = tunnel rekey_time = 85500 life_time = 86400 # The SA lifecycle of Tunnel 2, which must be the same as that specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. dpd_action = restart start_action = start close_action = start esp_proposals = aes-sha1-modp1024 # The encryption algorithm, authentication algorithm, and DH group of Tunnel 2, which must be the same as those specified in the IPsec configurations of Tunnel 2 on Alibaba Cloud. A value of group2 indicates modp1024. if_id_out = 43 # Specify that the XFRM virtual network interface of Tunnel 2 is used as the egress port and ingress port of Tunnel 2. if_id_in = 43 updown = /root/connect_2.sh # Execute the /root/connect_2.sh script to configure routing based on the UP/DOWN status of Tunnel 2. } } } } secrets { ike-vco1 { secret = 123456**** # The PSK of Tunnel 1, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. } ike-vco2 { secret = 123456**** # The PSK of Tunnel 2, which must be the same as that configured for Tunnel 2 on Alibaba Cloud. } }
Esc
キーを押して:wq
と入力し、enterキーを押して変更を保存します。
次の手順を参照して、データセンターからCIDRブロックが10.0.0.0/16のVPCへのトラフィックを制御するようにルーティングを設定するスクリプトを作成します。
次のコマンドを実行して /root/connect_1.shファイルを開きます。
sudo vi /root/connect_1.sh
I
キーを押して編集モードに入ります。スクリプトに次の設定を追加します。
Tunnel 1のステータスがUPの場合、Tunnel 1のXFRM仮想ネットワークインターフェイスを介して、データセンターからCIDRブロックが10.0.0.0/16であるVPCにトラフィックを送信するルートを追加します。 さらに、このルートのメトリック値を100に設定して、このルートに、トンネル2のXFRM仮想ネットワークインターフェイスを指すルートよりも高い優先度を割り当てます。 トンネル1のステータスがDOWNの場合、ルートを撤回します。
#!/usr/bin/env bash if [ x"$PLUTO_VERB" == "xup-client" ]; then echo "ip route add 10.0.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route add 10.0.0.0/16 dev ipsec0 metric 100 elif [ x"$PLUTO_VERB" == "xdown-client" ]; then echo "ip route del 10.0.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route del 10.0.0.0/16 dev ipsec0 metric 100 fi
Esc
キーを押して:wq
と入力し、enterキーを押して変更を保存します。上記の手順を繰り返して、/root/connect_2.shファイルを変更します。
Tunnel 2のステータスがUPの場合、Tunnel 2のXFRM仮想ネットワークインターフェイスを介して、データセンターからCIDRブロックが10.0.0.0/16であるVPCにトラフィックを送信するルートを追加します。 さらに、このルートのメトリック値を101に設定して、このルートに、トンネル1のXFRM仮想ネットワークインターフェイスを指すルートよりも低い優先度を割り当てます。 トンネル2のステータスがDOWNの場合、ルートを撤回します。
#!/usr/bin/env bash if [ x"$PLUTO_VERB" == "xup-client" ]; then echo "ip route add 10.0.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route add 10.0.0.0/16 dev ipsec1 metric 101 elif [ x"$PLUTO_VERB" == "xdown-client" ]; then echo "ip route del 10.0.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route del 10.0.0.0/16 dev ipsec1 metric 101 fi
次のコマンドを実行して、/root/connect_1.shおよび /root/connect_2.shファイルを実行可能にします。
sudo chmod +x /root/connect_1.sh sudo chmod +x /root/connect_2.sh
strongSwanプロセスを再起動します。
sudo systemctl restart strongswan
アクセス制御またはファイアウォールポリシーがstrongSwanデバイスで設定されている場合、ポリシーがUDPポート500および4500を介してAlibaba Cloud側のトンネルのIPアドレスからのアクセスを許可していることを確認します。 次のコマンドを実行して、UDPポート500および4500からのアクセスを許可します。
# Allow access through the specified ports. sudo firewall-cmd --zone=public --add-port=500/udp --permanent sudo firewall-cmd --zone=public --add-port=4500/udp --permanent sudo systemctl restart firewalld.service sudo firewall-cmd --reload # View the ports that are already open. sudo firewall-cmd --list-ports
トンネルのステータスとルートを表示します。
通常、上記の手順を実行すると、strongSwanデバイスとVPNゲートウェイの間にIPsec-VPN接続が確立されます。 次のコマンドを実行して、IPsec-VPN接続のトンネルステータスとルートを表示できます。
sudo swanctl --list-sas # View the tunnel status. route -n # View the routing configurations.
データセンター側で、データセンターからstrongSwanデバイスへのルート、およびstrongSwanデバイスからデータセンターへのルートを設定します。
その後、データセンターとAlibaba Cloud VPC間のネットワーク接続をテストできます。 詳細については、「デュアルトンネルモードでVPCをデータセンターに接続する」の「ステップ6: ネットワーク接続のテスト」セクションをご参照ください。
単一のトンネルを使用するようにstrongSwanデバイスを設定する
よくある質問
BGP動的ルーティングは、strongSwanを使用して作成されたIPsec-VPN接続でサポートされていますか?
いいえ。
IKEv1はstrongSwanを使用して作成されたIPsec-VPN接続でサポートされていますか?
はい。
IKEv1を使用するには、/etc/strongswan/swanctl/swanctl.confファイルの設定時にversion = 1
を指定します。
strongSwanを使用してIPsec-VPN接続を確立するときに、保護されたデータフローを指定する方法?
保護されたデータフローを指定するには、/etc/strongswan/swanctl/swanctl.confファイルを設定するときに、次のコードブロックの説明に従ってCIDRブロックを追加します。 保護されたデータフローがAlibaba Cloud側のIPsec-VPN接続に指定されていることを確認します。
データセンター側またはAlibaba Cloud側で複数のCIDRブロックを指定する必要がある場合、Alibaba Cloud側のstrongSwanデバイスとIPsec-VPN接続はIKEv2を使用する必要があります。
children {
vco_child1 {
local_ts = 192.168.20.0/24,192.168.50.0/24 # The CIDR block of the data center.
remote_ts = 10.0.0.0/16 # The CIDR block of the VPC.
}
パブリックIPアドレスが割り当てられていないstrongSwanデバイスとVPNゲートウェイの間にIPsec-VPN接続を確立できますか?
はい。
strongSwanデバイスは、パブリックIPアドレスを使用せずにインターネットにアクセスできます。 たとえば、データセンターのstrongSwanデバイスがデータセンターの統合された出力を使用してインターネットにアクセスする場合、strongSwanデバイスのプライベートIPアドレスを使用してIPsec-VPN接続を確立できます。 strongSwanデバイスのプライベートIPアドレスを使用してIPsec-VPN接続を確立するには、次のコードブロックに基づいて /etc/strongswan/swanctl/swanctl.confファイルを設定します。
connections {
vco1 {
local_addrs = 192.168.1.1 # The private IP address of the strongSwan device.
local {
id = 8.XX.XX.99 # The public IP address of the strongSwan device.
}
}
}
}