VPN Gateway を使用して、VPC とデータセンター間にデュアルトンネルの IPsec-VPN 接続を設定できます。これにより、単一のトンネルに障害が発生した場合のサービス中断を防ぎ、接続の高可用性を確保します。
仕組み
ある企業が、Alibaba Cloud のシンガポールリージョンにプライマリ CIDR ブロックが 192.168.0.0/16 の Virtual Private Cloud (VPC) を作成し、シンガポールに CIDR ブロックが 172.16.0.0/16 のオンプレミスデータセンターをデプロイしたとします。ビジネスの成長に伴い、オンプレミスデータセンターから VPC 内のリソースにアクセスする必要が生じました。この企業は VPN Gateway を使用して、VPC とオンプレミスデータセンター間にデュアルトンネルモードで IPsec-VPN 接続を確立できます。
デュアルトンネルモードには、アクティブトンネルとスタンバイントンネルが含まれます。システムはアクティブトンネルの接続性を自動的に検出します。アクティブトンネルが切断された場合、VPN Gateway はトラフィックをスタンバイントンネルに自動的に切り替えます。アクティブトンネルが回復すると、トラフィックは自動的に元に戻ります。
VPN Gateway が作成されると、アクティブトンネルとスタンバイントンネルを確立するために 2 つのパブリック IP アドレスが割り当てられます。各トンネルは独立して IKE ネゴシエーション、鍵交換、データ転送を実行します。
本トピックでは、オンプレミスゲートウェイデバイスに strongSwan ソフトウェアをデプロイする例を説明します。詳細については、「その他のオンプレミスゲートウェイデバイスの設定例」をご参照ください。
適用範囲
オンプレミスゲートウェイデバイス:
ゲートウェイデバイスにはパブリック IP アドレスが必要です。2 つのパブリック IP アドレスを設定するか、データセンターにそれぞれ 1 つのパブリック IP アドレスを持つ 2 つのゲートウェイデバイスをデプロイすることを推奨します。
ゲートウェイデバイスは IKEv1 または IKEv2 プロトコルをサポートしている必要があります。
VPC:IPsec-VPN 接続のデュアルトンネルモードは、以下のリージョンとゾーンでサポートされています。
データセンターの CIDR ブロックが VPC の CIDR ブロックと重複しないこと。
操作手順
ステップ 1: VPN ゲートウェイの作成
またはVPN Gateway 管理コンソールに移動します。
[インスタンス名]、[リソースグループ]:これらのパラメーターを組み合わせてクラウドリソースを識別できます。
[リージョン]:VPC があるリージョンを選択します。このトピックでは、[シンガポール] を使用します。
[ゲートウェイタイプ]:[標準] を選択します。
[ネットワークタイプ]:[パブリック] を選択します。
[トンネル]: [デュアルトンネル] を選択します。
[Virtual Private Cloud (VPC)]:ローカルデータセンターに接続する予定の VPC を選択します。
vSwitch 1、vSwitch 2:VPC の異なるゾーンから 2 つの vSwitch を選択します。
[ピーク帯域幅]:デフォルト値を使用します。
[トラフィック]:[データ転送量による支払い] を選択します。
有効化 IPsec-VPN、および 無効化 SSL-VPN。
[サブスクリプション期間]:デフォルト値を使用します。
[サービスリンクロール]:サービスリンクロール AliyunServiceRoleForVpn が作成されていることを確認します。VPN Gateway はこのロールを使用して、他のクラウドプロダクトのリソースにアクセスします。

