如何在strongSwan网关上配置到本地IDC客户端的路由?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
开启IP转发:
为了使strongSwan设备能够转发数据包,您需要启用系统的IP转发功能。这可以通过临时命令完成:
echo 1 > /proc/sys/net/ipv4/ip_forward
为了使这一更改永久生效,编辑/etc/sysctl.conf文件:
bash
sudo vi /etc/sysctl.conf
在文件中添加以下行并保存:
net.ipv4.ip_forward = 1
之后,使配置生效:
sudo sysctl -p
配置路由规则:
需要在strongSwan设备上添加路由规则,以确保本地数据中心客户端到阿里云VPC以及从VPC返回的流量能够正确转发。具体命令取决于您的网络配置,但一般形式如下:
为本地数据中心到阿里云VPC添加路由(假设阿里云VPC的网段为192.168.10.0/24):
sudo ip route add 192.168.10.0/24 via <阿里云隧道出口IP>
为阿里云VPC到本地数据中心添加路由(假设本地数据中心的网段为172.16.2.0/24): 这一步通常在阿里云的VPC或VBR上配置,而不是直接在strongSwan设备上,但确保strongSwan设备能正确处理返回流量也是必要的,这通常通过IPsec隧道自动完成。

登录strongSwan设备的命令行界面。
执行以下命令安装strongSwan软件。
sudo yum install -y strongswan-5.9.10
为strongSwan设备开启流量转发功能。
echo 1 > /proc/sys/net/ipv4/ip_forward
创建2个虚拟网络接口,用于建立IPsec-VPN隧道。
sudo ip link add ipsec0 type xfrm dev eth0 if_id 42 # 创建隧道1 XFRM虚拟网络接口,接口ID为42,底层接口为公网接口eth0。
sudo ip link add ipsec1 type xfrm dev eth0 if_id 43 # 创建隧道2 XFRM虚拟网络接口,接口ID为43,底层接口为公网接口eth0。
sudo ip link set ipsec0 up # 启动隧道1 XFRM虚拟网络接口。
sudo ip link set ipsec1 up # 启动隧道2 XFRM虚拟网络接口。
修改strongSwan配置文件。
执行以下命令打开strongSwan配置文件。
sudo vi /etc/strongswan/swanctl/swanctl.conf
按下i键,进入编辑模式。
根据以下信息在配置文件中添加VPN配置,文件中原有的配置需全部删除。
connections {
   vco1 {                            # 添加IPsec-VPN隧道1的VPN配置
      version = 2                    # 指定IKE版本,需与阿里云隧道1的IKE版本保持一致,2表示IKEv2。
      local_addrs  = 8.XX.XX.99      # 指定需要建立IPsec-VPN连接的公网IP地址。
      remote_addrs = 8.XX.XX.149     # 指定隧道1对端的IP地址为阿里云隧道1的网关IP地址,即IPsec地址1。
      dpd_delay = 10
      rekey_time = 84600             # 指定隧道1的SA生存周期,需与阿里云隧道1 IKE配置中的SA生存周期保持一致。
      over_time = 1800               
      proposals = aes-sha1-modp1024  # 指定隧道1的加密算法、认证算法、DH分组,需与阿里云隧道1 IKE配置中的加密算法、认证算法、DH分组保持一致,group2对应的是modp1024。
      encap = yes
      local {
         auth = psk                  # 本段认证方式选择PSK模式,即预共享密钥方式。
         id = 8.XX.XX.99             # 指定本端ID,需与阿里云隧道1的RemoteId保持一致。
      }
      remote {
         auth = psk                  # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
         id = 8.XX.XX.149            # 指定对端ID,需与阿里云隧道1的LocalId保持一致。
      }
      children {
         vco_child1 {
            local_ts  = 0.0.0.0/0    # 阿里云目的路由模式对应的感兴趣流是0.0.0.0/0。
            remote_ts = 0.0.0.0/0    # 阿里云目的路由模式对应的感兴趣流是0.0.0.0/0。
            mode = tunnel
            rekey_time = 85500
            life_time = 86400        # 指定隧道1的SA生存周期,需与阿里云隧道1 IPsec配置中的SA生存周期保持一致。
            dpd_action = restart
            start_action = start
            close_action = start
            esp_proposals = aes-sha1-modp1024   # 指定隧道1的加密算法、认证算法、DH分组,需与阿里云隧道1 IPsec配置中的加密算法、认证算法、DH分组保持一致,group2对应的是modp1024。
            if_id_out = 42           # 指定隧道1的出接口和入接口为隧道1 XFRM虚拟网络接口。
            if_id_in = 42
            updown = /root/connect_1.sh         # 根据隧道1的UP和DOWN状态执行/root/connect_1.sh脚本,以配置路由。
         }
      }
   }
  vco2 {                             # 添加IPsec-VPN隧道2的VPN配置
      version = 2                    # 指定IKE版本,需与阿里云隧道2的IKE版本保持一致,2表示IKEv2。
      local_addrs  = 8.XX.XX.99      # 指定需要建立IPsec-VPN连接的公网IP地址。
      remote_addrs = 8.XX.XX.137     # 指定隧道 址,即IPsec地址2。
      dpd_delay = 10
      rekey_time = 84600             # 指定隧道2的SA生存周期,需与阿里云隧道2 IKE配置中的SA生存周期保持一致。
      over_time = 1800               # 
      proposals = aes-sha1-modp1024  # 指定隧道2的加密算法、认证算法、DH分组,需与阿里云隧道2 IKE配置中的加密算法、认证算法、DH分组保持一致,group2对应的是modp1024。
      encap = yes
      local {
         auth = psk                  # 本端认证方式选择PSK方式,即预共享密钥方式。
         id = 8.XX.XX.99             # 指定本端ID,需与阿里云隧道2的RemoteId保持一致。
      }
      remote {
         auth = psk                  # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
         id = 8.XX.XX.137            # 指定对端ID,需与阿里云隧道2的LocalId保持一致。
      }
      children {
         vco_child2 {
            local_ts  = 0.0.0.0/0    # 阿里云目的路由模式对应的感兴趣流是0.0.0.0/0
            remote_ts = 0.0.0.0/0    # 阿里云目的路由模式对应的感兴趣流是0.0.0.0/0
            mode = tunnel 
            rekey_time = 85500
            life_time = 86400        # 指定隧道2的SA生存周期,需与阿里云隧道1 IPsec配置中的SA生存周期保持一致。
            dpd_action = restart
            start_action = start
            close_action = start
            esp_proposals = aes-sha1-modp1024     # 指定隧道2的加密算法、认证算法、DH分组,需与阿里云隧道2 IPsec配置中的加密算法、认证算法、DH分组保持一致,group2对应的是modp1024。
            if_id_out = 43           # 指定隧道2的出接口和入接口为隧道2 XFRM虚拟网络接口。
            if_id_in = 43
            updown = /root/connect_2.sh           # 根据隧道2的UP和DOWN状态执行/root/connect_2.sh脚本,以配置路由。
         }
      }
   }
}
secrets {
   ike-vco1 {
      secret = 123456****            # 指定隧道1的预共享密钥,需与阿里云隧道1的预共享密钥保持一致。
   }
   ike-vco2 {
      secret = 123456****            # 指定隧道2的预共享密钥,需与阿里云隧道2的预共享密钥保持一致。
   }
}
按下Esc键,退出编辑模式,然后输入:wq保存配置。
根据以下信息创建脚本以配置路由,控制从本地数据中心去往阿里云VPC(10.0.0.0/16)的流量传输。
执行以下命令编辑/root/connect_1.sh脚本。
sudo vi /root/connect_1.sh

