オープンソースの strongSwan ソフトウェアと Standard VPN Gateway を使用して、オンプレミスデータセンター (IDC) を Alibaba Cloud の Virtual Private Cloud (VPC) に接続します。
シナリオ
ある企業が、中国 (杭州) リージョンに VPC を作成しました。 この企業は、Standard VPN Gateway と strongSwan を使用して、クラウド上の VPC と IDC 間のネットワーク接続を確立したいと考えています。
このシナリオでは、IDC にはパブリック送信 IP が 1 つしかなく、Alibaba Cloud の VPN Gateway とデュアルトンネルの IPsec 接続を確立します。
リソース計画
クラウド:中国 (杭州) リージョンの CIDR ブロックが 10.0.0.0/16 の VPC
vSwitch 1:アベイラビリティゾーン I、CIDR ブロック 10.0.0.0/24
vSwitch 2:アベイラビリティゾーン J、CIDR ブロック 10.0.1.0/24
Elastic Compute Service (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
暗号化設定:クラウド側とオンプレミス側で一致させる必要があります。
IKE バージョン:v2
ネゴシエーションモード:main
暗号化アルゴリズム:AES128 / SHA1 / DH グループ 2。
SA のライフタイム:86400 秒。
ルーティング:宛先ベースルーティングを使用します。 宛先ベースルーティングは、「どのトラフィックが VPN トンネルを通過するか」を指定します。両端の CIDR ブロックを定義するだけで、それらのブロックに一致するトラフィックが「対象トラフィック」となります。 システムが自動的にそのトラフィックをトンネル経由でルーティングし、対応するルートを生成します。
このチュートリアルでは、静的ルーティングを使用する単一のパブリック送信 IP のシナリオのみを扱います。 複数のパブリック送信 IP または BGP 動的ルーティングのシナリオについては、「strongSwan の設定」をご参照ください。
前提条件
VPC の CIDR ブロックと IDC の CIDR ブロックは重複してはなりません。
リソース計画に従って VPC を作成し、2 つの異なるアベイラビリティゾーンにそれぞれ 1 つの vSwitch を配置します。 接続確認のために、VPC に少なくとも 1 つの ECS インスタンスをデプロイします。
IDC に、1 つのパブリック送信 IP を持つ Linux サーバーをデプロイします (このチュートリアルでは CentOS Stream 9 を使用します)。 このサーバーに strongSwan をインストールし、オンプレミスゲートウェイとして使用します。
ステップ 1:Standard VPN Gateway の作成
VPN Gateway のコンソールページに移動し、VPN Gateway の作成 をクリックして、次のパラメーターを設定します。
[インスタンス名]:
vpn-gw-docdevのような、わかりやすいインスタンス名を入力します。リージョンとアベイラビリティゾーン:VPC があるリージョンを選択します。 このチュートリアルでは、中国 (杭州) を使用します。
[ゲートウェイタイプ]: 標準型 を選択します。
[ネットワークタイプ]: パブリック を選択します。
VPC:接続する VPC を選択します。
[vSwitch 1]:アベイラビリティゾーン I の vSwitch を選択します。
[vSwitch 2]: アベイラビリティゾーン J の vSwitch を選択します。クロスゾーン高可用性を確保するために、vSwitch 1 とは異なるアベイラビリティゾーンにある必要があります。利用可能な vSwitch がない場合は、まず作成します。
ピーク帯域幅:ビジネス要件に基づいて帯域幅を選択します。このチュートリアルでは、デフォルト値を使用します。
IPsec-VPN: [有効にする ]。
SSL-VPN: [無効化]。
購入期間:デフォルト値を使用します。
[サービスにリンクされたロールの作成]:サービスリンクロールが作成されていることを確認します。 VPN Gateway は、このロールを使用して他のクラウド製品のリソースにアクセスします。
今すぐ購入 をクリックし、支払いを完了します。VPN ゲートウェイインスタンスの初期化には、約 1~5 分かかります。システムは、アクティブトンネルとスタンバイトンネル用に 2 つのパブリック IP アドレスを VPN ゲートウェイに割り当てます。
ステップ 2:カスタマーゲートウェイの作成
カスタマーゲートウェイは、オンプレミスゲートウェイデバイスのパブリック IP アドレスを Alibaba Cloud に記録します。 このシナリオでは、IDC には 1 つのパブリック送信 IP しかないため、作成する必要があるカスタマーゲートウェイは 1 つだけです。
VPN ゲートウェイコンソールの左側のナビゲーションペインで、カスタマーゲートウェイ をクリックします。
以下のパラメーターを設定します。カスタマーゲートウェイの作成
[名前]: カスタマーゲートウェイの名前を入力します。例:
cgw-idc-docdev。[IP アドレス]:IDC のパブリック送信 IP (XX.XX.3.3) を入力します。
ステップ 3:IPsec 接続の作成
VPN ゲートウェイコンソールの左側のナビゲーションペインで、IPsec 接続 をクリックします。[VPN ゲートウェイと関連付け]
IPsec 接続の基本パラメーターを設定します。
[IPsec 接続名]:
ipsec-docdevのように、わかりやすいリソース名を入力します。[リージョン]: 中国 (杭州) を選択します。
[VPN ゲートウェイの選択]:ステップ 1 で作成した VPN Gateway を選択します。
[ルーティングモード]: 宛先ルーティングモード を選択します。 このモードでは、両端の CIDR ブロックを定義すると、システムが一致するトラフィックをトンネル経由で自動的にルーティングし、対応するルートを生成します。
[ローカルネットワーク]:VPC CIDR ブロック
10.0.0.0/16を入力します。[リモートネットワーク]:IDC の CIDR ブロック
172.16.0.0/16を入力します。[今すぐ有効化]: はい を選択します。Alibaba Cloud 側が対向側とのネゴシエーションを開始するため、対向側の設定が完了した後、接続をすばやく確立できます。
[BGP の有効化]:このチュートリアルでは有効にしません。
トンネルパラメーターを設定します。
[トンネル 1 (プライマリ)]:
[カスタマーゲートウェイ]:ステップ 2 で作成したカスタマーゲートウェイを選択します。
[事前共有鍵]:IPsec トンネルのネゴシエーション中に ID 認証に使用される事前共有キーです。 ローカル側とピア側の事前共有キーは同一である必要があります。同一でない場合、トンネルを確立できません。 大文字、小文字、数字、特殊文字を含む強力なパスワードを使用してください。
[暗号化設定]: デフォルト設定のままにします。このチュートリアルでは、デフォルトの暗号化アルゴリズム (AES128) 、認証アルゴリズム (SHA1) 、および DH グループ (group2) を使用します。アルゴリズムを手動で指定するには、暗号化設定 を展開して変更します。
重要設定を変更する必要がある場合は、クラウド側とオンプレミス側で、IKE バージョン、ネゴシエーションモード、SA のライフタイムのパラメーターが一致していることを確認してください。
[トンネル 2 (バックアップ)]:
[カスタマーゲートウェイ]:アクティブトンネルと同じカスタマーゲートウェイを選択します (このシナリオの IDC にはパブリック送信 IP が 1 つしかないため)。
[事前共有鍵]:このチュートリアルでは、アクティブトンネルと同じキーを使用します。
[暗号化設定]:アクティブトンネルと同じ設定を維持します。 デフォルト値を使用します。
OK をクリックすると、ルートを公開するかどうかを確認するプロンプトが表示されます。 ここでは キャンセル をクリックします。
IPsec 接続リソースを初期化するには約 5 分かかります (ステータス: 準備中)。この間、ルートの設定はできません。先にステップ 4 に進んで strongSwan を設定することができます。ルート設定はステップ 5 で行います。
クラウド側の 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-bit オペレーティングシステムを例に strongSwan を設定します。 他のオペレーティングシステムについては、「strongSwan の公式ドキュメント」をご参照ください。
1. ファイアウォールルールの設定
strongSwan デバイスで、ESP プロトコル (IP プロトコル番号 50)、UDP ポート 500、および UDP ポート 4500 を許可し、クラウド側の 2 つの IPsec アドレスからのアクセスを許可します。
以下は 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 Standard 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 NIC のプライベート IP。 NAT 環境では、プライベート IP を使用します。 NIC がパブリック 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 NIC のプライベート IP。 トンネル 1 の local_addrs と同じです。 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 の local_ts と同じです。 remote_ts = 10.0.0.0/16 # (変更) Alibaba Cloud のトラフィックセレクターの CIDR ブロック。 トンネル 1 の remote_ts と同じです。 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. strongSwan の起動とトンネルステータスの確認
sudo systemctl restart strongswan
swanctl --load-all
watch swanctl --list-sas両方のトンネルが ESTABLISHED と表示され、CHILD_SA が INSTALLED 状態であれば、strongSwan デバイスと Alibaba Cloud VPN Gateway 間の IPsec-VPN 接続は正常に確立されています。
ステップ 5:クラウドルートの公開
このチュートリアルでは宛先ベースルーティングを使用しているため、システムが VPN Gateway の[ポリシーベースルーティング]にルートエントリを自動的に生成します。
このルートをワンクリックで 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 トラフィックが許可されていることを確認し、次に、ECS インスタンスにログインして strongSwan デバイスに ping を実行します。
ping 172.16.0.1応答パケットを受信した場合、逆方向の接続も正常です。
高可用性の確認
ECS インスタンスからオンプレミスサーバーへの長時間の ping を開始します。
ping 172.16.0.1 -c 10000アクティブトンネルを中断します:Alibaba Cloud コンソールで、アクティブトンネルの事前共有キーを変更して不一致を発生させます。
ping の結果を観察します:短い中断の後、トラフィックが再開されます。これは、トラフィックが自動的にスタンバイルンネルに切り替わったことを示します。
アクティブトンネルを復元します:事前共有キーを正しい値に戻します。 トンネルが回復すると、トラフィックはフェイルバックします。
トラブルシューティング
一般的な問題と解決策:
現象 | 考えられる原因 | 解決策 |
コンソールに「Negotiation Failed」と表示される | ネットワーク接続の問題 | strongSwan デバイスが Alibaba Cloud の IPsec アドレスに ping できるか確認します。 IDC のファイアウォールが UDP ポート 500 およびポート 4500 を許可しているか確認します。 |
事前共有キーの不一致 | 両端の事前共有キーが、大文字と小文字、特殊文字を含めて同一であるか確認します。 | |
IKE パラメーターの不一致 | IKE バージョン、暗号化アルゴリズム、認証アルゴリズム、および DH グループが両端で一致しているか確認します。 Standard 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 内の他のサーバーに、strongSwan デバイスをネクストホップとする VPC の CIDR ブロックへのルートがあるか確認します。 |