このガイドでは、オンプレミス IDC を VPC に接続するために、Transit Router に IPsec 接続をアタッチする方法について説明します。
シナリオ
ある企業は、中国 (杭州) リージョンに VPC を所有しており、IPsec 接続を使用してオンプレミス IDC を VPC に接続する必要があります。このシナリオでは、VPN Gateway に直接接続する代わりに、IPsec 接続を Transit Router にアタッチします。この構成により、Cloud Enterprise Network (CEN) を使用してクラウドネットワークを一元的に管理し、より多くの VPC を含めたり、クロスリージョン接続を確立したりするために簡単に拡張できます。
このシナリオでは、オンプレミス IDC は単一のパブリック IP アドレスを持ち、Alibaba Cloud とデュアルトンネル IPsec 接続を確立します。
リソース計画
クラウド リソース: 中国 (杭州) リージョンに CIDR ブロック 10.0.0.0/16 を持つ VPC。
vSwitch 1: アベイラビリティーゾーン H にあり、CIDR ブロック 10.0.0.0/24 を持ちます。
vSwitch 2: アベイラビリティーゾーン J にあり、CIDR ブロック 10.0.2.0/24 を持ちます。
ECS インスタンス: vSwitch にデプロイされ、IP アドレス 10.0.0.1 を持ちます (接続テストに使用)。
CEN インスタンス: Transit Router をホストするために使用されます。
Transit Router: 中国 (杭州) リージョンに作成され、アドレスプール 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 Group 2。トンネルの両端は同じ暗号化パラメーターを使用する必要があります。
ルーティング方法: このシナリオでは、宛先ルーティングモードを使用します。オンプレミス IDC 宛てのトラフィックを VPN 接続に転送するために、Transit Router ルートテーブルに静的ルートを追加します。
前提条件
VPC の CIDR ブロックは、オンプレミス IDC の CIDR ブロックと重複しません。
異なるアベイラビリティーゾーンに 2 つの vSwitch を持つ VPC を作成済みです。VPC には、接続をテストするための少なくとも 1 つの ECS インスタンスが含まれています。
CEN インスタンスと Transit Router を作成済みであり、以下の作業を完了しています。
VPC と TR 間でルート学習を有効にし、ルート伝播を有効にします。
TR のアドレスプールを構成します。
オンプレミス IDC に Linux サーバーをデプロイ済みです。このガイドでは、例として CentOS Stream 9 を使用します。サーバーには、オンプレミスゲートウェイとして機能する strongSwan をインストールするパブリック IP アドレスが 1 つあります。
ステップ 1: カスタマーゲートウェイの作成
カスタマーゲートウェイは、オンプレミスゲートウェイデバイスのパブリック IP アドレスを記録します。
VPN Gateway ページに移動します。VPN Gateway 左側のナビゲーションウィンドウで、カスタマーゲートウェイ をクリックします。
上部のナビゲーションバーで、[China (Hangzhou)] リージョンを選択します。
カスタマーゲートウェイの作成 をクリックし、以下のパラメーターを設定します。
名前: カスタマーゲートウェイの名前を入力します(例:
cgw-idc)。IP アドレス: お客様のオンプレミス IDC のパブリック IP アドレスを入力します。たとえば、XX.XX.3.3。
ステップ 2: IPsec 接続の作成
VPN Gateway コンソールの左側のナビゲーションウィンドウで、IPsec 接続 をクリックします。
CEN と関連付け をクリックし、IPsec 接続の基本パラメーターを設定します:
IPsec 接続名: リソースの名前を入力します。例:
ipsec-demoリージョン: 中国 (杭州) を選択します。
ゲートウェイタイプ: パブリック を選択します。
CEN と関連付け: アカウント内 を選択します。
リソースの関連付け: トランジットルーター を選択します。
CEN インスタンス ID: 前提条件として作成した CEN インスタンスを選択します。
ルーティングモード: 宛先ルーティングモード を選択します。後ほど、トランジットルーターのルートテーブルに静的ルートを追加して、トラフィックの転送を制御します。
今すぐ有効化: はい、設定が完了すると即座にネゴシエーションする。これにより、Alibaba Cloud がピア ゲートウェイとのネゴシエーションを開始できます。
上級設定 (ルートテーブルの自動関連付けとルート転送設定などの設定を含む):すべてのオプションを選択します。これには、ルートの自動公開、転送ルーターに自動的に関連付けるデフォルトのルートテーブル、およびシステムルートを転送ルーターに自動的に伝播するデフォルトのルートテーブルが含まれます。
トンネルパラメーターを構成します。
Tunnel 1:
カスタマーゲートウェイ: ステップ 1 で作成したカスタマーゲートウェイを選択します。
事前共有鍵: トンネル確立時の相互認証に使用されるキーです。このキーは、クラウド ゲートウェイとオンプレミス ゲートウェイの両方で同一である必要があります。
Tunnel 2:
カスタマーゲートウェイ: このシナリオでは、オンプレミス IDC にはパブリック IP アドレスが 1 つしかないため、トンネル 1 と同じカスタマーゲートウェイを選択します。
事前共有鍵: このガイドでは、Tunnel 1 と同じキーを使用します。
暗号化設定 セクションのその他のパラメーターは、デフォルト値のままにしておくことができます。アルゴリズムを手動で指定するには、暗号化設定 セクションを展開して変更します。
[OK]をクリックします。リソースの作成後にルートの公開を促されたら、とりあえず[キャンセル]をクリックします。
IPsec 接続の初期化には約 5 分かかります。この期間中、そのステータスは準備中になり、ルートを設定することはできません。クラウド側のパブリック IP アドレスを記録し、ステップ 3 に進んでルートを設定してください。
クラウド側の 2 つのトンネルのパブリック IP アドレスを記録します。これらは strongSwan を構成するために必要です。
IPsec 接続 リストに戻り、作成したばかりの接続を探します。ゲートウェイ IP アドレス 列で、IPsec アドレス 1 : と IPsec アドレス 2 : の値を記録します。本ガイドでは、例として XX.XX.1.1 と XX.XX.2.2 を使用します。
ステップ 3: TR への静的ルートの追加
宛先ルーティングモードを使用しているため、TR ルートテーブルにオンプレミス IDC CIDR ブロックへのルートを手動で追加する必要があります。
Cloud Enterprise Network コンソールにアクセスし、CEN インスタンスの ID をクリックします。
トランジットルーター タブで、中国 (杭州) リージョンにあるトランジットルーターを見つけ、その ID をクリックして詳細ページに移動します。
「ルートテーブル」タブに切り替えます。システムルートテーブルはデフォルトで表示されます。
システムルートテーブルのルートエントリタブで、ルートエントリの追加をクリックします。
宛先 CIDR: オンプレミス IDC の CIDR ブロック
172.16.0.0/16を入力します。ブラックホールルート: いいえ を選択します。
ネクストホップ: VPN 接続に対応するネットワークインスタンス接続を選択します。この接続は、IPsec 接続が Transit Router にアタッチされると自動的に作成されます。
[OK] をクリックします。
ルートが追加されると、宛先が
172.16.0.0/16に設定され、ネクストホップが VPN 接続に設定された静的ルートがルートテーブルに表示されます。このルートは、オンプレミス IDC 宛てのトラフィックを IPsec トンネルに転送します。VPC 側のルートは、TR のルート伝播機能を通じて自動的に構成され、手動での構成は不要です。
ステップ 4: strongSwan デバイスの構成
サードパーティ製品に関する以下の情報は、参照用です。Alibaba Cloud は、サードパーティ製品のパフォーマンスと信頼性、または説明されている操作の潜在的な影響について、明示的または黙示的な保証を行いません。
以下の手順では、64 ビット CentOS Stream 9 オペレーティングシステムで strongSwan を構成する方法について説明します。他のオペレーティングシステムについては、strongSwan 公式ドキュメントをご参照ください。
1. ファイアウォールルールの構成
strongSwan デバイスで、2 つの Alibaba Cloud 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 インターフェースとアップダウンスクリプトの作成
デュアルトンネル設定では、各トンネルのトラフィックを区別する必要があるため、カーネルルーティングポリシーの競合を避けるために XFRM 仮想インターフェースを作成する必要があります。
# Create XFRM tunnel interfaces, one for each tunnel.
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
# Add an ECMP route to load-balance traffic to the cloud CIDR block across both tunnels.
sudo ip route add 10.0.0.0/16 nexthop dev xfrm1 weight 1 nexthop dev xfrm2 weight 1トンネルが中断されたときに、対応する 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 dual-tunnel IPsec-VPN configuration # For: Alibaba Cloud IPsec connection attached to a Transit Router + single on-premises public IP address + destination routing mode # # Change only the parameters marked with "Please modify". Keep the default values for all other parameters. # This configuration uses XFRM interfaces (if_id) to distinguish traffic for each tunnel and ECMP for load balancing. connections { # === Tunnel 1 === tunnel1 { version = 2 dpd_delay = 10s rekey_time = 86400s proposals = aes128-sha1-modp1024 local_addrs = 172.16.0.1 # strongSwan サーバーのネットワークインターフェースのプライベート IP アドレス (変更してください: NAT 環境ではプライベート IP アドレスを使用し、NIC に直接割り当てられている場合はパブリック IP アドレスを使用します) local { auth = psk id = XX.XX.3.3 # オンプレミスゲートウェイのパブリック IP アドレス (変更してください) } remote_addrs = XX.XX.1.1 # Alibaba Cloud 上の Tunnel 1 のパブリック IP アドレス (変更してください) remote { auth = psk id = XX.XX.1.1 # Alibaba Cloud 上の Tunnel 1 のパブリック IP アドレス。上記の remote_addrs と同じです (変更してください) } 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 } # === Tunnel 2 === tunnel2 { version = 2 dpd_delay = 10s rekey_time = 86400s proposals = aes128-sha1-modp1024 local_addrs = 172.16.0.1 # strongSwan サーバーのネットワークインターフェースのプライベート IP アドレス。Tunnel 1 と同じです (変更してください) local { auth = psk id = XX.XX.3.3 # オンプレミスゲートウェイのパブリック IP アドレス。Tunnel 1 と同じです (変更してください) } remote_addrs = XX.XX.2.2 # Alibaba Cloud 上の Tunnel 2 のパブリック IP アドレス (変更してください) remote { auth = psk id = XX.XX.2.2 # Alibaba Cloud 上の Tunnel 2 のパブリック IP アドレス。上記の remote_addrs と同じです (変更してください) } 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 上の Tunnel 1 のパブリック IP アドレス (変更してください) secret = "your-psk-here" # Tunnel 1 の事前共有鍵。Alibaba Cloud 上の鍵と一致する必要があります (変更してください) } ike-tunnel2 { id-1 = XX.XX.3.3 # オンプレミスゲートウェイのパブリック IP アドレス (変更してください) id-2 = XX.XX.2.2 # Alibaba Cloud 上の Tunnel 2 のパブリック IP アドレス (変更してください) secret = "your-psk-here" # Tunnel 2 の事前共有鍵。Alibaba Cloud 上の鍵と一致する必要があります (変更してください) } }重要if_id_inおよびif_id_outパラメーターは、各トンネルを対応する XFRM インターフェース (xfrm1 または xfrm2) にバインドし、各トンネルのトラフィックを分離します。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 接続が確立されています。
# Example output (some details are omitted)
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応答を受信した場合、逆接続も機能しています。
高可用性の検証
Transit Router にアタッチされた IPsec 接続は、デフォルトで Equal-Cost Multi-Path (ECMP) ルーティングを使用して、両方のトンネル間でトラフィックを負荷分散します。いずれかのトンネルが中断された場合、手動介入なしでトラフィックは自動的に別のトンネルにフェイルオーバーします。
ECS インスタンスから、オンプレミス IDC 内のサーバーに継続的な ping を実行します。
ping 172.16.0.1 -c 10000いずれかのトンネルを中断します。たとえば、Alibaba Cloud コンソールで、Tunnel 1 の事前共有鍵を変更して不一致を作成し、トンネルを中断します。
ping の結果を観察します。短い中断の後、トラフィックが Tunnel 2 にフェイルオーバーするため、接続は復元されます。
トンネルを復元します。Tunnel 1 の事前共有鍵を正しい値に戻します。トンネルが復元されると、トラフィックは再び両方のトンネル間で負荷分散されます。
トラブルシューティング
このセクションでは、一般的な問題とそのソリューションについて説明します。
症状 | 考えられる原因 | ソリューション |
コンソールでトンネルネゴシエーションが失敗する。 | ネットワーク接続の問題 | strongSwan デバイスが Alibaba Cloud IPsec アドレスに ping できるかどうかを確認します。オンプレミス IDC のファイアウォールが UDP ポート 500 および 4500 のトラフィックを許可していることを確認します。 |
事前共有鍵の不一致 | 両端の事前共有鍵が、大文字と小文字、特殊文字を含めて同一であることを確認します。 | |
IKE パラメーターの不一致 | IKE バージョン、暗号化アルゴリズム、認証アルゴリズム、および DH グループが両端で一致していることを確認します。 | |
トンネルは確立されているが、ping が失敗する。 | ルートが構成されていない。 | VPC ルートテーブルに、ネクストホップとして TR を持つオンプレミス CIDR へのルートがあることを確認します。また、TR ルートテーブルに、ネクストホップとして VPN 接続を持つオンプレミス CIDR への静的ルートがあることを確認します。宛先ルーティングモードでは、TR ルートは手動で追加する必要があります。 |
セキュリティグループの制限 | ECS インスタンスのセキュリティグループが、オンプレミス IDC CIDR ブロック (172.16.0.0/16) からの受信 ICMP トラフィックを許可していることを確認します。 | |
オンプレミスファイアウォールの制限 | オンプレミス IDC のファイアウォールが、VPC CIDR ブロック (10.0.0.0/16) からのトラフィックを許可していることを確認します。 | |
strongSwan 側のルートの欠落 | strongSwan デバイスで IP 転送が有効になっていることを確認します。オンプレミス IDC 内の他のサーバーが VPC CIDR ブロックへのルートを持ち、VPC CIDR ブロックのネクストホップが strongSwan デバイスであることを確認します。 |