在strongSwan网关上配置到本地IDC客户端的路由,需要经过以下几个步骤:
安装和配置strongSwan
安装strongSwan:使用包管理器安装strongSwan。例如,在基于Debian的系统上可以使用命令sudo apt-get install strongswan,在基于Red Hat的系统上可以使用命令sudo yum install strongswan。
配置ipsec.conf:编辑/etc/strongswan/ipsec.conf文件,添加或修改以下内容:
plaintext
复制代码
config setup
    uniqueids=never
conn %default
    authby=psk                  #使用预共享密钥认证方式
    type=tunnel
conn tomyidc
    keyexchange=ikev1           #IPsec连接使用的IKE协议的版本
    left=      #本地网关设备的公网IP地址
    leftsubnet=/ #本地IDC待和VPC互通的私网网段
    leftid=     #本地网关设备的标识
    right=      #VPN网关的公网IP地址
    rightsubnet=/ #VPC待和本地IDC互通的私网网段
    rightid=     #VPN网关的标识
    auto=route
    ike=aes-sha1-modp1024       #IPsec连接中IKE协议的加密算法-认证算法-DH分组
    ikelifetime=86400s          #IKE协议的SA生命周期
    esp=aes-sha1-modp1024       #IPsec连接中IPsec协议的加密算法-认证算法-DH分组
    lifetime=86400s             #IPsec协议的SA生命周期
    type=tunnel
