26
2024
11
23:37:48

阿里云 对接 strongSwan配置示例

strongSwan配置示例


https://help.aliyun.com/zh/vpn/sub-product-ipsec-vpn/user-guide/configure-strongswan


本文介绍如何使用strongSwan作为本地网关,实现云上和云下的网络互通。

strongSwan是一个开源、基于IPsec的VPN解决方案,配置简单,可部署在主流的Linux发行版,快速地与阿里云建立IPsec-VPN连接。

说明

本文使用VPN网关实例默认的vpn/sub-product-ipsec-vpn/product-overview/what-is-ipsec-vpn#372146e363fyo" id="4c405da01fpe8" title="" style="box-sizing: border-box;padding: 0px;background: 0px 0px;color: rgb(19, 102, 236);outline: none">双隧道模式建立IPsec-VPN连接。如果您购买的VPN网关实例仅支持单隧道,请参见文末的单隧道如何配置?

场景示例

以下图场景为例,您可以在本地网关设备上部署strongSwan软件(下文简称为“strongSwan设备”),与阿里云建立双隧道模式的IPsec-VPN连接,实现云上云下网络互通。

image

IP地址规划

本地IDC侧

  • 私网网段:10.0.0.0/16

  • strongSwan设备

    • 网卡eth0: 10.0.0.1,NAT映射公网出口1:1.1.XX.XX

    • (可选)网卡eth1: 10.0.0.2,NAT映射公网出口2: 2.2.XX.XX

      说明

      非NAT场景,请参见“strongSwan设备网卡绑定了公网IP地址,如何配置?”。

      无论您的设备有1个公网出口(单出口),还是有2个公网出口(双出口),均可与阿里云建立双隧道模式的IPsec-VPN连接,本文会分别给出示例。

阿里云侧

  • VPC网段:172.16.0.0/16

    • 交换机1网段:172.16.1.0/24

    • 交换机2网段:172.16.2.0/24

  • VPN网关

    • IPsec地址1: 3.3.XX.XX

    • IPsec地址2: 4.4.XX.XX

      说明

      创建VPN网关实例后,系统会自动为VPN网关实例分配两个IPsec地址。

VPN参数配置规划

本文的2条隧道使用相同的示例值。注意每条隧道下,strongSwan设备侧和阿里云侧的配置要保持相同。

  • 预共享密钥:ChangeMe***

  • IKE配置

    • IKE版本:ikev2

    • 协商模式:main

    • 加密算法:aes

    • 认证算法:sha1

    • DH分组:group2

    • SA生存周期(秒):86400

  • IPsec配置:

    • 加密算法:aes

    • 认证算法:sha1

    • DH分组:group2

    • SA生存周期(秒):86400

阿里云侧的准备工作

配置strongSwan设备之前,请先根据场景示例中的规划,在阿里云侧完成创建VPN网关实例创建用户网关创建IPsec连接配置VPN网关路由的步骤。具体操作,请参见建立VPC到本地数据中心的连接(双隧道模式)。

根据strongSwan设备的公网出口数量,阿里云侧的配置有如下区别:

单出口双出口
  1. 用户网关:因为只有1个公网出口IP,只需创建1个用户网关。

  2. IPsec连接:

    1. 本端网段填写阿里云侧VPC的网段 172.16.0.0/16

    2. 对端网段填写本地IDC侧的私网网段 10.0.0.0/16

    3. 每条隧道的路由模式选择感兴趣流模式。

    4. 用户网关选择同1个。

开始配置strongSwan设备

说明

下文步骤以运行“CentOS Stream 9 64位操作系统”的strongSwan设备为例。其他操作系统,请参考strongSwan官方文档

1. 放通防火墙策略

放通strongSwan设备的ESP协议(IP协议号50)、UDP500端口、UDP4500端口。

 
iptables -I INPUT -p 50 -j ACCEPT iptables -I INPUT -p udp --dport 500 -j ACCEPT  iptables -I INPUT -p udp --dport 4500 -j ACCEPT

2开启流量转发功能

 
echo 1 > /proc/sys/net/ipv4/ip_forward
重要

上述命令为临时性命令,strongSwan设备重启后需重新配置该命令。您可以参见以下内容永久开启strongSwan设备的流量转发功能。

单击查看永久配置。

3安装strongSwan软件

 
dnf install epel-release -y dnf install strongswan-5.9.10 -y

4配置双隧道

单出口双出口

