オープンソースの strongSwan ソフトウェアを使用して、Alibaba Cloud の従来の VPN Gateway との IPsec 接続を迅速に確立できます。これにより、クラウドとオンプレミスのリソース間でプライベートネットワークピアリングが可能になります。
シナリオ
ある企業が中国 (杭州) リージョンに VPC を作成し、従来の VPN Gateway と strongSwan を使用してオンプレミスデータセンター (IDC) に接続する必要があるとします。
このシナリオでは、IDC はパブリック IP アドレスを 1 つだけ持ち、Alibaba Cloud VPN Gateway とデュアルトンネルの IPsec 接続を確立します:
リソース計画
クラウドリソース:VPC の CIDR ブロックは中国 (杭州) リージョンの 10.0.0.0/16 です
vSwitch 1:ゾーン I、CIDR ブロック 10.0.0.0/24
vSwitch 2:ゾーン J、CIDR ブロック 10.0.1.0/24
ECS インスタンス:vSwitch 1 にデプロイ、IP アドレス 10.0.0.1
VPN Gateway:作成後、システムは 2 つのパブリック IP アドレスを割り当てます:
IPsec アドレス 1 (アクティブトンネル用):XX.XX.1.1
IPsec アドレス 2 (スタンバイトンネル用):XX.XX.2.2
オンプレミスリソース:IDC の CIDR ブロックは 172.16.0.0/16 です
strongSwan デバイス:プライベート IP アドレス 172.16.0.1
パブリックアウトバウンド IP:XX.XX.3.3
暗号化アルゴリズム:コンソールのデフォルト (AES128、SHA1、DH グループ 2) を使用します。暗号化アルゴリズム、認証アルゴリズム、DH グループは両側で一致させる必要があります。
ルーティングモード:静的ルートと保護されたデータフローモードを使用します。このモードでは、両端の CIDR ブロックを指定することで、VPN トンネルを通過するトラフィックを定義します。これらのブロック間のトラフィックが保護されたデータフローになります。システムはこのトラフィックを自動的にトンネル経由でルーティングし、対応するルートを作成します。
このトピックでは、単一のパブリック IP と静的ルートのシナリオのみを扱います。デュアルパブリック IP または BGP 動的ルーティングのシナリオについては、「strongSwan の設定例」をご参照ください。
前提条件
VPC の CIDR ブロックは、オンプレミス IDC の CIDR ブロックと重複してはなりません。
計画通りに VPC を作成し、2 つの異なるゾーンにそれぞれ 1 つの vSwitch をデプロイ済みであること。接続性テストのために、VPC 内で少なくとも 1 つの ECS インスタンスが実行中であること。
オンプレミス IDC に Linux サーバー (この例では CentOS Stream 9) をデプロイ済みであること。サーバーには 1 つのパブリックアウトバウンド IP アドレスがあります。このサーバーに strongSwan をインストールして、オンプレミスゲートウェイとして機能させます。
ステップ 1:従来の VPN Gateway の作成
コンソールで VPN Gateway ページを開き、VPN Gateway の作成 をクリックします。次の主要なパラメーターを設定します。
インスタンス名: 意味のある名前(例:
vpn-gw-docdev)を入力します。リージョンとゾーン:VPC があるリージョンを選択します。この例では、中国 (杭州) を選択します。
ゲートウェイタイプ: Standard を選択します。
ネットワークタイプ: パブリック を選択します。
VPC:接続するターゲット VPC を選択します。
vSwitch 1: ゾーン I の vSwitch を選択します。
vSwitch 2: ゾーン J の vSwitch を選択します。この vSwitch は、vSwitch 1 とは異なるゾーンに配置する必要があります(クロスゾーン高可用性を確保するため)。vSwitch が利用できない場合は、まず作成してください。
帯域幅: ビジネス要件に基づいて帯域幅を選択します。この例では、デフォルト値を使用します。
IPsec-VPN: 有効にする を選択します。
SSL-VPN: 無効化。
課金サイクル: デフォルト値を使用します。
サービスにリンクされたロールの作成: サービスリンクロールが作成されていることを確認してください。VPN ゲートウェイは、このロールを使用して他のクラウドリソースにアクセスします。
「今すぐ購入」をクリックして、支払いを完了します。VPN ゲートウェイの初期化には約 1~5 分かかります。システムは、VPN ゲートウェイに 2 つのパブリック IP アドレスを割り当てます—one つはアクティブなトンネル用、もう 1 つはスタンバイ トンネル用です。
ステップ 2:カスタマーゲートウェイの作成
カスタマーゲートウェイは、Alibaba Cloud にご利用のオンプレミスゲートウェイデバイスのパブリック IP アドレスを記録します。このシナリオでは、IDC にはパブリックアウトバウンド IP が 1 つしかないため、カスタマーゲートウェイを 1 つだけ作成します。
VPN Gateway コンソールの左側にあるナビゲーションウィンドウで、カスタマーゲートウェイ をクリックします。
「カスタマーゲートウェイの作成」をクリックし、以下を設定します。
名前: カスタマーゲートウェイの名前を入力します (例:
cgw-idc-docdev)。IP アドレス: オンプレミス IDC のパブリック egress IP アドレス (XX.XX.3.3) を入力します。
ステップ 3:IPsec 接続の作成
VPN Gateway コンソールの左側にあるナビゲーションウィンドウで、IPsec 接続 をクリックします。次に、VPN ゲートウェイと関連付け をクリックします。
IPsec 接続の基本パラメーターを設定します:
IPsec 接続名:
ipsec-docdevのような意味のある名前を入力します。リージョン: 中国 (杭州) を選択します。
VPN ゲートウェイの選択: 手順 1 で作成した VPN ゲートウェイを選択します。
ルーティングモード:宛先ルーティングモード を選択します。このモードでは、両端の CIDR ブロックを定義します。システムにより、一致するトラフィックがトンネル経由で自動的にルーティングされ、対応するルートが作成されます。
ローカルネットワーク: VPC CIDR ブロック
10.0.0.0/16を入力します。リモートネットワーク: IDC CIDR ブロック
172.16.0.0/16を入力します。今すぐ有効化: はい を選択します。Alibaba Cloud がピア側とネゴシエーションを開始します。ピア側の設定を完了すると、接続がすばやく確立されます。
BGP の有効化:この例では、BGP を有効化しないでください。
トンネルパラメーターを設定します:
Tunnel 1:
カスタマーゲートウェイ: ステップ 2 で作成したカスタマーゲートウェイを選択します。
事前共有鍵: IPsec トンネルのネゴシエーション中に身分認証に使用される共有鍵です。両方の側で同じ事前共有鍵を使用する必要があります。そうしないと、トンネルを確立できません。大文字、小文字、数字、および特殊文字を含む強力なパスワードを使用してください。
暗号化設定: デフォルト値をそのまま使用します。この例では、デフォルトの暗号化アルゴリズム (AES128)、認証アルゴリズム (SHA1)、および DH グループ (group2) を使用しています。
Tunnel 2:
カスタマーゲートウェイ: トンネル 1 と同じカスタマーゲートウェイを選択します(このシナリオでは、IDC にはパブリック出口 IP が 1 つしかありません)。
事前共有鍵: Tunnel 1 と同じキーを使用します。
暗号化設定: トンネル 1 と一致させます。デフォルト値を保持します。
[OK] をクリックすると、システムがルートを公開するようプロンプトを表示します。まず、[キャンセル] をクリックします。
IPsec 接続の初期化には約 5 分かかります (ステータスは 準備中 と表示されます)。この時点ではまだルートを構成できません。strongSwan デバイスを構成するには、ステップ 4 に進んでください。ルートの構成はステップ 5 で完了します。
Alibaba Cloud 上の 2 つのトンネルのパブリック IP アドレスを記録します。これらは後で strongSwan を設定する際に必要になります:
IPsec-VPN 接続 一覧ページに戻り、先ほど作成した IPsec 接続を特定します。
ゲートウェイ IP アドレス 列で、IPsec アドレス 1 および IPsec アドレス 2 を記録します。この例では、それらは XX.XX.1.1 および XX.XX.2.2 です。
ステップ 4:strongSwan デバイスの設定
このセクションのサードパーティ製品に関する情報は参考用です。Alibaba Cloud は、サードパーティ製品に関連する操作のパフォーマンス、信頼性、または潜在的な影響に関して、いかなる保証も約束も行いません。
このセクションでは、CentOS Stream 9 64 ビット を例として strongSwan を設定します。他のオペレーティングシステムについては、strongSwan 公式ドキュメントをご参照ください。
1. ファイアウォールポリシーの許可
strongSwan デバイスで、クラウド上の 2 つの IPsec アドレスからのアクセスを許可するために、ESP プロトコル (IP プロトコル番号 50)、UDP ポート 500、および UDP ポート 4500 を許可します。
例えば、iptables を使用している場合は、実際のファイアウォールツールに基づいてコマンドを調整してください:
iptables -I INPUT -s XX.XX.1.1,XX.XX.2.2 -p esp -j ACCEPT
iptables -I INPUT -s XX.XX.1.1,XX.XX.2.2 -p udp --dport 500 -j ACCEPT
iptables -I INPUT -s XX.XX.1.1,XX.XX.2.2 -p udp --dport 4500 -j ACCEPT2. IP フォワーディングの有効化
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sudo sysctl -p3. strongSwan のインストール
dnf install epel-release -y
dnf install strongswan -y4. strongSwan の設定
元の設定ファイルをバックアップします:
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak新しい設定ファイルを作成します:
vi /etc/strongswan/swanctl/swanctl.conf以下の設定を追加して保存します。サンプル IP アドレスと事前共有鍵を実際の値に置き換えてください:
# Alibaba Cloud 従来の VPN Gateway + オンプレミスの単一パブリックアウトバウンド IP + 保護されたデータフロー向けの strongSwan デュアルトンネル IPsec-VPN 設定 # # 「必要に応じて変更」とマークされたパラメーターのみ変更が必要です。その他はデフォルトのままでかまいません。 # アルゴリズム注記:aes128-sha1-modp1024 = AES-128 / SHA-1 / DH グループ 2 (コンソールのデフォルト) # アクティブ/スタンバイロジック:vco1 (priority=1) はアクティブトンネル、vco2 (priority=2) はスタンバイトンネルです。アクティブトンネルに障害が発生すると、自動的にフェイルオーバーします。 connections { # === トンネル 1 (アクティブ) === vco1 { version = 2 dpd_delay = 10 rekey_time = 84600 over_time = 1800 proposals = aes128-sha1-modp1024 encap = yes local_addrs = 172.16.0.1 # strongSwan デバイスのネットワークインターフェース IP (必要に応じて変更:NAT 環境ではプライベート IP を使用し、インターフェースがパブリックアウトバウンド IP に直接バインドされている場合はパブリック IP を使用します) local { auth = psk id = XX.XX.3.3 # オンプレミスのパブリックアウトバウンド IP (必要に応じて変更) } remote_addrs = XX.XX.1.1 # Alibaba Cloud トンネル 1 のパブリック IP (必要に応じて変更) remote { auth = psk id = XX.XX.1.1 # Alibaba Cloud トンネル 1 のパブリック IP、上記の remote_addrs と一致させる必要があります (必要に応じて変更) } children { vco_child1 { local_ts = 172.16.0.0/16 # オンプレミスの保護されたデータフローの CIDR ブロック (必要に応じて変更) remote_ts = 10.0.0.0/16 # Alibaba Cloud の保護されたデータフローの CIDR ブロック (必要に応じて変更) mode = tunnel rekey_time = 85500 life_time = 86400 dpd_action = restart start_action = start close_action = start esp_proposals = aes128-sha1-modp1024 priority = 1 # アクティブトンネルとして設定。変更しないでください。 } } } # === トンネル 2 (スタンバイ) === vco2 { version = 2 dpd_delay = 10 rekey_time = 84600 over_time = 1800 proposals = aes128-sha1-modp1024 encap = yes local_addrs = 172.16.0.1 # strongSwan デバイスのネットワークインターフェース IP、トンネル 1 と同じ (必要に応じて変更) local { auth = psk id = XX.XX.3.3 # オンプレミスのパブリックアウトバウンド IP、トンネル 1 と同じ (必要に応じて変更) } remote_addrs = XX.XX.2.2 # Alibaba Cloud トンネル 2 のパブリック IP (必要に応じて変更) remote { auth = psk id = XX.XX.2.2 # Alibaba Cloud トンネル 2 のパブリック IP、上記の remote_addrs と一致させる必要があります (必要に応じて変更) } children { vco_child2 { local_ts = 172.16.0.0/16 # オンプレミスの保護されたデータフローの CIDR ブロック、トンネル 1 と同じ (必要に応じて変更) remote_ts = 10.0.0.0/16 # Alibaba Cloud の保護されたデータフローの CIDR ブロック、トンネル 1 と同じ (必要に応じて変更) mode = tunnel rekey_time = 85500 life_time = 86400 dpd_action = restart start_action = start close_action = start esp_proposals = aes128-sha1-modp1024 priority = 2 # スタンバイトンネルとして設定。変更しないでください。 } } } } secrets { ike-vco1 { id = XX.XX.1.1 # Alibaba Cloud トンネル 1 のパブリック IP (必要に応じて変更) secret = your-psk-here # トンネル 1 の事前共有鍵、Alibaba Cloud と一致させる必要があります (必要に応じて変更) } ike-vco2 { id = XX.XX.2.2 # Alibaba Cloud トンネル 2 のパブリック IP (必要に応じて変更) secret = your-psk-here # トンネル 2 の事前共有鍵、Alibaba Cloud と一致させる必要があります (必要に応じて変更) } }
5. トンネルステータスの起動と確認
sudo systemctl restart strongswan
swanctl --load-all
watch swanctl --list-sas両方のトンネルが ESTABLISHED と表示され、CHILD_SA が INSTALLED と表示されれば、strongSwan デバイスと Alibaba Cloud VPN Gateway 間の IPsec 接続は正常に確立されています。
ステップ 5:クラウド側のルーティング設定
この例では保護されたデータフロー モードを使用しているため、システムが VPN ゲートウェイの ポリシーベースルーティング に自動的にルートエントリを作成します。
このルートをワンクリックで VPC ルートテーブルに公開できます。これにより、VPC 内の ECS インスタンスから IDC の CIDR ブロックへのトラフィックが VPN Gateway を経由してルーティングされます:
VPN Gateway のリストページに戻ります。ステップ 1 で作成した VPN Gateway のインスタンス ID をクリックして、詳細ページを開きます。
ポリシーベースルーティング タブをクリックします。IPsec 接続が保護されたデータフローモードを使用すると、システムによって自動的に生成された宛先ルートエントリを確認できます (宛先 CIDR ブロックが 172.16.0.0/16、ネクストホップが IPsec 接続)。
送信先ルートエントリの 操作 列で、公開 をクリックして、ルートを VPC ルートテーブルに公開します。
公開後、VPC ルートテーブルには、宛先 CIDR ブロックが 172.16.0.0/16 で、ネクストホップが VPN Gateway に設定された新しいルートが追加されます。VPC 内の ECS インスタンスから IDC の CIDR ブロックへのトラフィックは、自動的に VPN トンネルを通過します。
検証とテスト
接続性の検証
まず、ECS セキュリティグループのルールが ICMP トラフィックを許可していることを確認します。次に、strongSwan デバイスにログインし、次のコマンドを実行してクラウド上の ECS インスタンスに PING を送信します:
ping 10.0.0.1応答パケットを受信した場合、クラウド VPC とオンプレミス IDC は正常に接続されています。
まず、ローカルのファイアウォールが ICMP トラフィックを許可していることを確認します。次に、VPC 内の ECS インスタンス (10.0.0.1) にログインし、strongSwan デバイスのプライベート IP アドレスに PING を送信します:
ping 172.16.0.1応答パケットを受信した場合、逆方向の接続も機能しています。
高可用性の検証
ECS インスタンスから IDC サーバーへ継続的に PING を送信し続けます:
ping 172.16.0.1 -c 10000アクティブトンネルを中断させる:Alibaba Cloud コンソールで、アクティブトンネルの事前共有鍵を変更します (これにより、両側の鍵が異なります)。アクティブトンネルが切断されます。
PING の結果を観察します:トラフィックが一時的に停止し、その後再開します。これにより、スタンバイトンネルへの自動フェイルオーバーが確認できます。
アクティブトンネルを復元する:アクティブトンネルの事前共有鍵を正しい値に戻します。アクティブトンネルが回復すると、トラフィックは自動的に元に戻ります。
トラブルシューティング
一般的な問題と解決策:
症状 | 考えられる原因 | 解決策 |
コンソールでトンネルのネゴシエーション失敗が表示される | ネットワーク到達不能 | strongSwan デバイスが Alibaba Cloud の IPsec アドレスに PING できるか確認します。ローカル IDC のファイアウォールが UDP ポート 500 と 4500 を許可していることを確認します。 |
事前共有鍵の不一致 | 両側の事前共有鍵が完全に一致していること (大文字/小文字、特殊文字を含む) を確認します。 | |
IKE パラメーターの不一致 | IKE バージョン、暗号化アルゴリズム、認証アルゴリズム、DH グループが両側で一致していることを確認します。従来の VPN Gateway は複数のアルゴリズムの互換性をサポートしていません。パラメーターは完全に一致させる必要があります。 | |
トンネルは確立されているが PING が失敗する | ルート設定の欠落 | VPN Gateway の宛先ルートが VPC ルートテーブルに公開されているか確認します。 |
セキュリティグループの制限 | ECS セキュリティグループが IDC の CIDR ブロック (172.16.0.0/16) からの ICMP トラフィックを許可しているか確認します。 | |
ローカルファイアウォールの制限 | IDC のファイアウォールが VPC の CIDR ブロック (10.0.0.0/16) からのトラフィックを許可しているか確認します。 | |
strongSwan 側のルート欠落 | strongSwan デバイスで IP フォワーディングが有効になっていることを確認します。また、IDC 内の他のサーバーに VPC の CIDR ブロックへのルート (ネクストホップとして strongSwan デバイスを指定) があることを確認します。 |