配置ipsec.secrets:编辑/etc/strongswan/ipsec.secrets文件,添加或修改以下内容:
plaintext
复制代码
: PSK
启用IP转发:执行以下命令打开IP转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
配置静态路由
添加静态路由:在strongSwan服务器上,使用ip route add命令添加静态路由。例如,如果本地IDC的网络是10.34.0.0/24,网关是192.168.100.1,您可以执行:
ip route add 10.34.0.0/24 via 192.168.100.1
重启网络服务
重启strongSwan服务:执行以下命令重启strongSwan服务,使配置生效:
systemctl restart strongswan
重启网络服务(可选):有时候,添加路由后需要重启网络服务以应用更改。
总的来说,通过以上步骤,可以在strongSwan网关上成功配置到本地IDC客户端的路由。需要注意的是,具体的配置可能会根据实际环境和需求有所不同,因此在实际操作中需要根据实际情况进行调整。

1、执行以下命令打开ipsec.conf配置文件。
vi /etc/strongswan/ipsec.conf
2、请参见以下配置,更改ipsec.conf配置文件。
ipsec.conf - strongSwan IPsec configuration file
basic configuration
 config setup
     uniqueids=never
 conn %default
     authby=psk                  #使用预共享密钥认证方式
     type=tunnel
 conn tomyidc
     keyexchange=ikev1           #IPsec连接使用的IKE协议的版本
     left=59.XX.XX.70            #本地网关设备的公网IP地址
     leftsubnet=172.16.2.0/24    #本地IDC待和VPC互通的私网网段
     leftid=59.XX.XX.70          #本地网关设备的标识
     right=119.XX.XX.125         #VPN网关的公网IP地址
     rightsubnet=192.168.10.0/24 #VPC待和本地IDC互通的私网网段
     rightid=119.XX.XX.125       #VPN网关的标识
     auto=route
     ike=aes-sha1-modp1024       #IPsec连接中IKE协议的加密算法-认证算法-DH分组
     ikelifetime=86400s          #IKE协议的SA生命周期
     esp=aes-sha1-modp1024       #IPsec连接中IPsec协议的加密算法-认证算法-DH分组
     lifetime=86400s             #IPsec协议的SA生命周期
     type=tunnel
3、配置ipsec.secrets文件。
执行以下命令打开ipsec.secrets文件。
vi /etc/strongswan/ipsec.secrets
添加以下配置。
说明 以下两种配置方式,任选一种即可。
方式一:
59.XX.XX.70 119.XX.XX.125 : PSK ff123TT****   #ff123TT****为IPsec连接的预共享密钥,本地IDC侧和VPN网关侧的预共享密钥需保持一致。
方式二:
119.XX.XX.125 : PSK ff123TT****   #ff123TT****为IPsec连接的预共享密钥,本地IDC侧和VPN网关侧的预共享密钥需保持一致。
4、打开系统转发配置。
echo 1 > /proc/sys/net/ipv4/ip_forward
5、执行以下命令启动strongSwan服务。
systemctl enable strongswan
systemctl start strongswan
6、在您本地IDC侧,设置本地IDC客户端到strongSwan本地网关设备及strongSwan本地网关设备到本地IDC客户端的路由。
7、如果您使用strongSwan建立了3条(不包含3条)以上的IPsec连接,您需要修改/etc/strongswan/strongswan.d/charon.conf中的配置。
删除max_ikev1_exchanges = 3 命令前的注释符号,启用此命令,并修改命令中参数的值大于您建立的IPsec连接数。
例如:您使用strongSwan建立了4条IPsec连接,您可以修改该命令为max_ikev1_exchanges = 5 。
——参考链接。
使用IPsec-VPN实现本地数据中心IDC(Internet Data Center)和阿里云VPC之间的网络互通时,在阿里云侧完成VPN网关的配置后,您还需在本地数据中心的网关设备中添加VPN配置才能成功在本地数据中心和阿里云VPC之间建立IPsec-VPN连接。本文介绍如何使用strongSwan在本地网关设备中添加VPN配置。

