You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:18:05