全部產品
Search
文件中心

VPN Gateway:增強型VPN網關快速入門

更新時間:Jun 08, 2026
重要
  • 當前增強型 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 閘道

  1. 前往控制台 VPN網關頁面,在頂部功能表列選擇馬來西亞(吉隆坡)地區。

  2. 切換到增強型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 個使用者網關。

  1. 在 VPN 閘道控制台左側導覽列,單擊 使用者網關

  2. 單擊建立使用者網關,配置:

    • 名稱:輸入使用者網關名稱,例如 cgw-idc-kl

    • IP地址:輸入本地 IDC 的公網出口 IP(XX.XX.3.3)。

第三步:建立 IPsec 串連

  1. 在 VPN 閘道控制台左側導覽列,單擊IPsec串連,然後單擊綁定VPN網關,。

  2. 配置 IPsec 串連基本參數:

    • IPsec串連名稱:填寫有意義的資源名稱,例如:ipsec-demo

    • 地區:選擇馬來西亞(吉隆坡)

    • VPN 閘道類型:選擇增強型IPsec-VPN

    • 計費類型:自動顯示為按CDT計費,詳情見CDT公網流量

    • 綁定VPN網關:選擇第一步建立的增強型 VPN 閘道。

    • 路由模式:選擇感興趣流模式。此模式需定義兩端網段,系統自動將匹配流量通過隧道傳輸並產生路由。

    • 本端網段:輸入 VPC 網段 10.0.0.0/16

    • 對端網段:輸入 IDC 網段 172.16.0.0/16

    • 立即生效:選擇,阿里雲側會主動和對端發起協商,後續對端配置完成後可以快速建立串連。

    • 啟用BGP:本文不啟用。

  3. 配置隧道參數:

    增強型 VPN 閘道支援多演算法相容模式,加密配置可使用預設值。

    • 隧道 1(主)

      • 使用者網關:選擇第二步建立的使用者網關。

      • 預先共用金鑰:IPsec 隧道協商時用於身份認證的共用密鑰。本端與對端配置的預先共用金鑰必須一致,否則隧道無法正常建立。建議使用高強度密碼,包含大小寫字母、數字和特殊字元。

    • 隧道 2(備):

      • 使用者網關:選擇與主隧道相同的使用者網關(本情境 IDC 只有 1 個公網出口)。

      • 預先共用金鑰:本文使用與主隧道相同的密鑰。

    重要

    增強型 VPN 閘道預設啟用多演算法相容模式,加密配置中已預選多種常用演算法,系統會自動與本地網關裝置協商出雙方都支援的演算法。如果需要手動指定演算法,可展開加密配置進行修改。

  4. 單擊確定後,建立成功後,系統會提示是否去發布路由,先單擊取消

    IPsec 串連資源初始化約需 5 分鐘(狀態準備中),此時還無法配置路由。您可以先進行第四步配置 strongSwan 裝置,路由配置將在第五步完成。
  5. 記錄雲上2條隧道的公網IP,後續配置 strongSwan 時需使用:

    1. 回到IPsec串連列表頁,找到剛剛建立的IPsec串連。

    2. 網關IP列,記錄 IPsec 地址 1 IPsec 地址 2。本文以XX.XX.1.1XX.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

  1. 備份原始設定檔:

    mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
  2. 建立設定檔:

    vi /etc/strongswan/swanctl/swanctl.conf
  3. 添加並儲存以下配置。請將樣本中的 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網關:

  1. 單擊剛剛建立的增強型 VPN 閘道的執行個體 ID,進入詳情頁。

  2. 切換到目的路由表頁簽,您可以看到IPsec串連使用感興趣流模式後,系統已自動產生的目的路由條目(目標網段 172.16.0.0/16,下一跳為 IPsec 串連)。

  3. 在目標路由條目的操作列,單擊發布,將路由發布到 VPC 路由表。

    發布路由後,VPC 路由表中會新增一條目標網段為 172.16.0.0/16、下一跳為 VPN 閘道的路由,VPC 內的 ECS 訪問 IDC 網段的流量將自動通過 VPN 隧道傳輸。

驗證測試

驗證連通性

  1. 先確保ECS的安全性群組規則已放通ICMP協議,再登入 strongSwan 裝置,執行以下命令 ping 雲上 ECS:

    ping 10.0.0.1

    若能收到回複報文,說明雲上 VPC 和雲下 IDC 之間已成功互連。

  2. 先確保本地防火牆已放通ICMP協議,再登入 VPC 中的 ECS 執行個體(10.0.0.1),ping strongSwan裝置的內網地址:

    ping 172.16.0.1

    若能收到回複報文,說明反向連通也正常。

驗證高可用

  1. 保持 ECS 持續 ping IDC 伺服器:

    ping 172.16.0.1 -c 10000
  2. 中斷主隧道:在阿里雲控制台修改 IPsec 串連主隧道的預先共用金鑰(使兩端密鑰不一致),主隧道將中斷。

  3. 觀察 ping 結果:流量在短暫中斷後重新恢複通訊,說明流量已自動切換到備隧道。

  4. 恢複主隧道:將主隧道的預先共用金鑰改回正確值,主隧道恢複後流量將自動切回。

故障排查

常見問題與解決方案:

問題現象

可能原因

解決方案

控制台隧道狀態顯示協商失敗

網路不通

檢查 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 裝置)。

更多問題詳見故障排查