借助阿里云在亚洲加速迈向成功
一站式安全合规咨询服务
MLPS 2.0 一站式合规解决方案
依托我们的网络进军中国市场
提升面向互联网应用的性能和安全性
保障您的中国业务安全无忧
通过强大的数据安全框架保护您的数据资产
申请 ICP 备案的流程解读和咨询服务
面向大数据建设、管理及应用的全域解决方案
企业内大数据建设、管理和应用的一站式解决方案
将您的采购和销售置于同一企业级全渠道数字平台上
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
快速搭建在线教育平台
提供域名注册、分析和保护服务
云原生 Kubernetes 容器化应用运行环境
以 Kubernetes 为使用界面的容器服务产品,提供符合容器规范的算力资源
安全的镜像托管服务,支持全生命周期管理
多集群环境下微服务应用流量统一管理
提供任意基础设施上容器集群的统一管控,助您轻松管控分布式云场景
高弹性、高可靠的企业级无服务器 Kubernetes 容器产品
敏捷安全的 Serverless 容器运行服务
为虚拟机和容器提供高可靠性、高性能、低时延的块存储服务
一款海量、安全、低成本、高可靠的云存储服务
可靠、弹性、高性能、多共享的文件存储服务
全托管、可扩展的并行文件系统服务。
全托管的 NoSQL 结构化数据实时存储服务
可抵扣多种存储产品的容量包,兼具灵活性和长期成本优化
让您的应用跨不同可用区资源自动分配访问量
随时绑定和解绑 VPC ECS
云网络公网、跨域流量统一计费
高性价比,可抵扣按流量计费的流量费用
创建云上隔离的网络,在专有环境中运行资源
在 VPC 环境下构建公网流量的出入口
具备网络状态可视化、故障智能诊断能力的自助式网络运维服务。
安全便捷的云上服务专属连接
基于阿里云专有网络的私有 DNS 解析服务
保障在线业务不受大流量 DDoS 攻击影响
系统运维和安全审计管控平台
业务上云的第一个网络安全基础设施
集零信任内网访问、办公数据保护、终端管理等多功能于一体的办公安全管控平台
提供全面统一的云原生防护平台(CNAPP)能力
防御常见 Web 攻击,缓解 HTTP 泛洪攻击
实现全站 HTTPS,呈现可信的 WEB 访问
为云上应用提供符合行业标准和密码算法等级的数据加解密、签名验签和数据认证能力
一款发现、分类和保护敏感数据的安全服务
创建、控制和管理您的加密密钥
快速提高应用高可用能力服务
围绕应用和微服务的 PaaS 平台
兼容主流开源微服务生态的一站式平台
多集群环境下微服务应用流量统一管理
Super MySQL 和 PostgreSQL,高度兼容 Oracle 语法
全托管 MySQL、PostgreSQL、SQL Server、MariaDB
兼容 Redis® 的缓存和KV数据库
兼容Apache Cassandra、Apache HBase、Elasticsearch、OpenTSDB 等多种开源接口
文档型数据库,支持副本集和分片架构
100%兼容 Apache HBase 并深度扩展,稳定、易用、低成本的NoSQL数据库。
低成本、高可用、可弹性伸缩的在线时序数据库服务
专为搜索和分析而设计,成本效益达到开源的两倍,采用最新的企业级AI搜索和AI助手功能。
一款兼容PostgreSQL协议的实时交互式分析产品
一种快速、完全托管的 TB/PB 级数据仓库
基于 Flink 为大数据行业提供解决方案
基于Qwen和其他热门模型的一站式生成式AI平台,可构建了解您业务的智能应用程
一站式机器学习平台,满足数据挖掘分析需求
高性能向量检索服务,提供低代码API和高成本效益
帮助您的应用快速构建高质量的个性化推荐服务能力
提供定制化的高品质机器翻译服务
全面的AI计算平台,满足大模型训练等高性能AI计算的算力和性能需求
具备智能会话能力的会话机器人
基于机器学习的智能图像搜索产品
基于阿里云深度学习技术,为用户提供图像分割、视频分割、文字识别等离线SDK能力,支持Android、iOS不同的适用终端。
语音识别、语音合成服务以及自学习平台
一站式智能搜索业务开发平台
助力金融企业快速搭建超低时延、高质量、稳定的行情数据服务
帮助企业快速测算和分析企业的碳排放和产品碳足迹
企业工作流程自动化,全面提高效率
金融级云原生分布式架构的一站式高可用应用研发、运维平台
eKYC 数字远程在线解决方案
可智能检测、大数据驱动的综合性反洗钱 (AML) 解决方案
阿里云APM类监控产品
实时云监控服务,确保应用及服务器平稳运行
为系统运维人员管理云基础架构提供全方位服务的云上自动化运维平台
面向您的云资源的风险检测服务
提升分布式环境下的诊断效率
日志类数据一站式服务,无需开发就能部署
ECS 预留实例
让弹性计算产品的成本和灵活性达到最佳平衡的付费方式。云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势自带IP上云
自带公网 IP 地址上云全球网络互联
端到端的软件定义网络解决方案,可推动跨国企业的业务发展全球应用加速
提升面向互联网应用的性能和安全性全球互联网接入
将IDC网关迁移到云端云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势金融科技云数据库解决方案
利用专为金融科技而设的云原生数据库解决方案游戏行业云数据库解决方案
提供多种成熟架构,解决所有数据问题Oracle 数据库迁移
将 Oracle 数据库顺利迁移到云原生数据库数据库迁移
加速迁移您的数据到阿里云阿里云上的数据湖
实时存储、管理和分析各种规模和类型的数据数码信贷
利用大数据和 AI 降低信贷和黑灰产风险面向企业数据技术的大数据咨询服务
帮助企业实现数据现代化并规划其数字化未来人工智能对话服务
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人EasyDispatch 现场服务管理
为现场服务调度提供实时AI决策支持在线教育
快速搭建在线教育平台窄带高清 (HD) 转码
带宽成本降低高达 30%广电级大型赛事直播
为全球观众实时直播大型赛事,视频播放流畅不卡顿直播电商
快速轻松地搭建一站式直播购物平台用于供应链规划的Alibaba Dchain
构建和管理敏捷、智能且经济高效的供应链云胸牌
针对赛事运营的创新型凭证数字服务数字门店中的云 POS 解决方案
将所有操作整合到一个云 POS 系统中元宇宙
元宇宙是下一代互联网人工智能 (AI) 加速
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速DevOps
快速、安全地最大限度提高您的DevOps优势数据迁移解决方案
加速迁移您的数据到阿里云企业 IT 治理
在阿里云上构建高效可控的云环境基于日志管理的AIOps
登录到带有智能化日志管理解决方案的 AIOps 环境备份与存档
数据备份、数据存档和灾难恢复用阿里云金融服务加快创新
在云端开展业务,提升客户满意度
为全球资本市场提供安全、准确和数字化的客户体验
利用专为金融科技而设的云原生数据库解决方案
利用大数据和 AI 降低信贷和黑灰产风险
建立快速、安全的全球外汇交易平台
新零售时代下,实现传统零售业转型
利用云服务处理流量波动问题,扩展业务运营、降低成本
快速轻松地搭建一站式直播购物平台
面向大数据建设、管理及应用的全域解决方案
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
以数字化媒体旅程为当今的媒体市场准备就绪您的内容
带宽成本降低高达 30%
快速轻松地搭建一站式直播购物平台
为全球观众实时直播大型赛事,视频播放流畅不卡顿
使用阿里云弹性高性能计算 E-HPC 将本地渲染农场连接到云端
构建发现服务,帮助客户找到最合适的内容
保护您的媒体存档安全
通过统一的数据驱动平台提供一致的全生命周期客户服务
在钉钉上打造一个多功能的电信和数字生活平台
在线存储、共享和管理照片与文件
提供全渠道的无缝客户体验
面向中小型企业,为独立软件供应商提供可靠的IT服务
打造最快途径,助力您的新云业务扬帆起航
先进的SD-WAN平台,可实现WAN连接、实时优化并降低WAN成本
通过自动化和流程标准化实现快速事件响应
针对关键网络安全威胁提供集中可见性并进行智能安全分析
提供大容量、可靠且高度安全的企业文件传输
用智能技术数字化体育赛事
基于人工智能的低成本体育广播服务
专业的广播转码及信号分配管理服务
基于云的音视频内容引入、编辑和分发服务
在虚拟场馆中模拟关键运营任务
针对赛事运营的创新型凭证数字服务
智能和交互式赛事指南
轻松管理云端背包单元的绑定直播流
通过数据加强您的营销工作
元宇宙是下一代互联网
利用生成式 AI 加速创新,创造新的业务佳绩
阿里云高性能开源大模型
借助AI轻松解锁和提炼文档中的知识
基于生成式AI的一体化平台,助您在同一个工作空间内高效创作多样化内容
通过AI驱动的语音转文本服务获取洞察
探索阿里云人工智能和数据智能的所有功能、新优惠和最新产品
该体验中心提供广泛的用例和产品帮助文档,助您开始使用阿里云 AI 产品和浏览您的业务数据。
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速
元宇宙是下一代互联网
构建发现服务,帮助客户找到最合适的内容
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
加速迁移您的数据到阿里云
在阿里云上建立一个安全且易扩容的环境,助力高效率且高成本效益的上云旅程
迁移到完全托管的云数据库
将 Oracle 数据库顺利迁移到云原生数据库
自带公网 IP 地址上云
利用阿里云强大的安全工具集,保障业务安全、应用程序安全、数据安全、基础设施安全和帐户安全
保护、备份和还原您的云端数据资产
MLPS 2.0 一站式合规解决方案
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
实现对 CloudOps、DevOps、SecOps、AIOps 和 FinOps 的高效、安全和透明的管理
构建您的原生云环境并高效管理集群
快速、安全地最大限度提高您的DevOps优势
实施细粒度安全控制
提供运维效率和总体系统安全性
实时分析您的云消耗并实现节约
实时存储、管理和分析各种规模和类型的数据
登录到带有智能化日志管理解决方案的 AIOps 环境
帮助企业实现数据现代化并规划其数字化未来
帮助零售商快速规划数字化之旅
将全球知名的 CRM 平台引入中国
在线存储、共享和管理照片与文件
构建、部署和管理高可用、高可靠、高弹性的应用程序
快速、安全地最大限度提高您的DevOps优势
将您的采购和销售置于同一企业级全渠道数字平台上
企业内大数据建设、管理和应用的一站式解决方案
帮助企业简化 IT 架构、实现商业价值、加速数字化转型的步伐
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
快速搜集、处理、分析联网设备产生的数据
0.0.201
本文介绍如何使用strongSwan作为本地网关,实现云上和云下的网络互通。
strongSwan是一个开源、基于IPsec的VPN解决方案,配置简单,可部署在主流的Linux发行版,快速地与阿里云建立IPsec-VPN连接。
以下图场景为例,您可以在本地网关设备上部署strongSwan软件(下文简称为“strongSwan设备”),与阿里云建立双隧道模式的IPsec-VPN连接,实现云上云下网络互通。
私网网段:172.16.0.0/16
strongSwan设备
网卡eth0: 172.16.20.80,NAT映射公网出口1:120.XX.XX.202
(可选)网卡eth1: 172.16.21.248,NAT映射公网出口2: 47.XX.XX.127
非NAT场景,请参见“strongSwan设备网卡绑定了公网IP地址,如何配置?”。
无论您的设备有1个公网出口(单出口),还是有2个公网出口(双出口),均可与阿里云建立双隧道模式的IPsec-VPN连接,本文会分别给出示例。
VPC网段:192.168.0.0/16
交换机1网段:192.168.10.0/24
交换机2网段:192.168.10.0/24
交换机3网段:192.168.40.0/24
交换机4网段:192.168.50.0/24
交换机5网段:192.168.55.0/24
VPN网关
IPsec地址1: 47.XX.XX.151
IPsec地址2: 47.XX.XX.87
创建VPN网关实例后,系统会自动为VPN网关实例分配两个IPsec地址。
本文将分别描述IPsec-VPN连接使用静态路由方式和BGP动态路由方式下如何配置strongSwan设备。如果您不需要使用BGP动态路由方式,可以忽略本部分。以下为本文的BGP网段规划。
资源 | 隧道 | BGP隧道网段 | BGP IP地址 | BGP AS号(本端自治系统号) |
VPN网关实例 | 隧道1 | 169.254.10.0/30 说明 一个VPN网关实例下,每个隧道的网段需保持唯一。 | 169.254.10.1 | 65535 |
隧道2 | 169.254.20.0/30 | 169.254.20.1 | ||
strongSwan设备 | 隧道1 | 169.254.10.0/30 | 169.254.10.2 | 65530 |
隧道2 | 169.254.20.0/30 | 169.254.20.2 |
本文2条隧道使用相同的示例值。注意每条隧道下,strongSwan设备侧和阿里云侧的配置要保持相同。
预共享密钥:ChangeMe***
IKE配置
IKE版本:ikev2
协商模式:main
加密算法:aes
认证算法:sha1
DH分组:group2
SA生存周期(秒):86400
IPsec配置:
加密算法:aes
认证算法:sha1
DH分组:group2
SA生存周期(秒):86400
根据您计划使用的公网出口数量和路由方式,参见以下内容,完成阿里云侧的配置:
请参见建立VPC到本地数据中心的连接(双隧道模式和BGP路由),完成创建VPN网关实例、创建用户网关、创建IPsec连接、开启BGP路由自动传播功能的步骤。
strongSwan设备拥有2个公网出口IP,需要创建2个用户网关。
创建IPsec连接时,隧道1对应公网出口1,隧道2对应公网出口2。路由模式本场景以目的路由模式为例。
请参见建立VPC到本地数据中心的连接(双隧道模式),完成创建VPN网关实例、创建用户网关、创建IPsec连接、配置VPN网关路由的步骤。
strongSwan设备拥有2个公网出口IP,需要创建2个用户网关。
创建IPsec连接时,隧道1对应公网出口1,隧道2对应公网出口2。路由模式本场景以目的路由模式为例。
请参见建立VPC到本地数据中心的连接(双隧道模式和BGP路由),完成创建VPN网关实例、创建用户网关、创建IPsec连接、开启BGP路由自动传播功能的步骤。
strongSwan设备仅有1个公网出口IP,因此仅需创建1个用户网关。
创建IPsec连接时,两条隧道关联同1个用户网关。路由模式本场景以目的路由模式为例。
请参见建立VPC到本地数据中心的连接(双隧道模式),完成创建VPN网关实例、创建用户网关、创建IPsec连接、配置VPN网关路由的步骤。其中:
strongSwan设备仅有1个公网出口IP,因此仅需创建1个用户网关。
创建IPsec连接时,需使用感兴趣流模式,配置如下。两条隧道关联同1个用户网关。
本端网段输入阿里云侧VPC的网段192.168.0.0/16
对端网段输入本地IDC侧的私网网段172.16.0.0/16
对于IPsec连接绑定转发路由器的场景,更推荐您使用BGP动态路由协议,不推荐使用该方式。
下文步骤以运行“CentOS Stream 9 64位操作系统”的strongSwan设备为例。其他操作系统,请参考strongSwan官方文档。
在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
echo 1 > /proc/sys/net/ipv4/ip_forward
上述命令为临时性命令,strongSwan设备重启后需重新配置该命令。您可以参见以下内容永久开启strongSwan设备的流量转发功能。
单击查看永久配置。
打开/etc/sysctl.conf文件。
vi /etc/sysctl.conf
在文件中添加如下配置。
net.ipv4.ip_forward = 1
使配置生效。
sudo sysctl -p
dnf install epel-release -y
dnf install strongswan-5.9.10 -y
双出口基于XFRM虚拟网络接口实现,使用XFRM虚拟网络接口需要安装strongSwan 5.8.0或以上版本,同时要求Linux内核版本为4.19及以上、iproute2版本为5.1.0及以上,且内核支持xfrm模块(lsmod | grep xfrm
无显示则不支持)。更多信息,请参见XFRM Interfaces on Linux。
添加去往阿里云侧2个IPsec地址的路由,使IPsec地址1通过eth0出口访问,IPsec地址2通过eth1出口访问。
ip route add 47.XX.XX.151 via 172.16.20.253 dev eth0 #172.16.20.253是eth0私网网关地址
ip route add 47.XX.XX.87 via 172.16.21.253 dev eth1 #172.16.20.253是eth1私网网关地址
确保下面2个IPsec地址能ping通。
ping 47.XX.XX.151
ping 47.XX.XX.87
创建2个虚拟网络接口,用于建立IPsec-VPN隧道。
ip link add ipsec0 type xfrm dev eth0 if_id 42 # 创建隧道1 XFRM虚拟网络接口,接口ID为42,底层接口为公网接口eth0。
ip link add ipsec1 type xfrm dev eth1 if_id 43 # 创建隧道2 XFRM虚拟网络接口,接口ID为43,底层接口为公网接口eth1。
ip link set ipsec0 up # 启动隧道1 XFRM虚拟网络接口。
ip link set ipsec1 up # 启动隧道2 XFRM虚拟网络接口。
创建虚拟网络接口的配置为临时性配置,strongSwan设备重启后,需要重新添加该配置,并执行sudo systemctl restart strongswan;swanctl --load-all
命令(该命令需要root权限)。您可以参见以下内容为strongSwan设备添加开机自动启动脚本,strongSwan设备重启后会自动重新添加虚拟网络接口。
单击查看开机自动启动脚本。
执行以下命令创建一个脚本。
vi xfrm.sh
添加并保存如下配置。
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 eth1 if_id 43 # 创建隧道2 XFRM虚拟网络接口,接口ID为43,底层接口为公网接口eth1。
sudo ip link set ipsec0 up # 启动隧道1 XFRM虚拟网络接口。
sudo ip link set ipsec1 up # 启动隧道2 XFRM虚拟网络接口。
执行以下命令查看脚本绝对路径。
sudo find / -name xfrm.sh
执行sudo vi /etc/rc.d/rc.local
命令,将脚本绝对路径添加进/etc/rc.d/rc.local
文件。
按下i
键,进入编辑模式;将脚本绝对路径/root/xfrm.sh
添加进/etc/rc.d/rc.local
文件;按下Esc
键,退出编辑模式,然后输入:wq
保存配置。
为rc.local文件和xfrm.sh脚本添加可执行权限。
sudo chmod +x /etc/rc.d/rc.local
sudo chmod +x /root/xfrm.sh
修改strongSwan配置文件。
备份原始strongSwan配置文件。
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
新建strongSwan配置文件。
vi /etc/strongswan/swanctl/swanctl.conf
根据场景示例中IPsec参数规划,添加并保存如下配置。
如果您计划使用静态路由方式,需要在配置文件中启用以下两条命令updown = /root/connect_1.sh
和updown = /root/connect_2.sh
。
connections {
vco1 { # 添加IPsec-VPN隧道1的VPN配置
version = 2 # 指定IKE版本,需与阿里云隧道1的IKE版本保持一致,2表示IKEv2。
local_addrs = 172.16.20.80 # 第1个本地网卡的ip地址
remote_addrs = 47.XX.XX.151 # 指定隧道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 = 120.XX.XX.202 # 第1个本地公网出口IP,需与阿里云隧道1的RemoteId保持一致。
}
remote {
auth = psk # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
id = 47.XX.XX.151 # 阿里云侧IPsec地址1,需与阿里云隧道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 = 172.16.21.248 # 第2个本地网卡的ip地址。
remote_addrs = 47.XX.XX.127 # 指定隧道2对端的IP地址为阿里云隧道2的网关IP地址,即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 = 47.XX.XX.87 # 第2个本地公网出口IP,,需与阿里云隧道2的RemoteId保持一致。
}
remote {
auth = psk # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
id = 47.XX.XX.127 # 阿里云侧IPsec地址2,需与阿里云隧道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 = ChangeMe*** # 指定隧道1的预共享密钥,需与阿里云隧道1的预共享密钥保持一致。
}
ike-vco2 {
secret = ChangeMe*** # 指定隧道2的预共享密钥,需与阿里云隧道2的预共享密钥保持一致。
}
}
重启strongSwan进程,查看隧道状态。
sudo systemctl restart strongswan
watch swanctl --list-sas
如下图所示,strongSwan设备和VPN网关之间已经成功建立IPsec-VPN连接,但网络还无法正常互通,您还需要配置路由。
配置路由。
根据您计划使用的路由方式查看对应内容。
strongSwan设备重启后,需要重新添加BGP配置。
执行以下命令配置BGP IP地址。
ip address add 169.254.10.2/30 dev ipsec0
ip address add 169.254.20.2/30 dev ipsec1
安装frr软件。
yum install -y frr
执行vi /etc/frr/daemons
命令,编辑配置文件,开启BGP动态路由功能。
按下i
键,进入编辑模式;修改bgpd参数的值为yes
,开启BGP动态路由功能;按下Esc
键,退出编辑模式,然后输入:wq
保存配置。
运行frr功能。
systemctl enable frr
systemctl restart frr
添加BGP配置。
执行以下命令进入配置界面。
vtysh
执行以下命令进入配置模式。
config terminal
添加BGP配置。
执行命令时,将以下地址替换为您实际使用的地址。
“169.254.10.1”、“169.254.20.1”替换为您实际使用的阿里云侧隧道BGP IP地址。
“65535”替换为您实际场景中VPN网关实例的BGP AS号。
“172.16.20.0/24”、“172.16.21.0/24”替换为您实际场景中本地IDC的网段。
route-map allow-all permit 1
exit
router bgp 65530
bgp router-id 169.254.10.2
neighbor 169.254.10.1 remote-as 65535
neighbor 169.254.10.1 timers 10 30
neighbor 169.254.20.1 remote-as 65535
neighbor 169.254.20.1 timers 10 30
address-family ipv4 unicast
network 172.16.20.0/24
network 172.16.21.0/24
neighbor 169.254.10.1 soft-reconfiguration inbound
neighbor 169.254.10.1 route-map allow-all in
neighbor 169.254.10.1 route-map allow-all out
neighbor 169.254.20.1 soft-reconfiguration inbound
neighbor 169.254.20.1 route-map allow-all in
neighbor 169.254.20.1 route-map allow-all out
maximum-paths 32
exit-address-family
exit
执行exit
命令退出配置模式,然后执行show ip bgp
命令查看BGP路由条目。
可以看到strongswan设备已经成功学习到云上VPC的路由,本地IDC与云上VPC之间已经可以正常互通。
创建2个脚本,供strongSwan调用并配置路由,从而控制流量传输。
新建并编辑/root/connect_1.sh脚本。
vi /root/connect_1.sh
添加并保存如下内容。
#!/usr/bin/env bash
if [ x"$PLUTO_VERB" == "xup-client" ]; then
echo "ip route add 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec0 metric 100
elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
echo "ip route del 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec0 metric 100
fi
脚本功能:如果隧道1的状态是UP,则添加路由使本地数据中心去往阿里云VPC(192.168.0.0/16)的流量通过隧道1 XFRM虚拟网络接口传输,同时指定该路由的metric值为100,使该路由的优先级高于指向隧道2 XFRM虚拟网络接口的路由。如果隧道1的状态是DOWN,则撤销该路由。
新建并编辑/root/connect_2.sh脚本。
vi /root/connect_2.sh
添加并保存如下内容。
#!/usr/bin/env bash
if [ x"$PLUTO_VERB" == "xup-client" ]; then
echo "ip route add 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec1 metric 101
elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
echo "ip route del 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec1 metric 101
fi
脚本功能:如果隧道2的状态是UP,则添加路由使本地数据中心去往阿里云VPC(192.168.0.0/16)的流量通过隧道2 XFRM虚拟网络接口传输,同时指定该路由的metric值为101,使该路由的优先级低于指向隧道1 XFRM虚拟网络接口的路由。如果隧道2的状态是DOWN,则撤销该路由。
为2个脚本赋予可执行权限。
sudo chmod +x /root/connect_1.sh
sudo chmod +x /root/connect_2.sh
重启strongSwan进程。
sudo systemctl restart strongswan
执行以下命令查看路由是否配置成功。
route -n
BGP动态路由基于XFRM虚拟网络接口实现,使用XFRM虚拟网络接口需要安装strongSwan 5.8.0或以上版本,同时要求Linux内核版本为4.19及以上、iproute2版本为5.1.0及以上,且内核支持XFRM模块(lsmod | grep xfrm
无显示则不支持)。更多信息,请参见XFRM Interfaces on Linux。
创建2个虚拟网络接口,用于建立IPsec-VPN隧道。
ip link add ipsec0 type xfrm dev eth0 if_id 42 # 创建隧道1 XFRM虚拟网络接口,接口ID为42,底层接口为公网接口eth0。
ip link add ipsec1 type xfrm dev eth0 if_id 43 # 创建隧道2 XFRM虚拟网络接口,接口ID为43,底层接口为公网接口eth0。
ip link set ipsec0 up # 启动隧道1 XFRM虚拟网络接口。
ip link set ipsec1 up # 启动隧道2 XFRM虚拟网络接口。
创建虚拟网络接口的配置为临时性配置,strongSwan设备重启后,需要重新添加该配置,并执行sudo systemctl restart strongswan;swanctl --load-all
命令(该命令需要root权限)。您可以参见以下内容为strongSwan设备添加开机自动启动脚本,strongSwan设备重启后会自动重新添加虚拟网络接口。
单击查看开机自动启动脚本。
执行以下命令创建一个脚本。
vi xfrm.sh
添加并保存如下配置。
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虚拟网络接口。
执行以下命令查看脚本绝对路径。
sudo find / -name xfrm.sh
执行sudo vi /etc/rc.d/rc.local
命令,将脚本绝对路径添加进/etc/rc.d/rc.local
文件。
按下i
键,进入编辑模式;将脚本绝对路径/root/xfrm.sh
添加进/etc/rc.d/rc.local
文件;按下Esc
键,退出编辑模式,然后输入:wq
保存配置。
为rc.local文件和xfrm.sh脚本添加可执行权限。
sudo chmod +x /etc/rc.d/rc.local
sudo chmod +x /root/xfrm.sh
修改strongSwan配置文件。
备份原始strongSwan配置文件。
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
新建strongSwan配置文件。
vi /etc/strongswan/swanctl/swanctl.conf
根据场景示例中IPsec参数规划,添加并保存如下配置。
connections {
vco1 { # 添加IPsec-VPN隧道1的VPN配置。
version = 2 # 指定IKE版本,需与阿里云隧道1的IKE版本保持一致,2表示IKEv2。
local_addrs = 172.16.20.80 # eth0接口私网IP地址。
remote_addrs = 47.XX.XX.151 # 指定隧道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 = 120.XX.XX.202 # eth0公网出口IP,需与阿里云隧道1的RemoteId保持一致。
}
remote {
auth = psk # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
id = 47.XX.XX.151 # 阿里云侧IPsec地址1,需与阿里云隧道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
}
}
}
vco2 { # 添加IPsec-VPN隧道2的VPN配置
version = 2 # 指定IKE版本,需与阿里云隧道2的IKE版本保持一致,2表示IKEv2。
local_addrs = 172.16.20.80 # eth0接口的私网IP地址。
remote_addrs = 47.XX.XX.87 # 指定隧道2对端的IP地址为阿里云隧道2的网关IP地址,即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 = 120.XX.XX.202 # eth0公网出口IP,需与阿里云隧道2的RemoteId保持一致。
}
remote {
auth = psk # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
id = 47.XX.XX.87 # 阿里云侧IPsec地址2,需与阿里云隧道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
}
}
}
}
secrets {
ike-vco1 {
secret = ChangeMe*** # 指定隧道1的预共享密钥,需与阿里云隧道1的预共享密钥保持一致。
}
ike-vco2 {
secret = ChangeMe*** # 指定隧道2的预共享密钥,需与阿里云隧道2的预共享密钥保持一致。
}
}
重启strongSwan进程,查看隧道状态。
sudo systemctl restart strongswan
watch swanctl --list-sas
如下图所示,strongSwan设备和VPN网关之间已经成功建立IPsec-VPN连接,但网络还无法正常互通,您还需要配置路由。
配置BGP动态路由。
strongSwan设备重启后,需要重新添加BGP配置。
执行以下命令配置BGP IP地址。
ip address add 169.254.10.2/30 dev ipsec0
ip address add 169.254.20.2/30 dev ipsec1
安装frr软件。
yum install -y frr
执行vi /etc/frr/daemons
命令,编辑配置文件,开启BGP动态路由功能。
按下i
键,进入编辑模式;修改bgpd参数的值为yes
,开启BGP动态路由功能;按下Esc
键,退出编辑模式,然后输入:wq
保存配置。
运行frr功能。
systemctl enable frr
systemctl restart frr
添加BGP配置。
执行以下命令进入配置界面。
vtysh
执行以下命令进入配置模式。
config terminal
添加BGP配置。
执行命令时,将以下地址替换为您实际使用的地址。
“169.254.10.1”、“169.254.20.1”替换为您实际使用的阿里云侧隧道BGP IP地址。
“65535”替换为您实际场景中VPN网关实例的BGP AS号。
“172.16.20.0/24”、“172.16.21.0/24”替换为您实际场景中本地IDC的网段。
route-map allow-all permit 1
exit
router bgp 65530
bgp router-id 169.254.10.2
neighbor 169.254.10.1 remote-as 65535
neighbor 169.254.10.1 timers 10 30
neighbor 169.254.20.1 remote-as 65535
neighbor 169.254.20.1 timers 10 30
address-family ipv4 unicast
network 172.16.20.0/24
network 172.16.21.0/24
neighbor 169.254.10.1 soft-reconfiguration inbound
neighbor 169.254.10.1 route-map allow-all in
neighbor 169.254.10.1 route-map allow-all out
neighbor 169.254.20.1 soft-reconfiguration inbound
neighbor 169.254.20.1 route-map allow-all in
neighbor 169.254.20.1 route-map allow-all out
maximum-paths 32
exit-address-family
exit
执行exit
命令退出配置模式,然后执行show ip bgp
命令查看BGP路由条目。
可以看到strongswan设备已经成功学习到云上VPC的路由,本地IDC与云上VPC之间已经可以正常互通。
单出口-静态路由方式下如果阿里云侧判断主隧道有风险,会主动将流量切换至备隧道,有可能会导致流量不通。您可以观察/proc/net/xfrm_stat
文件中XfrmInTmplMismatch参数的值来判断阿里云侧是否已将流量切换至备隧道,如果该参数的值一直在变化,则证明阿里云侧已将流量切换至备隧道,您可以在/etc/strongswan/swanctl/swanctl.conf
文件中修改备隧道priority
的值,使本地IDC上云的流量优先通过备隧道传输。
备份原始strongSwan配置文件。
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
新建strongSwan配置文件。
vi /etc/strongswan/swanctl/swanctl.conf
根据场景示例中的规划,添加并保存如下配置。
connections {
vco1 { # 添加IPsec-VPN隧道1的VPN配置。
version = 2 # 指定IKE版本,需与阿里云隧道1的IKE版本保持一致,2表示IKEv2。
local_addrs = 172.16.20.80 # eth0私网IP地址。
remote_addrs = 47.XX.XX.151 # 指定隧道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 = 120.XX.XX.202 # 本地公网出口IP,需与阿里云隧道1的RemoteId保持一致。
}
remote {
auth = psk # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
id = 120.XX.XX.202 # 阿里云侧IPsec地址1,需与阿里云隧道1的LocalId保持一致。
}
children {
vco_child1 {
local_ts = 172.16.0.0/16 # 本地侧感兴趣流,填写本地私网网段172.16.0.0/16。
remote_ts = 192.168.0.0/16 # 阿里云侧感兴趣流,填写VPC网段192.168.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。
priority = 1 # 指定隧道1的优先级,优先使用主隧道上云。
}
}
}
vco2 { # 添加IPsec-VPN隧道2的VPN配置
version = 2 # 指定IKE版本,需与阿里云隧道2的IKE版本保持一致,2表示IKEv2。
local_addrs = 172.16.20.80 # eth0私网IP地址
remote_addrs = 47.XX.XX.87 # 指定隧道2对端的IP地址为阿里云隧道2的网关IP地址,即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 = 120.XX.XX.202 # 本地公网出口IP,与阿里云隧道2的RemoteId保持一致。
}
remote {
auth = psk # 对端认证方式选择PSK方式,即阿里云使用预共享密钥方式。
id = 47.XX.XX.87 # 阿里云侧IPsec地址2,需与阿里云隧道2的LocalId保持一致。
}
children {
vco_child2 {
local_ts = 172.16.0.0/16 # 本地侧感兴趣流,填写本地私网网段172.16.0.0/16。
remote_ts = 192.168.0.0/16 # 阿里云侧感兴趣流,填写VPC网段192.168.0.0/16。
mode = tunnel
rekey_time = 85500
life_time = 86400 # 指定隧道2的SA生存周期,需与阿里云隧道2 IPsec配置中的SA生存周期保持一致。
dpd_action = restart
start_action = start
close_action = start
esp_proposals = aes-sha1-modp1024 # 指定隧道2的加密算法、认证算法、DH分组,需与阿里云隧道2 IPsec配置中的加密算法、认证算法、DH分组保持一致,group2对应的是modp1024。
priority = 2 # 指定隧道2的优先级,隧道2的优先级低于隧道1。
}
}
}
}
secrets {
ike-vco1 {
secret = ChangeMe*** # 指定隧道1的预共享密钥,需与阿里云隧道1的预共享密钥保持一致。
}
ike-vco2 {
secret = ChangeMe*** # 指定隧道2的预共享密钥,需与阿里云隧道2的预共享密钥保持一致。
}
}
重启strongSwan进程,查看隧道状态。
sudo systemctl restart strongswan
watch swanctl --list-sas
如下图所示,strongSwan设备和VPN网关之间已经成功建立IPsec-VPN连接,本地IDC和VPC之间已经可以互相通信。
验证本地IDC和VPC之间的连通性。
使用本地IDC中的一台客户端ping
阿里云VPC内的任意1台ECS,如果能ping通,则证明连通正常。
ping <VPC内1台ECS的地址>
验证IPsec-VPN连接的高可用性。
保持ping通的情况下,中断IPsec-VPN连接下的主隧道。
您可以通过修改IPsec连接主隧道的预共享密钥来中断主隧道,主隧道两端的预共享密钥不一致,则主隧道会中断。
中断主隧道后,您可以通过ping
命令观察两侧的连通情况。您会发现ping
流量在短暂中断后,又重新恢复通信。这表示在主隧道中断后,流量自动通过备隧道进行通信。
IPsec连接绑定转发路由器的场景下,strongSwan设备侧的配置与上文相同。推荐您使用BGP动态路由协议,配置完成后,可以在strongSwan设备上看到通过BGP动态路由协议学习到的VPC侧路由,IPsec-VPN连接的两条隧道自动形成ECMP链路。
支持。
配置/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侧网段。
}
}
对于非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连接,实现云上云下网络互通。
本地IDC侧
私网网段:10.0.0.0/16
strongSwan设备,网卡eth0: 10.0.0.1,NAT映射公网出口1:1.1.XX.XX
非NAT场景,请参见“strongSwan设备网卡绑定了公网IP地址,如何配置?”。
阿里云侧
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地址。
注意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
下文步骤以运行“CentOS Stream 9 64位操作系统”的strongSwan设备为例。其他操作系统,请参考strongSwan的官方文档。
放通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
echo 1 > /proc/sys/net/ipv4/ip_forward
上述命令为临时性命令,strongSwan设备重启后需重新配置该命令。您可以参见以下内容永久开启strongSwan设备的流量转发功能。
单击查看永久配置。
打开/etc/sysctl.conf文件。
vi /etc/sysctl.conf
在文件中添加如下配置。
net.ipv4.ip_forward = 1
使配置生效。
sudo sysctl -p
dnf install epel-release -y
dnf install strongswan-5.9.10 -y
基于strongSwan感兴趣流进行配置。
备份原始strongSwan配置文件
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
新建strongSwan配置文件
vi /etc/strongswan/swanctl/swanctl.conf
根据场景示例中的规划,添加并保存如下配置
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的预共享密钥保持一致。
}
}
重启strongSwan进程
systemctl restart strongswan
查看隧道状态
watch swanctl --list-sas
如图,strongSwan设备和VPN网关之间已经正常建立了IPsec-VPN连接。
验证strongSwan设备和VPC之间的连通性:
在strongSwan设备ping
阿里云VPC内的任意1台ECS,如果能Ping通,则证明连通正常。
ping <VPC内1台ECS的地址>