VPN Gateway ページに戻ります。VPN ゲートウェイインスタンスの初期ステータスは 準備中 です。約 1〜5 分後、ステータスが 正常 に変わり、システムはアクティブトンネルとスタンバイントンネル用に 2 つのパブリック IP アドレスを VPN Gateway に割り当てます。この例では、割り当てられたパブリック IP アドレスは
120.XX.XX.152 (IPsec アドレス 1 - アクティブトンネル)と120.XX.XX.0 (IPsec アドレス 2 - スタンバイントンネル)です。
ステップ 2: カスタマーゲートウェイの作成
[VPN] - [カスタマーゲートウェイ] に移動し、カスタマーゲートウェイの作成 をクリックします。
2 つの暗号化トンネルを確立するために、2 つのカスタマーゲートウェイを作成します。
|
|
ステップ 3: IPsec 接続の作成
[VPN] - [IPsec-VPN 接続の作成] ページに移動し、設定を完了してから [OK] をクリックします。
IPsec 設定
[リージョン]:VPC があるリージョンを選択します。このトピックでは、[シンガポール] を使用します。
[VPN Gateway のアタッチ]:ステップ 1 で作成した VPN Gateway を選択します。
[ルーティングモード]:[宛先ベースのルート] を選択して、宛先 IP アドレスに基づいてトラフィックをルーティングおよび転送します。
[すぐに有効]:[はい] を選択します。設定完了後、すぐにネゴシエーションが開始されます。

トンネル設定
[BGP を有効にする]:この例では、この機能は有効にしません。
[トンネル]: アクティブ/スタンバイのトンネルを設定します。
[トンネル 1] はプライマリトンネルです。
[カスタマーゲートウェイ]:ステップ 2 で作成したカスタマーゲートウェイ
CGW1を選択します。[事前共有鍵]:トンネルの事前共有鍵は、ピアゲートウェイデバイスのものと同じである必要があります。そうでない場合、IPsec-VPN 接続は確立できません。
[暗号化設定]:オンプレミスゲートウェイデバイスのサポートに基づいて暗号化設定を選択します。IPsec 接続の暗号化設定がオンプレミスゲートウェイデバイスのものと同じであることを確認してください。
[トンネル 2]:スタンバイントンネル。
[カスタマーゲートウェイ]:ステップ 2 で作成したカスタマーゲートウェイ
CGW2を選択します。[事前共有鍵]:アクティブトンネルと同じ設定を使用します。トンネルの事前共有鍵は、ピアゲートウェイデバイスのものと同じである必要があります。そうでない場合、IPsec-VPN 接続は確立できません。
[暗号化設定]:オンプレミスゲートウェイデバイスのサポートに基づいて暗号化設定を選択します。IPsec 接続の暗号化設定がオンプレミスゲートウェイデバイスのものと同じであることを確認してください。


