Debian 12下配置Firewalld与IPsec(StrongSwan)站点到站点VPN实现PING互通的方法
Debian 12下配置Firewalld与IPsec(StrongSwan)站点到站点VPN实现PING互通的方法
嘿,我来给你梳理一下如何搞定这个场景下的互通问题,先看看咱们的环境和已完成的配置:
环境说明
- Node A:边缘路由器1,本地网段
10.41.1.0/24 - Node B:边缘路由器2,本地网段
10.48.2.0/24 - Node C:运行Debian 12的虚拟机,搭载Docker容器和
firewalld,Docker容器网段包含示例地址172.17.0.1
已完成的基础配置
- 已经基于StrongSwan搭建好Node A和Node B之间的站点到站点IPsec VPN连接,目前连接状态正常
- 已经配置好Node A和Node B之间的ICMP(PING)互通,双方可以正常互相PING通
接下来咱们重点解决Node C和A、B之间的PING互通问题,步骤如下:
1. 在Node C上部署StrongSwan并配置IPsec连接
首先如果Node C还没装StrongSwan,先执行安装命令:
apt update && apt install strongswan strongswan-pki
然后编辑IPsec主配置文件/etc/ipsec.conf,添加到Node A和Node B的站点到站点连接(这里以连接Node A为例,Node B的配置类似):
conn site-to-site-a left=%any leftsubnet=172.17.0.0/16 # 替换成你实际的Docker容器网段 right=NodeA的公网IP地址 rightsubnet=10.41.1.0/24 authby=secret ike=aes256-sha256-modp1024! esp=aes256-sha256! keyexchange=ikev2 auto=start conn site-to-site-b left=%any leftsubnet=172.17.0.0/16 # 同样替换成实际Docker网段 right=NodeB的公网IP地址 rightsubnet=10.48.2.0/24 authby=secret ike=aes256-sha256-modp1024! esp=aes256-sha256! keyexchange=ikev2 auto=start
接着编辑预共享密钥文件/etc/ipsec.secrets,添加对应节点的密钥:
NodeC的公网IP NodeA的公网IP : PSK "你的预共享密钥内容" NodeC的公网IP NodeB的公网IP : PSK "你的预共享密钥内容"
最后启动并设置StrongSwan开机自启:
systemctl start strongswan-starter systemctl enable strongswan-starter
2. 配置Firewalld放行IPsec和ICMP流量
先确保firewalld处于运行状态:
systemctl start firewalld systemctl enable firewalld
然后添加必要的规则:
- 放行IPsec所需的UDP端口(IKE的500和NAT-T的4500):
firewall-cmd --add-port=500/udp --permanent firewall-cmd --add-port=4500/udp --permanent
- 放行IPsec的ESP和AH协议:
firewall-cmd --add-protocol=esp --permanent firewall-cmd --add-protocol=ah --permanent
- 放行三个节点网段之间的ICMP(PING)流量:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.41.1.0/24" destination address="172.17.0.0/16" protocol value="icmp" accept' --permanent firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.48.2.0/24" destination address="172.17.0.0/16" protocol value="icmp" accept' --permanent firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.17.0.0/16" destination address="10.41.1.0/24" protocol value="icmp" accept' --permanent firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.17.0.0/16" destination address="10.48.2.0/24" protocol value="icmp" accept' --permanent
配置完后重新加载firewalld生效:
firewall-cmd --reload
3. 调整Docker网络避免路由冲突
如果Docker默认的网段和VPN网段有重叠,会导致路由异常,需要修改Docker配置。编辑/etc/docker/daemon.json(没有的话就新建):
{ "bip": "172.18.0.1/16" # 改成和10.41.1.0/24、10.48.2.0/24不冲突的网段 }
然后重启Docker服务:
systemctl restart docker
另外可以检查Node C的路由表,确认VPN网段的流量是否正确导向IPsec接口:
ip route show
如果没有自动生成路由,可以手动添加:
ip route add 10.41.1.0/24 via NodeA的VPN本地IP dev ipsec0 ip route add 10.48.2.0/24 via NodeB的VPN本地IP dev ipsec0
4. 验证互通效果
现在可以测试PING连通性了:
- 在Node C上PING Node A的本地IP:
ping 10.41.1.1
- 在Node A上PING Node C的Docker容器IP:
ping 172.17.0.1
如果能正常收到回复,就说明配置成功啦!
备注:内容来源于stack exchange,提问作者BCT
相关产品推荐
相关产品推荐