单出口基于strongSwan感兴趣流进行配置,直接可以实现双隧道主备切换功能。

  1. 备份原始strongSwan配置文件

     

    mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
  2. 新建strongSwan配置文件

     

    vi /etc/strongswan/swanctl/swanctl.conf
  3. 根据场景示例中的规划,添加并保存如下配置

     

    connections {    vco1 {                              # 添加IPsec-VPN隧道1的VPN配置       version = 2                      # 指定IKE版本,需与阿里云隧道1的IKE版本保持一致,2表示IKEv2。       local_addrs  = 10.0.0.1          # 本地网卡的ip地址       remote_addrs = 3.3.XX.XX         # 指定隧道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 = 1.1.XX.XX                # 本地公网出口IP,需与阿里云隧道1的RemoteId保持一致。       }       remote {          auth = psk                    # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。          id = 3.3.XX.XX                # 阿里云侧IPsec地址1,需与阿里云隧道1的LocalId保持一致。       }       children {          vco_child1 {             local_ts  = 10.0.0.0/16    # 本地侧感兴趣流,填写本地私网网段10.0.0.0/16。             remote_ts = 172.16.0.0/16  # 阿里云侧感兴趣流,填写VPC网段172.16.0.0/16。             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。          }       }    }   vco2 {                             # 添加IPsec-VPN隧道2的VPN配置       version = 2                    # 指定IKE版本,需与阿里云隧道2的IKE版本保持一致,2表示IKEv2。       local_addrs  = 10.0.0.1        # 本地网卡的ip地址       remote_addrs = 4.4.XX.XX       # 指定隧道 址,即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 = 1.1.XX.XX              # 本地公网出口IP,与阿里云隧道2的RemoteId保持一致。       }       remote {          auth = psk                  # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。          id = 4.4.XX.XX              # 阿里云侧IPsec地址2,需与阿里云隧道2的LocalId保持一致。       }       children {          vco_child2 {             local_ts  = 10.0.0.0/16      # 本地侧感兴趣流,填写本地私网网段10.0.0.0/16。             remote_ts = 172.16.0.0/16    # 阿里云侧感兴趣流,填写VPC网段172.16.0.0/16。             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。          }       }    } } secrets {    ike-vco1 {       secret = ChangeMe***            # 指定隧道1的预共享密钥,需与阿里云隧道1的预共享密钥保持一致。    }    ike-vco2 {       secret = ChangeMe***            # 指定隧道2的预共享密钥,需与阿里云隧道2的预共享密钥保持一致。    } }
  4. 重启strongSwan进程

     

    systemctl restart strongswan
  5. 查看隧道状态

     

    watch swanctl --list-sas

    image

    如图,strongSwan设备和VPN网关之间已经正常建立了IPsec-VPN连接。

5验证连通性和高可用性

  1. 验证strongSwan设备和VPC之间的连通性。

    在strongSwan设备ping阿里云VPC内的任意1台ECS,如果能Ping通,则证明连通正常。

     

    ping <VPC内1台ECS的地址>
  2. 验证IPsec-VPN连接的高可用性。

    1. 保持Ping通的情况下,中断IPsec-VPN连接下的主隧道。

      您可以通过修改IPsec连接主隧道的预共享密钥来中断主隧道,主隧道两端的预共享密钥不一致,则主隧道会中断。

    2. 中断主隧道后,您可以通过ping命令观察两侧的连通情况。您会发现ping流量在短暂中断后,又重新恢复通信。这表示在主隧道中断后,流量自动通过备隧道进行通信。

常见问题

BGP动态路由,使用strongSwan建立IPsec-VPN连接时是否支持?

不支持。

IKEv1版本,使用strongSwan建立IPsec-VPN连接时是否支持?

支持。

配置/etc/strongswan/swanctl/swanctl.conf文件时,指定version = 1即可。

如何指定感兴趣流?

配置/etc/strongswan/swanctl/swanctl.conf文件时,在以下配置中指定具体网段即可。请确保阿里云侧IPsec连接也配置了感兴趣流模式。

如果本地数据中心侧或阿里云侧需要指定多个网段,strongSwan设备和阿里云IPsec连接均需要使用IKEv2版本。

 
children {          vco_child1 {             local_ts  = 192.168.20.0/24,192.168.50.0/24    # 本地数据中心网段。             remote_ts = 10.0.0.0/16    # 阿里云VPC侧网段。          } }

strongSwan设备网卡绑定了公网IP地址,如何配置?

对于非NAT的场景,也就是strongSwan设备内部可见的地址为公网IP地址,仅需将/etc/strongswan/swanctl/swanctl.conf配置文件中每条隧道的local_addrs字段改为公网IP地址即可,其他配置不变。

 
connections {    vco1 {                                   local_addrs  = 1.1.XX.XX     # 指定为strongSwan设备网卡绑定的公网IP地址    } }

单隧道如何配置?

重要

如果您购买的VPN网关实例仅支持建立单隧道模式的IPsec-VPN连接,推荐您升级IPsec-VPN连接为双隧道模式,双隧道模式的IPsec-VPN连接支持可用区级别的容灾,有效提高了网络的高可用性。

单隧道配置示例

单击此处 查看单隧道配置示例

场景示例

以下图场景为例,您可以在本地网关设备上部署strongSwan软件(下文简称为“strongSwan设备”),与阿里云建立双隧道模式的IPsec-VPN连接,实现云上云下网络互通。

image

IP地址规划

本地IDC侧

阿里云侧

  • VPC网段:172.16.0.0/16

    • 交换机1网段:172.16.1.0/24

    • 交换机2网段:172.16.2.0/24

  • VPN网关

    • IPsec地址:3.3.XX.XX

      说明

      创建VPN网关实例后,系统会自动为VPN网关实例分配IPsec地址。

VPN参数配置规划

注意strongSwan设备侧和阿里云侧的配置要保持相同。

  • 预共享密钥:ChangeMe***

  • IKE配置

    • IKE版本:ikev2

    • 协商模式:main

    • 加密算法:aes

    • 认证算法:sha1

    • DH分组:group2

    • SA生存周期(秒):86400

  • IPsec配置:

    • 加密算法:aes

    • 认证算法:sha1

    • DH分组:group2

    • SA生存周期(秒):86400

阿里云侧的准备工作

配置strongSwan设备之前,请先根据场景示例中的规划,在阿里云侧完成创建VPN网关实例创建用户网关创建IPsec连接配置VPN网关路由的步骤。具体操作,请参见建立VPC到本地数据中心的连接(单隧道模式)

创建IPsec连接时,隧道的路由模式选择感兴趣流模式:

  • 本端网段填写阿里云侧VPC的网段 172.16.0.0/16

  • 对端网段填写本地IDC侧的私网网段 10.0.0.0/16

开始配置strongSwan设备

说明

下文步骤以运行“CentOS Stream 9 64位操作系统”的strongSwan设备为例。其他操作系统,请参考strongSwan的官方文档

1. 放通防火墙策略

放通strongSwan设备的ESP协议(IP协议号50)、UDP500端口、UDP4500端口。

 
iptables -I INPUT -p 50 -j ACCEPT iptables -I INPUT -p udp --dport 500 -j ACCEPT  iptables -I INPUT -p udp --dport 4500 -j ACCEPT

2开启流量转发功能

 
echo 1 > /proc/sys/net/ipv4/ip_forward
重要

上述命令为临时性命令,strongSwan设备重启后需重新配置该命令。您可以参见以下内容永久开启strongSwan设备的流量转发功能。

单击查看永久配置。

3安装strongSwan软件

 
dnf install epel-release -y dnf install strongswan-5.9.10 -y

4配置隧道

基于strongSwan感兴趣流进行配置。

  1. 备份原始strongSwan配置文件

     

    mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
  2. 新建strongSwan配置文件

     

    vi /etc/strongswan/swanctl/swanctl.conf
  3. 根据场景示例中的规划,添加并保存如下配置

     

    connections {    vco1 {                            # 添加IPsec-VPN隧道1的VPN配置       version = 2                    # 指定IKE版本,需与阿里云隧道1的IKE版本保持一致,2表示IKEv2。       local_addrs  = 10.0.0.1        # 本地网卡的ip地址       remote_addrs = 3.3.XX.XX       # 指定隧道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 = 1.1.XX.XX              # 公网出口IP,与阿里云隧道1的RemoteId保持一致。       }       remote {          auth = psk                  # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。          id = 3.3.XX.XX              # 阿里云侧IPsec地址,需与阿里云隧道1的LocalId保持一致。       }       children {          vco_child1 {             local_ts  = 10.0.0.0/16    # 阿里云目的路由模式对应的感兴趣流是0.0.0.0/0。             remote_ts = 172.16.0.0/16    # 阿里云目的路由模式对应的感兴趣流是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。          }       }    } } secrets {    ike-vco1 {       secret = ChangeMe***            # 指定隧道1的预共享密钥,需与阿里云隧道1的预共享密钥保持一致。    } }
  4. 重启strongSwan进程

     

    systemctl restart strongswan
  5. 查看隧道状态

     

    watch swanctl --list-sas

    image

    如图,strongSwan设备和VPN网关之间已经正常建立了IPsec-VPN连接。

5验证

验证strongSwan设备和VPC之间的连通性:

在strongSwan设备ping阿里云VPC内的任意1台ECS,如果能Ping通,则证明连通正常。

 
ping <VPC内1台ECS的地址>




上一篇:华为防火墙配置下一篇:思科防火墙配置示例




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/8602.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: