-
當前增強型 VPN 閘道正處於邀測階段,如需使用,請聯絡阿里雲客戶經理進行服務開通。
-
增強型VPN網關與傳統型的具體區別,詳見兩者對比。
可使用開源的 strongSwan 軟體,快速地與阿里雲增強型 VPN 閘道建立 IPsec-VPN 串連,實現雲上雲下私網互連。
情境說明
某公司在馬來西亞(吉隆坡)地區建立了 VPC,現需通過增強型VPN對接strongSwan,實現雲上VPC與本地IDC的網路互連。
本情境中,IDC 側僅有一個公網出口 IP,與阿里雲VPN網關建立雙隧道模式的 IPsec 串連:
資源規劃
-
雲上:VPC 網段 10.0.0.0/16,地區為馬來西亞(吉隆坡)
-
交換器 1:可用性區域 A,網段 10.0.0.0/24
-
交換器 2:可用性區域 B,網段 10.0.1.0/24
-
ECS 執行個體:位於交換器 1,IP 位址 10.0.0.1
-
VPN 閘道:建立 1 個IPsec串連,系統將自動為此串連分配 2 個公網地址
-
IPsec地址1(用於主隧道):XX.XX.1.1
-
IPsec地址2(用於備隧道):XX.XX.2.2
-
-
-
雲下:本地 IDC網段 172.16.0.0/16
-
strongSwan 裝置:私網 IP 172.16.0.1
-
公網出口 IP:XX.XX.3.3
-
-
密碼編譯演算法:AES-256-GCM-16 / SHA-256 / DH Group 14。雲下需明確指定,雲上增強型VPN自動相容。
-
路由方式:使用靜態路由-感興趣流模式。感興趣流模式指定“哪些流量需要走 VPN 隧道”——您只需定義兩端的網段,匹配這兩個網段之間的流量即為"感興趣流"。系統會自動將其通過隧道傳輸,並產生對應路由。
本文僅描述單公網出口且使用靜態路由的情境。針對雙公網出口或BGP動態路由情境,詳見strongSwan配置樣本。
前提條件
-
雲上 VPC 網段與雲下 IDC 網段不能衝突。
-
已按照資源規劃 建立VPC,並在兩個不同可用性區域各建立了一個交換器。VPC 內至少有一台 ECS 執行個體用於驗證連通性。
-
本地 IDC 已部署一台 Linux 伺服器(本文以 CentOS Stream 9 為例),具備1個公網出口,後續將在該伺服器上安裝 strongSwan 作為本地網關。
第一步:建立增強型 VPN 閘道
-
前往控制台 VPN網關頁面,在頂部功能表列選擇馬來西亞(吉隆坡)地區。
-
切換到增強型IPsec-VPN頁簽,單擊建立增強型IPsec-VPN:
重要增強型VPN網關目前處於邀測階段,如果介面沒有增強型IPsec-VPN頁簽,請聯絡阿里雲工程師進行服務開通。
-
所屬地區:選擇 VPC 所在地區,本文選擇馬來西亞(吉隆坡)。
-
專用網路:選擇要連通的目標 VPC。
-
虛擬交換器1:選擇可用性區域 A 的交換器。
-
虛擬交換器2:選擇可用性區域 B 的交換器。與虛擬交換器1分屬不同可用性區域,以確保跨可用性區域高可用。若無交換器可選,請先建立。
系統會在 2 個交換器下各建立 1 個彈性網卡(ENI),作為 IPsec 串連與 VPC 流量互連的介面。每個 ENI 佔用交換器下 1 個 IP 位址。
-
第二步:建立使用者網關
使用者網關用於將本地網關裝置的公網 IP 記錄到阿里雲。本情境中 IDC 只有 1 個公網出口,因此只需建立 1 個使用者網關。
-
在 VPN 閘道控制台左側導覽列,單擊 使用者網關。
-
單擊建立使用者網關,配置:
-
名稱:輸入使用者網關名稱,例如
cgw-idc-kl。 -
IP地址:輸入本地 IDC 的公網出口 IP(
XX.XX.3.3)。
-
第三步:建立 IPsec 串連
-
在 VPN 閘道控制台左側導覽列,單擊IPsec串連,然後單擊綁定VPN網關,。
-
配置 IPsec 串連基本參數:
-
IPsec串連名稱:填寫有意義的資源名稱,例如:
ipsec-demo。 -
地區:選擇馬來西亞(吉隆坡)。
-
VPN 閘道類型:選擇增強型IPsec-VPN。
-
計費類型:自動顯示為按CDT計費,詳情見CDT公網流量。
-
綁定VPN網關:選擇第一步建立的增強型 VPN 閘道。
-
路由模式:選擇感興趣流模式。此模式需定義兩端網段,系統自動將匹配流量通過隧道傳輸並產生路由。
-
本端網段:輸入 VPC 網段
10.0.0.0/16。 -
對端網段:輸入 IDC 網段
172.16.0.0/16。 -
立即生效:選擇是,阿里雲側會主動和對端發起協商,後續對端配置完成後可以快速建立串連。
-
啟用BGP:本文不啟用。
-
-
配置隧道參數:
增強型 VPN 閘道支援多演算法相容模式,加密配置可使用預設值。
-
隧道 1(主):
-
使用者網關:選擇第二步建立的使用者網關。
-
預先共用金鑰:IPsec 隧道協商時用於身份認證的共用密鑰。本端與對端配置的預先共用金鑰必須一致,否則隧道無法正常建立。建議使用高強度密碼,包含大小寫字母、數字和特殊字元。
-
-
隧道 2(備):
-
使用者網關:選擇與主隧道相同的使用者網關(本情境 IDC 只有 1 個公網出口)。
-
預先共用金鑰:本文使用與主隧道相同的密鑰。
-
重要增強型 VPN 閘道預設啟用多演算法相容模式,加密配置中已預選多種常用演算法,系統會自動與本地網關裝置協商出雙方都支援的演算法。如果需要手動指定演算法,可展開加密配置進行修改。
-
-
單擊確定後,建立成功後,系統會提示是否去發布路由,先單擊取消。
IPsec 串連資源初始化約需 5 分鐘(狀態為準備中),此時還無法配置路由。您可以先進行第四步配置 strongSwan 裝置,路由配置將在第五步完成。
-
記錄雲上2條隧道的公網IP,後續配置 strongSwan 時需使用:
-
回到IPsec串連列表頁,找到剛剛建立的IPsec串連。
-
在網關IP列,記錄 IPsec 地址 1 和 IPsec 地址 2。本文以
XX.XX.1.1和XX.XX.2.2為例。
-
第四步:配置 strongSwan 裝置
以下內容包含的第三方產品資訊僅供參考。阿里雲對第三方產品的效能、可靠性以及操作可能帶來的潛在影響,不做任何暗示或其他形式的承諾。
下面以CentOS Stream 9 64位 作業系統為例配置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 ACCEPT
2. 開啟路由轉寄
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sudo sysctl -p
3. 安裝 strongSwan
dnf install epel-release -y
dnf install strongswan -y
4. 配置 strongSwan
-
備份原始設定檔:
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak -
建立設定檔:
vi /etc/strongswan/swanctl/swanctl.conf -
添加並儲存以下配置。請將樣本中的 IP 位址替換為您的實際地址:
# strongSwan 雙隧道 IPsec-VPN 配置,適用於:阿里雲增強型VPN網關+本地公網單出口+感興趣流 # # 只有帶"請修改"標記的參數需要根據實際環境修改,其餘參數保持預設即可。 # 演算法說明:aes256gcm16-sha256-modp2048 = AES-256-GCM-16 / SHA-256 / DH Group 14 # 主備邏輯:vco1 (priority=1) 為主隧道,vco2 (priority=2) 為備隧道,主隧道故障時自動切換。 connections { # === 隧道1(主) === vco1 { version = 2 dpd_delay = 10 rekey_time = 84600 over_time = 1800 proposals = aes256gcm16-sha256-modp2048 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 # 阿里雲側隧道1的公網IP(請修改) remote { auth = psk id = XX.XX.1.1 # 阿里雲側隧道1的公網IP,與上方 remote_addrs 一致(請修改) } children { vco_child1 { local_ts = 172.16.0.0/16 # 本地側感興趣流網段(請修改) remote_ts = 10.0.0.0/16 # 阿里雲側感興趣流網段(請修改) mode = tunnel rekey_time = 85500 life_time = 86400 dpd_action = restart start_action = start close_action = start esp_proposals = aes256gcm16-sha256-modp2048 priority = 1 # 指定為主隧道,不建議修改 } } } # === 隧道2(備) === vco2 { version = 2 dpd_delay = 10 rekey_time = 84600 over_time = 1800 proposals = aes256gcm16-sha256-modp2048 encap = yes local_addrs = 172.16.0.1 # strongSwan本機網卡IP,與隧道1的local_addrs相同(請修改) local { auth = psk id = XX.XX.3.3 # 本地側公網出口IP,與隧道1相同(請修改) } remote_addrs = XX.XX.2.2 # 阿里雲側隧道2的公網IP(請修改) remote { auth = psk id = XX.XX.2.2 # 阿里雲側隧道2的公網IP,與上方 remote_addrs 一致(請修改) } children { vco_child2 { local_ts = 172.16.0.0/16 # 本地側感興趣流網段,與隧道1的local_ts相同(請修改) remote_ts = 10.0.0.0/16 # 阿里雲側感興趣流網段,與隧道1的remote_ts相同(請修改) mode = tunnel rekey_time = 85500 life_time = 86400 dpd_action = restart start_action = start close_action = start esp_proposals = aes256gcm16-sha256-modp2048 priority = 2 # 指定為備隧道,不建議修改 } } } } secrets { ike-vco1 { id = XX.XX.1.1 # 阿里雲側隧道1的公網IP(請修改) secret = your-psk-here # 隧道1的預先共用金鑰,需與阿里雲側一致(請修改) } ike-vco2 { id = XX.XX.2.2 # 阿里雲側隧道2的公網IP(請修改) secret = your-psk-here # 隧道2的預先共用金鑰,需與阿里雲側一致(請修改) } }
5. 啟動並確認隧道狀態
sudo systemctl restart strongswan
swanctl --load-all
watch swanctl --list-sas
如果兩條隧道均顯示 ESTABLISHED 且 CHILD_SA 為 INSTALLED 狀態,則表示 strongSwan 裝置和阿里雲 VPN 閘道之間已成功建立 IPsec-VPN 串連。
Every 2.0s: swanctl --list-sas iZ8psgynxxx: Fri Mar 13 14:53:47 2026
plugin 'sqlite': failed to load - sqlite_plugin_create not found and no plugin file
available
vco1: #11, ESTABLISHED, IKEv2, fbf8cda98d1d4f45_i c8a12ae19f8303d8_r*
local 'XX.XX.3.3x.18' @ 172.16.0.1[4500]
remote 'XX.XX.1.1x.58' @ XX.XX.1.1x.58[4500]
AES_GCM_16-256/PRF_HMAC_SHA2_256/MODP_2048
established 1534s ago, rekeying in 81327s
vco_child1: #10, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_GCM_16-256/MODP_2048
installed 10638s ago, rekeying in 73995s, expires in 75762s
in c31a70fc, 892248 bytes, 10622 packets, 1s ago
out c53ef972, 892332 bytes, 10623 packets, 1s ago
local 172.16.0.0/16
remote 10.0.0.0/16
vco2: #10, ESTABLISHED, IKEv2, 9b259bb527d43acf_i f53df17098e08519_r*
local 'XX.XX.3.3x.18' @ 172.16.0.1[4500]
remote 'XX.XX.2.2x.121' @ XX.XX.2.2x.121[4500]
AES_GCM_16-256/PRF_HMAC_SHA2_256/MODP_2048
established 3270s ago, rekeying in 81252s
vco_child2: #9, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_GCM_16-256/MODP_2048
installed 12865s ago, rekeying in 71956s, expires in 73535s
in c11c544e, 0 bytes, 0 packets, 7s ago
out c7acef03, 0 bytes, 0 packets, 14s ago
local 172.16.0.0/16
remote 10.0.0.0/16
第五步:配置雲上路由
因本文使用感興趣流模式,系統會自動在增強型 VPN 閘道的目的路由表中產生路由條目。
您可將此路由一鍵發布到VPC路由表,使VPC內ECS執行個體訪問IDC網段的流量路由到VPN網關:
-
單擊剛剛建立的增強型 VPN 閘道的執行個體 ID,進入詳情頁。
-
切換到目的路由表頁簽,您可以看到IPsec串連使用感興趣流模式後,系統已自動產生的目的路由條目(目標網段 172.16.0.0/16,下一跳為 IPsec 串連)。
-
在目標路由條目的操作列,單擊發布,將路由發布到 VPC 路由表。
發布路由後,VPC 路由表中會新增一條目標網段為 172.16.0.0/16、下一跳為 VPN 閘道的路由,VPC 內的 ECS 訪問 IDC 網段的流量將自動通過 VPN 隧道傳輸。
驗證測試
驗證連通性
-
先確保ECS的安全性群組規則已放通ICMP協議,再登入 strongSwan 裝置,執行以下命令 ping 雲上 ECS:
ping 10.0.0.1若能收到回複報文,說明雲上 VPC 和雲下 IDC 之間已成功互連。
-
先確保本地防火牆已放通ICMP協議,再登入 VPC 中的 ECS 執行個體(10.0.0.1),ping strongSwan裝置的內網地址:
ping 172.16.0.1若能收到回複報文,說明反向連通也正常。
驗證高可用
-
保持 ECS 持續 ping IDC 伺服器:
ping 172.16.0.1 -c 10000 -
中斷主隧道:在阿里雲控制台修改 IPsec 串連主隧道的預先共用金鑰(使兩端密鑰不一致),主隧道將中斷。
-
觀察 ping 結果:流量在短暫中斷後重新恢複通訊,說明流量已自動切換到備隧道。
-
恢複主隧道:將主隧道的預先共用金鑰改回正確值,主隧道恢複後流量將自動切回。
故障排查
常見問題與解決方案:
|
問題現象 |
可能原因 |
解決方案 |
|
控制台隧道狀態顯示協商失敗 |
網路不通 |
檢查 strongSwan 裝置能否 ping 通阿里雲的 IPsec 地址;確認本地IDC的防火牆已放通 UDP 500/4500 連接埠。 |
|
預先共用金鑰不匹配 |
核對兩端的預先共用金鑰是否完全一致(包括大小寫和特殊字元)。 |
|
|
IKE 參數不一致 |
檢查 IKE 版本、密碼編譯演算法、認證演算法、DH 分組等參數是否在兩端匹配。 |
|
|
隧道已建立但無法 ping 通 |
路由未配置 |
檢查 VPC 路由表中是否發行 VPN 閘道的目的路由。 |
|
安全性群組限制 |
檢查 ECS 安全性群組是否允許來自 IDC 網段(172.16.0.0/16)的 ICMP 流量。 |
|
|
本地防火牆限制 |
檢查 IDC 防火牆是否允許來自 VPC 網段(10.0.0.0/16)的流量。 |
|
|
strongSwan 側路由缺失 |
確認 strongSwan 裝置已開啟 IP 轉寄,且 IDC 內其他伺服器配置了到 VPC 網段的路由(下一跳為 strongSwan 裝置)。 |
更多問題詳見故障排查。