[作成済み] ダイアログボックスで、[キャンセル] をクリックします。作成した IPsec 接続を見つけ、操作 列の [ピア設定の生成] をクリックします。[コピー] をクリックし、設定をオンプレミスデバイスに保存します。この設定は、オンプレミスゲートウェイデバイスを設定するために必要になります。
ステップ 4: オンプレミスゲートウェイデバイスの設定
このトピックでは、strongSwan ソフトウェアを実行するオンプレミスゲートウェイデバイス (strongSwan デバイス) を例として使用します。
その他のオンプレミスゲートウェイデバイスの設定例。
以下の内容は、参照のみを目的としたサードパーティ製品の情報を含んでいます。Alibaba Cloud は、サードパーティ製品のパフォーマンスと信頼性、またはこれらの製品を使用して実行される操作の潜在的な影響に関して、明示または黙示を問わず、いかなる保証も行いません。
以下の手順では、CentOS Stream 9 64 ビットオペレーティングシステム を実行する strongSwan デバイスを例として使用します。他のオペレーティングシステムについては、strongSwan の公式ドキュメントをご参照ください。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 ACCEPTecho 1 > /proc/sys/net/ipv4/ip_forwardを実行して、トラフィック転送を有効にします。dnf install epel-release -yとdnf install strongswan -yを実行して、strongSwan ソフトウェアをインストールします。デュアルトンネルを設定します:
デュアルエグレスは XFRM 仮想ネットワークインターフェイスに基づいて実装されます。XFRM 仮想ネットワークインターフェイスを使用するには、strongSwan 5.8.0 以降をインストールする必要があります。さらに、Linux カーネルのバージョンは 4.19 以降、iproute2 のバージョンは 5.1.0 以降である必要があり、カーネルは xfrm モジュールをサポートしている必要があります。
lsmod | grep xfrmコマンドが空の結果を返す場合、モジュールはサポートされていません。詳細については、「XFRM Interfaces on Linux」をご参照ください。2 つの Alibaba Cloud IPsec アドレスを指すルートを追加します。これにより、IPsec アドレス 1 は eth0 エグレス経由で、IPsec アドレス 2 は eth1 エグレス経由でアクセスできるようになります。IPsec アドレスに ping できることを確認します。
ip route add 120.XX.XX.152 via 172.16.1.253 dev eth0 #172.16.1.253 は eth0 のプライベートゲートウェイアドレスです ip route add 120.XX.XX.0 via 172.16.2.253 dev eth1 #172.16.2.253 は eth1 のプライベートゲートウェイアドレスですアクティブおよびスタンバイの 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 eth1 if_id 43 # トンネル 2 用の XFRM 仮想ネットワークインターフェイスを作成します。インターフェイス ID は 43 で、基盤となるインターフェイスはパブリックインターフェイス eth1 です。 ip link set ipsec0 up # トンネル 1 用の XFRM 仮想ネットワークインターフェイスを起動します。 ip link set ipsec1 up # トンネル 2 用の XFRM 仮想ネットワークインターフェイスを起動します。strongSwan 設定ファイルを変更します。
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bakを実行して、元の設定ファイルをバックアップします。vi /etc/strongswan/swanctl/swanctl.confを実行します。ファイルに次の設定を追加して保存します。IPsec-VPN 接続設定に基づいてパラメーターを変更します。connections { vco1 { # IPsec-VPN トンネル 1 の VPN 設定を追加 version = 2 # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じである必要があります。2 は IKEv2 を示します。 local_addrs = 172.16.0.93 # 最初のオンプレミスネットワークインターフェイスカードの IP アドレス。 remote_addrs = 120.XX.XX.152 # トンネル 1 のピア IP アドレスを指定します。これは Alibaba Cloud 側のトンネル 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 の IKE 設定と同じである必要があります。group2 は modp1024 に対応します。 encap = yes local { auth = psk # ローカル認証方式は PSK で、事前共有鍵を使用します。 id = 47.XX.XX.198 # 最初のオンプレミスパブリックエグレス IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じである必要があります。 } remote { auth = psk # リモート認証方式は PSK で、Alibaba Cloud が事前共有鍵を使用することを意味します。 id = 120.XX.XX.152 # Alibaba Cloud 側の IPsec アドレス 1。Alibaba Cloud 側のトンネル 1 の LocalId と同じである必要があります。 } children { vco_child1 { local_ts = 0.0.0.0/0 remote_ts = 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 のアウトバウンドおよびインバウンドインターフェイスをトンネル 1 の XFRM 仮想ネットワークインターフェイスとして指定します。 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.2.57 # 2 番目のオンプレミスネットワークインターフェイスカードの IP アドレス。 remote_addrs = 120.XX.XX.0 # トンネル 2 のピア IP アドレスを指定します。これは Alibaba Cloud 側のトンネル 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.181 # 2 番目のオンプレミスパブリックエグレス IP アドレス。Alibaba Cloud 側のトンネル 2 の RemoteId と同じである必要があります。 } remote { auth = psk # リモート認証方式は PSK で、Alibaba Cloud が事前共有鍵を使用することを意味します。 id = 120.XX.XX.0 # Alibaba Cloud 側の IPsec アドレス 2。Alibaba Cloud 側のトンネル 2 の LocalId と同じである必要があります。 } children { vco_child2 { local_ts = 0.0.0.0/0 remote_ts = 0.0.0.0/0 mode = tunnel rekey_time = 85500 life_time = 86400 # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の 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 のアウトバウンドおよびインバウンドインターフェイスをトンネル 2 の XFRM 仮想ネットワークインターフェイスとして指定します。 if_id_in = 43 updown = /root/connect_2.sh # トンネル 2 の UP および DOWN ステータスに基づいて /root/connect_2.sh スクリプトを実行し、ルートを設定します。 } } } } # ここでのキー設定は ID を指定せず、すべてのトンネルで共有されます。ID を指定しない場合は、2 つのキーが同一であることを確認してください。そうでない場合、ネゴシエーションが失敗する可能性があります。 secrets { ike-vco1 { secret = <トンネル 1 の事前共有鍵を指定> # Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じである必要があります。 } ike-vco2 { secret = <トンネル 2 の事前共有鍵を指定> # Alibaba Cloud 側のトンネル 2 の事前共有鍵と同じである必要があります。 } }
strongSwan プロセスを再起動し、strongSwan 設定を再読み込みして、トンネルのステータスを確認します。
sudo systemctl restart strongswan swanctl --load-all watch swanctl --list-sas次の図に示すように、strongSwan デバイスと VPN ゲートウェイの間に IPsec-VPN 接続が確立されます。

ルートを設定します:
vi /root/connect_1.shを実行し、次の設定を追加して保存します。# トンネル 1 が UP の場合、データセンターから Alibaba Cloud VPC (192.168.0.0/16) へのトラフィックを ipsec0 XFRM 仮想ネットワークインターフェイス経由で転送するルートを追加します。 # このルートのメトリック値を 100 に設定して、ipsec1 XFRM 仮想ネットワークインターフェイスへのルートよりも高い優先度を与えます。 # トンネル 1 が DOWN の場合、このルートを削除します。 #!/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 fivi /root/connect_2.shを実行し、次の設定を追加して保存します。# トンネル 2 が UP の場合、データセンターから Alibaba Cloud VPC (192.168.0.0/16) へのトラフィックを ipsec1 XFRM 仮想ネットワークインターフェイス経由で転送するルートを追加します。 # このルートのメトリック値を 101 に設定して、ipsec0 XFRM 仮想ネットワークインターフェイスへのルートよりも低い優先度を与えます。 # トンネル 2 が DOWN の場合、このルートを削除します。 #!/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 fisudo chmod +x /root/connect_1.shとsudo chmod +x /root/connect_2.shを実行して、実行権限を付与します。sudo systemctl restart strongswanを実行して、strongSwan プロセスを再起動します。route -nを実行して、ルートが設定されていることを確認します。
VPC に接続する必要があるデータセンター内のサーバーで、宛先 CIDR ブロックとして VPC の CIDR ブロック、ネクストホップとして strongSwan デバイスを持つルートを設定します。
次のコマンドを実行して rp_filter を無効にし、非対称ルーティングによる接続性の問題を防止します。
sudo sysctl -w net.ipv4.conf.all.rp_filter=0 sudo sysctl -w net.ipv4.conf.eth0.rp_filter=0 sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0
ステップ 5: VPN Gateway ルートの設定
[VPN] - [VPN Gateway] ページに移動し、ステップ 1 で作成した VPN ゲートウェイの ID をクリックします。
宛先ベースルーティング タブをクリックし、[ルートエントリの追加] をクリックします。
|
|
検証テスト
データセンターと VPC 間の接続性をテストします。これを行うには、VPC 内の Elastic Compute Service (ECS) インスタンスにログインし、
ping <データセンター内のサーバーのプライベート IP アドレス>コマンドを実行します。データセンター内のサーバーから応答メッセージを受信した場合、接続は確立されています。IPsec-VPN 接続の高可用性をテストします。
VPC 内の ECS インスタンスにログインします。
ping <データセンター内のサーバーのプライベート IP アドレス> -c 10000コマンドを実行して、データセンターに継続的に ping リクエストを送信します。IPsec-VPN 接続のアクティブトンネルを切断します。これは、アクティブトンネルの事前共有鍵を変更することで実行できます。トンネルの両端の事前共有鍵が一致しなくなるため、トンネルは切断されます。
アクティブトンネルが切断された後、VPC 内の ECS インスタンスの通信ステータスを確認します。トラフィックが一時的に中断された後、再開された場合、トラフィックが自動的にスタンバイントンネルに切り替わったことを示します。



