全部產品
Search
文件中心

VPN Gateway:傳統型VPN網關入門

更新時間:Mar 19, 2026

可使用開源的 strongSwan 軟體,快速地與阿里雲傳統型 VPN 閘道建立 IPsec-VPN 串連,實現雲上雲下私網互連。

情境說明

某公司在華東1(杭州)地區建立了 VPC,現需通過傳統型 VPN 閘道對接 strongSwan,實現雲上 VPC 與本地 IDC 的網路互連。

本情境中,IDC 側僅有一個公網出口 IP,與阿里雲 VPN 閘道建立雙隧道模式的 IPsec 串連:

image

資源規劃

  • 雲上:VPC 網段 10.0.0.0/16,地區為華東1(杭州)

    • 交換器 1:可用性區域 I,網段 10.0.0.0/24

    • 交換器 2:可用性區域 J,網段 10.0.1.0/24

    • ECS 執行個體:位於交換器 1,IP 位址 10.0.0.1

    • VPN 閘道:建立後系統自動分配 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

  • 密碼編譯演算法:使用控制台預設值(AES128 / SHA1 / DH Group 2)。雲上與雲下的密碼編譯演算法、認證演算法和 DH 分組需保持一致。

  • 路由方式:使用靜態路由-感興趣流模式。感興趣流模式指定"哪些流量需要走 VPN 隧道"——您只需定義兩端的網段,匹配這兩個網段之間的流量即為"感興趣流"。系統會自動將其通過隧道傳輸,並產生對應路由。

重要

本文僅描述單公網出口且使用靜態路由的情境。針對雙公網出口或BGP動態路由情境,詳見strongSwan配置樣本

前提條件

  • 雲上 VPC 網段與雲下 IDC 網段不能衝突。

  • 已按照資源規劃建立 VPC,並在兩個不同可用性區域各建立了一個交換器。VPC 內至少有一台 ECS 執行個體用於驗證連通性。

  • 本地 IDC 已部署一台 Linux 伺服器(本文以 CentOS Stream 9 為例),具備 1 個公網出口,後續將在該伺服器上安裝 strongSwan 作為本地網關。

第一步:建立傳統型 VPN 閘道

  1. 前往控制台 VPN網關頁面,單擊建立VPN網關,配置以下關鍵參數:

    • 執行個體名稱:建議輸入有意義的執行個體名稱,例如 vpn-gw-docdev

    • 地區和可用性區域:選擇 VPC 所在地區,本文選擇華東1(杭州)

    • 網關類型:選擇普通型

    • 網路類型:選擇公網

    • VPC:選擇要連通的目標 VPC。

    • 虛擬交換器1:選擇可用性區域 I 的交換器。

    • 虛擬交換器2:選擇可用性區域 J 的交換器。與虛擬交換器1分屬不同可用性區域,以確保跨可用性區域高可用。若無交換器可選,請先建立。

    • 頻寬規格:根據業務需求選擇頻寬,本文使用預設值。

    • IPsec-VPN開啟

    • SSL-VPN關閉

    • 計費周期:使用預設值。

    • 關聯角色建立:確保建立服務關聯角色,VPN 閘道使用此角色來訪問其他雲產品中的資源。

  2. 單擊立即購買並完成支付。VPN 閘道執行個體初始化約需 1~5 分鐘。系統會為 VPN 閘道分配兩個公網 IP 位址,分別用於建立主隧道和備隧道。

第二步:建立使用者網關

使用者網關用於將本地網關裝置的公網 IP 記錄到阿里雲。本情境中 IDC 只有 1 個公網出口,因此只需建立 1 個使用者網關。

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

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

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

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

第三步:建立 IPsec 串連

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

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

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

    • 地區:選擇華東1(杭州)

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

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

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

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

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

    • 啟用BGP:本文不啟用。

  3. 配置隧道參數:

    • 隧道 1(主)

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

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

      • 加密配置:保持預設即可。本文使用預設的密碼編譯演算法(AES128)、認證演算法(SHA1)和 DH 分組(group2)。

    • 隧道 2(備)

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

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

      • 加密配置:與主隧道保持一致,保持預設。

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

    IPsec 串連資源初始化約需 5 分鐘(狀態為準備中),此時還無法配置路由。您可以先進行第四步配置 strongSwan 裝置,路由配置將在第五步完成。
  5. 記錄雲上 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

  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網關+本地公網單出口+感興趣流
    #
    # 只有帶"請修改"標記的參數需要根據實際環境修改,其餘參數保持預設即可。
    # 演算法說明:aes128-sha1-modp1024 = AES-128 / SHA-1 / DH Group 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本機網卡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 = 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本機網卡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 = aes128-sha1-modp1024
                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 串連。

第五步:配置雲上路由

因本文使用感興趣流模式,系統會自動在 VPN 閘道策略路由表中產生路由條目。

您可將此路由一鍵發布到 VPC 路由表,使 VPC 內 ECS 執行個體訪問 IDC 網段的流量路由到 VPN 閘道:

  1. 回到 VPN 閘道列表頁,單擊第一步建立的 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 分組等參數是否在兩端匹配。傳統型 VPN 閘道不支援多演算法相容,兩端參數必須完全一致。

隧道已建立但無法 ping 通

路由未配置

檢查 VPC 路由表中是否發行 VPN 閘道的目的路由。

安全性群組限制

檢查 ECS 安全性群組是否允許來自 IDC 網段(172.16.0.0/16)的 ICMP 流量。

本地防火牆限制

檢查 IDC 防火牆是否允許來自 VPC 網段(10.0.0.0/16)的流量。

strongSwan 側路由缺失

確認 strongSwan 裝置已開啟 IP 轉寄,且 IDC 內其他伺服器配置了到 VPC 網段的路由(下一跳為 strongSwan 裝置)。