このチュートリアルでは、オープンソースの strongSwan ソフトウェアを使用して、トランジットルーターへの IPsec 接続を迅速に確立する方法を説明します。この設定により、ご利用のオンプレミス IDC が Alibaba Cloud 上の Virtual Private Cloud (VPC) に接続されます。
シナリオ
ある企業が中国 (杭州) リージョンに VPC を所有しており、IPsec 接続を使用してオンプレミス IDC を VPC に接続する必要があります。このシナリオでは、IPsec 接続を VPN ゲートウェイに直接アタッチするのではなく、トランジットルーターにアタッチします。Cloud Enterprise Network (CEN) のトランジットルーターを使用してネットワークを一元管理することで、より多くの VPC の接続や将来のクロスリージョン接続など、柔軟なスケーリングが可能になります。
このシナリオでは、オンプレミス IDC は単一のパブリック IP アドレスを持ち、Alibaba Cloud とデュアルトンネルの IPsec 接続を確立します。
リソース計画
クラウド:中国 (杭州) リージョンに CIDR ブロックが 10.0.0.0/16 の Virtual Private Cloud (VPC)。
vSwitch 1:アベイラビリティゾーン H にあり、CIDR ブロックは 10.0.0.0/24。
vSwitch 2:アベイラビリティゾーン J にあり、CIDR ブロックは 10.0.2.0/24。
ECS インスタンス:接続性テストのために、IP アドレス 10.0.0.1 を持つ vSwitch にデプロイ。
CEN インスタンス:トランジットルーターをホストするために使用。
トランジットルーター:中国 (杭州) リージョンに作成され、TR の CIDR ブロックは 10.10.10.0/24。この CIDR ブロックは、VPC またはオンプレミス IDC の CIDR ブロックと重複してはいけません。
オンプレミス:CIDR ブロックが 172.16.0.0/16 のオンプレミス IDC。
strongSwan デバイス:プライベート IP アドレス 172.16.0.1。
パブリック IP アドレス:XX.XX.3.3。
暗号化アルゴリズム:IKEv2 / AES-128-CBC / SHA-1 / DH グループ 2。暗号化パラメーターは、トンネルの両端で同一である必要があります。
ルーティング方法:宛先ベースルーティング。トランジットルーターのルートテーブルに静的ルートを追加し、オンプレミス IDC 宛てのトラフィックを IPsec 接続に転送します。
前提条件
VPC とオンプレミス IDC の CIDR ブロックが重複していないこと。
VPC が作成されており、異なるアベイラビリティゾーンに 2 つの vSwitch があること。接続性をテストするために、VPC 内に少なくとも 1 つの Elastic Compute Service (ECS) インスタンスが存在すること。
Cloud Enterprise Network (CEN) インスタンスとトランジットルーター (TR) が作成されており、以下の条件が満たされていること:
TR にCIDR ブロックが設定されていること。
ご利用のオンプレミス IDC に Linux サーバーがデプロイされていること。このチュートリアルでは、CentOS Stream 9 を例として使用します。サーバーにはパブリック IP アドレスが必要です。このサーバーに strongSwan をインストールし、オンプレミスゲートウェイデバイスとして機能させます。
ステップ 1:カスタマーゲートウェイの作成
カスタマーゲートウェイは、ご利用のオンプレミスゲートウェイデバイスのパブリック IP アドレスを Alibaba Cloud に保存します。このシナリオのオンプレミス IDC は単一のパブリック IP アドレスを持つため、作成する必要があるカスタマーゲートウェイは 1 つだけです。
VPN ゲートウェイページに移動します。左側のナビゲーションウィンドウで、カスタマーゲートウェイ をクリックします。
上部のナビゲーションバーで、[中国 (杭州)] リージョンを選択します。
カスタマーゲートウェイの作成 をクリックし、以下のパラメーターを設定します。
名前:カスタマーゲートウェイの名前を入力します。例:
cgw-idc。IP アドレス:ご利用のオンプレミス IDC のパブリック IP アドレス (XX.XX.3.3) を入力します。
ステップ 2:IPsec 接続の作成
VPN ゲートウェイコンソールの左側のナビゲーションウィンドウで、IPsec 接続 をクリックします。
CEN と関連付け をクリックし、以下のパラメーターを設定します:
IPsec 接続名:
ipsec-demoなど、リソースの名前を入力します。リージョン:中国 (杭州) を選択します。
ゲートウェイタイプ: パブリック を選択します。
CEN と関連付け:アカウント内 を選択します。
リソースの関連付け: トランジットルーター を選択します。
CEN インスタンス ID:前提条件で作成した CEN インスタンスを選択します。
ルーティングモード:宛先ルーティングモード を選択します。後でトランジットルーターのルートテーブルに静的ルートを追加して、トラフィック転送を制御します。
今すぐ有効化:はい、設定が完了すると即座にネゴシエーションする を選択します。Alibaba Cloud がネゴシエーションを開始します。
上級設定 (ルートテーブルの自動関連付けとルート転送設定などの設定を含む):すべてのオプションを選択します:ルートの自動公開、転送ルーターに自動的に関連付けるデフォルトのルートテーブル、システムルートを転送ルーターに自動的に伝播するデフォルトのルートテーブル。
トンネルパラメーターを設定します:
Tunnel 1:
カスタマーゲートウェイ:ステップ 1 で作成したカスタマーゲートウェイを選択します。
事前共有鍵:トンネルの両端での相互認証に使用されるパスワードです。強力なパスワードを使用してください。キーは、クラウド側とオンプレミス側の設定で同一である必要があります。
Tunnel 2:
カスタマーゲートウェイ:トンネル 1 と同じカスタマーゲートウェイを選択します。このシナリオでは、Internet Data Center (IDC) には 1 つのパブリック出口しかありません。
事前共有鍵:トンネル 1 と同じキーを使用します。
他の暗号化パラメーターはデフォルト値のままにします。アルゴリズムを手動で指定するには、暗号化設定 を展開して必要な変更を行います。
OK をクリックします。ルートを公開するように求められたら、現時点では キャンセル をクリックします。
IPsec 接続の初期化には約 5 分かかります。ステータスが 準備中 の間は、ルートを設定できません。クラウド側のパブリック IP アドレスを記録し、ステップ 3 でルートを設定できます。
2 つのクラウド側トンネルのパブリック IP アドレスを記録します。これらは strongSwan を設定するために必要です。
IPsec 接続 リストに戻り、作成したばかりの IPsec 接続を見つけます。ゲートウェイ IP アドレス 列で、IPsec アドレス 1 : と IPsec アドレス 2 : を記録します。このチュートリアルでは、例として XX.XX.1.1 と XX.XX.2.2 を使用します。
ステップ 3:TR への静的ルートの追加
宛先ベースルーティングを使用しているため、トランジットルーターのルートテーブルにオンプレミス IDC の CIDR ブロックへのルートを手動で追加する必要があります。
Cloud Enterprise Network コンソールに移動し、CEN インスタンスの ID をクリックします。
トランジットルーター タブで、中国 (杭州) リージョンのトランジットルーターを見つけ、その ID をクリックして詳細ページに移動します。
ルートテーブル タブに移動します。デフォルトでシステムルートテーブルが表示されます。
システムルートテーブルの ルートエントリ タブで、ルートエントリの追加 をクリックします。
宛先 CIDR:オンプレミス IDC の CIDR ブロック
172.16.0.0/16を入力します。ブラックホールルート:いいえ を選択します。
ネクストホップ:VPN 接続のネットワークインスタンス接続を選択します。この接続は、IPsec 接続がトランジットルーターにバインドされた後に自動的に作成されます。
OK をクリックします。
ルートが追加されると、ルートテーブルに宛先 CIDR ブロックが 172.16.0.0/16 で、ネクストホップが IPsec 接続に設定された静的ルートが表示されます。
このルートエントリは、トランジットルーターからオンプレミス IDC 宛てのトラフィックを IPsec トンネルに転送します。VPC 側のルートは、トランジットルーターのルート伝播機能を通じて自動的に設定されるため、手動での設定は不要です。
ステップ 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 のインストール
sudo dnf install epel-release -y
sudo dnf install strongswan -y4. XFRM インターフェイスと updown スクリプトの作成
デュアルトンネルのシナリオでは、トンネル間のトラフィックを区別する必要があります。カーネルのルーティングポリシーの競合を避けるために、XFRM 仮想インターフェイスを作成します。
# トンネル 1 とトンネル 2 用にそれぞれ XFRM インターフェイスを作成
sudo ip link add xfrm1 type xfrm dev eth0 if_id 1
sudo ip link add xfrm2 type xfrm dev eth0 if_id 2
sudo ip link set xfrm1 up
sudo ip link set xfrm2 up
# クラウドの CIDR ブロックへのトラフィックを両方のトンネルで負荷分散するための ECMP ルートを追加
sudo ip route add 10.0.0.0/16 nexthop dev xfrm1 weight 1 nexthop dev xfrm2 weight 1updown スクリプトを作成して、トンネルが切断されたときに、対応する XFRM インターフェイスを自動的に停止させます。これにより、Linux カーネルはトラフィックをアクティブなトンネルにリダイレクトできます。
sudo tee /usr/local/bin/xfrm-updown.sh > /dev/null << 'EOF'
#!/bin/bash
XFRM_IF="xfrm${PLUTO_IF_ID_IN}"
case "${PLUTO_VERB}" in
up-client)
ip link set "${XFRM_IF}" up 2>/dev/null
;;
down-client)
ip link set "${XFRM_IF}" down 2>/dev/null
;;
esac
EOF
sudo chmod +x /usr/local/bin/xfrm-updown.sh再起動後も XFRM インターフェイスとルートを永続化させるには、コマンドを起動スクリプトに追加してください。
5. strongSwan の設定
元の設定ファイルをバックアップします:
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak新しい設定ファイルを作成します:
vi /etc/strongswan/swanctl/swanctl.conf以下の設定を追加して保存します。IP アドレスとキーの例を実際の値に置き換えてください。
# strongSwan デュアルトンネル IPsec-VPN 設定 # Alibaba Cloud トランジットルーターにアタッチされた IPsec 接続用 # 単一のオンプレミス パブリック IP を使用し、宛先ベースルーティングを利用。 # # 「(変更)」とマークされたパラメーターのみ変更してください。他のパラメーターはデフォルト値のままにしてください。 # この設定では、XFRM インターフェイス (if_id) を使用してトンネルトラフィックを区別し、ECMP で負荷分散を行います。 connections { # === トンネル 1 === tunnel1 { version = 2 dpd_delay = 10s rekey_time = 86400s proposals = aes128-sha1-modp1024 local_addrs = 172.16.0.1 # (変更) strongSwan サーバーの NIC のプライベート IP。NAT 環境では、プライベート 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 # (変更) 上記の remote_addrs と同じパブリック IP。 } children { tunnel1-child { local_ts = 0.0.0.0/0 remote_ts = 0.0.0.0/0 mode = tunnel esp_proposals = aes128-sha1-modp1024 dpd_action = restart start_action = start close_action = start updown = /usr/local/bin/xfrm-updown.sh if_id_in = 1 # xfrm1 インターフェイスに対応します。 if_id_out = 1 } } if_id_in = 1 if_id_out = 1 } # === トンネル 2 === tunnel2 { version = 2 dpd_delay = 10s rekey_time = 86400s proposals = aes128-sha1-modp1024 local_addrs = 172.16.0.1 # (変更) トンネル 1 と同じプライベート IP。 local { auth = psk id = XX.XX.3.3 # (変更) トンネル 1 と同じオンプレミスのパブリック IP。 } remote_addrs = XX.XX.2.2 # (変更) Alibaba Cloud 上のトンネル 2 のパブリック IP アドレス。 remote { auth = psk id = XX.XX.2.2 # (変更) 上記の remote_addrs と同じパブリック IP。 } children { tunnel2-child { local_ts = 0.0.0.0/0 remote_ts = 0.0.0.0/0 mode = tunnel esp_proposals = aes128-sha1-modp1024 dpd_action = restart start_action = start close_action = start updown = /usr/local/bin/xfrm-updown.sh if_id_in = 2 # xfrm2 インターフェイスに対応します。 if_id_out = 2 } } if_id_in = 2 if_id_out = 2 } } secrets { ike-tunnel1 { id-1 = XX.XX.3.3 # (変更) オンプレミスのパブリック IP アドレス。 id-2 = XX.XX.1.1 # (変更) Alibaba Cloud 上のトンネル 1 のパブリック IP アドレス。 secret = "your-psk-here" # (変更) トンネル 1 の事前共有鍵。Alibaba Cloud 上のキーと一致する必要があります。 } ike-tunnel2 { id-1 = XX.XX.3.3 # (変更) オンプレミスのパブリック IP アドレス。 id-2 = XX.XX.2.2 # (変更) Alibaba Cloud 上のトンネル 2 のパブリック IP アドレス。 secret = "your-psk-here" # (変更) トンネル 2 の事前共有鍵。Alibaba Cloud 上のキーと一致する必要があります。 } }重要if_id_inとif_id_outパラメーターは、各トンネルを対応する XFRM インターフェイス (xfrm1 または xfrm2) にバインドし、2 つのトンネルからのトラフィックが干渉しないようにします。local_tsとremote_tsのトラフィックセレクターは0.0.0.0/0に設定されています。XFRM インターフェイス上のルートテーブルが、どのトラフィックがトンネルに入るかを決定します。宛先ベースルーティングでは、クラウド側のトラフィックセレクターも0.0.0.0/0に設定されます。
6. strongSwan の起動とトンネルステータスの確認
sudo systemctl enable strongswan
sudo systemctl restart strongswan
sudo swanctl --load-all
sudo swanctl --list-sas両方のトンネルのステータスが ESTABLISHED で、CHILD_SA のステータスが INSTALLED と表示されれば、strongSwan デバイスと Alibaba Cloud 間の IPsec 接続は正常に確立されています。
# 期待される出力例 (省略版)
tunnel1: #1, ESTABLISHED, IKEv2
tunnel1-child: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
tunnel2: #2, ESTABLISHED, IKEv2
tunnel2-child: #2, reqid 2, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96接続の確認
接続性のテスト
まず、ECS インスタンスのセキュリティグループルールが ICMP トラフィックを許可していることを確認します。次に、strongSwan デバイスにログインし、以下のコマンドを実行して ECS インスタンスに PING を送信します:
ping 10.0.0.1応答があれば、VPC とオンプレミス IDC 間の接続は確立されています。
まず、strongSwan デバイスまたは他のオンプレミスサーバーが ICMP トラフィックを許可していることを確認します。次に、VPC 内の ECS インスタンス (10.0.0.1) にログインし、strongSwan デバイスのプライベート IP アドレスに PING を送信します:
ping 172.16.0.1応答があれば、逆方向の接続も正常に機能しています。
高可用性のテスト
デフォルトでは、トランジットルーターにアタッチされた IPsec 接続は、等コストマルチパス (ECMP) 構成で負荷分散と高可用性のために両方のトンネルを同時に使用します。一方のトンネルに障害が発生した場合、トラフィックは手動介入なしで自動的にもう一方のアクティブなトンネルにフェイルオーバーします。
ECS インスタンスからオンプレミス IDC 内のサーバーへの継続的な PING を開始します:
ping 172.16.0.1 -c 10000トンネルの 1 つを中断させます。例えば、Alibaba Cloud コンソールで、トンネル 1 の事前共有鍵を変更してキーの不一致を発生させます。これにより、トンネルは切断されます。
PING の結果を観察します。短い中断の後、PING が再開されるはずです。これは、トラフィックが自動的にトンネル 2 にフェイルオーバーしたことを示します。
トンネル 1 の事前共有鍵を正しい値に戻してトンネルを復旧させます。トンネルが再確立されると、トラフィックは再び両方のトンネルで負荷分散されます。
トラブルシューティング
以下の表は、一般的な問題とその解決策を説明しています。
症状 | 考えられる原因 | 解決策 |
コンソールのトンネルステータスがネゴシエーション失敗と表示される。 | ネットワーク接続の問題 | strongSwan デバイスが Alibaba Cloud の IPsec アドレスに PING できるか確認します。ご利用のオンプレミス IDC のファイアウォールが UDP ポート 500 と 4500 のトラフィックを許可していることを確認します。 |
事前共有鍵の不一致 | 事前共有鍵が、大文字小文字や特殊文字を含め、両端で同一であることを確認します。 | |
IKE パラメーターの不一致 | IKE バージョン、暗号化アルゴリズム、認証アルゴリズム、DH グループが両端で一致していることを確認します。 | |
トンネルは確立されているが、PING が失敗する。 | ルート設定の誤り | VPC ルートテーブルに、ネクストホップがトランジットルーターに設定されたオンプレミス IDC の CIDR ブロックへのルートが含まれているか確認します。また、トランジットルーターのルートテーブルに、ネクストホップが IPsec 接続に設定された IDC CIDR ブロックへの静的ルートがあるか確認します。宛先ベースルーティングの場合、この静的ルートを手動で追加する必要があります。 |
セキュリティグループの制限 | ECS セキュリティグループが、オンプレミス IDC の CIDR ブロック (172.16.0.0/16) からのインバウンド ICMP トラフィックを許可しているか確認します。 | |
オンプレミスのファイアウォールの制限 | オンプレミスのファイアウォールが、VPC の CIDR ブロック (10.0.0.0/16) からのトラフィックを許可しているか確認します。 | |
strongSwan 側のルート欠落 | strongSwan デバイスで IP 転送が有効になっていることを確認します。オンプレミス IDC 内の他のサーバーに、ネクストホップが strongSwan デバイスに設定された VPC CIDR ブロックへのルートがあることを確認します。 |