参考文档https://help.aliyun.com/zh/vpn/sub-product-ipsec-vpn/user-guide/configure-strongswan
使用strongSwan作为网关来配置到本地IDC客户端的路由,您需要在strongSwan服务器上添加静态路由,以便通过IPsec隧道转发到本地IDC的流量。以下是一个基本步骤:
确定本地IDC的网络信息:了解本地IDC的IP地址范围和网关。
配置路由:在strongSwan服务器上,使用ip route add命令添加静态路由。例如,如果本地IDC的网络是10.34.0.0/24,网关是192.168.100.1,您可以执行:
设置IPsec策略:确保IPsec策略允许通过隧道转发到本地IDC的流量。
重启网络服务:有时候,添加路由后需要重启网络服务以应用更改:
在 strongSwan 网关上配置到本地 IDC 客户端的路由,通常涉及到配置 IPsec 或 IKEv2 隧道,并设置适当的路由规则。以下是一个基本的步骤指南,帮助你在 strongSwan 网关上配置到本地 IDC 客户端的路由。
如果你还没有安装 strongSwan,可以通过包管理器进行安装。例如,在基于 Debian 的系统上:
sudo apt-get update
sudo apt-get install strongswan
在基于 Red Hat 的系统上:
sudo yum install strongswan
strongSwan 的配置文件通常位于 /etc/strongswan/ipsec.conf 和 /etc/strongswan/ipsec.secrets。
ipsec.conf打开 /etc/strongswan/ipsec.conf 文件并添加或修改以下内容:
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=yes
conn my-connection
    left=<your-gateway-ip>
    leftid=@<your-gateway-id>
    right=<local-idc-client-ip>
    rightid=@<local-idc-client-id>
    type=tunnel
    authby=secret
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!
    keyingtries=%forever
    dpdaction=clear
    dpddelay=30s
    auto=start
<your-gateway-ip>:你的 strongSwan 网关的公网 IP 地址。<your-gateway-id>:你的 strongSwan 网关的标识符(通常是 FQDN 或 IP 地址)。<local-idc-client-ip>:本地 IDC 客户端的公网 IP 地址。<local-idc-client-id>:本地 IDC 客户端的标识符(通常是 FQDN 或 IP 地址)。ipsec.secrets打开 /etc/strongswan/ipsec.secrets 文件并添加预共享密钥(PSK):
: PSK "<your-pre-shared-key>"
<your-pre-shared-key>:你和本地 IDC 客户端之间约定的预共享密钥。你需要在 strongSwan 网关上配置静态路由,以便将流量转发到本地 IDC 客户端的内网地址。
打开 /etc/iproute2/rt_tables 文件,添加一个新的路由表(可选,但推荐):
100 my-tunnel
使用 ip rule 命令添加路由规则:
sudo ip rule add from <your-gateway-ip> table my-tunnel
sudo ip rule add to <your-gateway-ip> table my-tunnel
使用 ip route 命令添加路由条目:
sudo ip route add <local-idc-client-subnet> via <local-idc-client-ip> dev <tunnel-interface> table my-tunnel
<local-idc-client-subnet>:本地 IDC 客户端的内网子网。<local-idc-client-ip>:本地 IDC 客户端的公网 IP 地址。<tunnel-interface>:IPsec 隧道接口名称(例如 ipsec0)。保存所有配置文件后,重启 strongSwan 服务以应用更改:
sudo systemctl restart strongswan
你可以使用 ipsec status 命令来检查隧道状态:
sudo ipsec status
如果一切正常,你应该能看到隧道处于 ESTABLISHED 状态。
使用 ping 或 traceroute 命令测试从 strongSwan 网关到本地 IDC 客户端内网地址的连通性:
ping <local-idc-client-internal-ip>
<local-idc-client-internal-ip>:本地 IDC 客户端的内网 IP 地址。通过以上步骤,你应该能够在 strongSwan 网关上成功配置到本地 IDC 客户端的路由。如果有任何问题,请检查日志文件 /var/log/syslog 或 /var/log/strongswan.log 以获取更多信息。
system ctl enable strongswan system ctl start strongswan 在您本地IDC侧,设置本地IDC客户端到strongSwan本地网关设备及strongSwan本地网关设备到本地IDC客户端的路由。 如果您使用strongSwan建立了3条(不包含3条)以上的IPsec连接,您需要修改/etc/strongswan/strongswan.d/charon.conf中的配置。