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

IPsec隧道外部节点#1容器无法访问172.16.0.0/24网络求助

Docker Swarm + IPsec 隧道通信异常问题

环境说明

  • Swarm集群含7个节点,部署在vCloud Director实例中,均处于172.16.0.0/24网段
  • 另有2个外部节点部署在专用服务器上,均带有VLAN 4000接口,网段为192.168.99.0/24
  • 外部节点#1与vCloud Director建立IPsec隧道,配置如下:

leftsubnet=172.16.0.0/24
rightsubnet=192.168.99.0/24

  • 集群内所有节点可通过私有IP互相通信

异常现象

  • 外部节点#2上的容器可正常访问172.16.0.0/24网段IP
  • 建立IPsec隧道的外部节点#1上的容器无法与172.16.0.0/24网段通信

MTR测试结果

外部节点#2到172.16.0.0/24的MTR

Host                                                                                                                                                            Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 172.18.0.1                                                                                                                                                    0.0%     5    0.0   0.0   0.0   0.1   0.0
 2. 192.168.99.1                                                                                                                                                  0.0%     5    0.3   0.3   0.3   0.4   0.0
 3. (waiting for reply)
 4. 172.16.0.30                                                                                                                                                   0.0%     5   14.7  15.4  14.7  16.1   0.6

外部节点#1到172.16.0.0/24的MTR

Host                                                                                                                                                            Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 172.18.0.1                                                                                                                                                    0.0%     3    0.1   0.1   0.0   0.1   0.0
 2. static.X.X.X.X.clients.your-server.de                                                                                                                   0.0%     3    0.2   0.3   0.2   0.4   0.1
 3. XXX.fsn1.hetzner.com                                                                                                                                       0.0%     3    0.3   0.5   0.3   0.8   0.3
 4. XXX.nbg1.hetzner.com                                                                                                                                       0.0%     3    2.7   3.8   2.7   6.0   1.9
 5. (waiting for reply)

外部节点#1的iptables规则(位于Docker规则之前)

-A FORWARD -s 172.16.0.0/24 -d 192.168.99.0/24 -i enp35s0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A FORWARD -s 192.168.99.0/24 -d 172.16.0.0/24 -o enp35s0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A FORWARD -s 172.16.0.0/24 -d 192.168.99.0/24 -i enp35s0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A FORWARD -s 192.168.99.0/24 -d 172.16.0.0/24 -o enp35s0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-INGRESS
-A FORWARD -j DOCKER-ISOLATION-STAGE-1

可能的原因及解决思路

1. 路由配置错误

从MTR结果看,节点#1的流量未走VLAN 4000接口,而是直接走公网。检查路由表,确认172.16.0.0/24网段的下一跳是192.168.99.1(与节点#2一致):

ip route show 172.16.0.0/24

若路由指向错误,添加静态路由:

ip route add 172.16.0.0/24 via 192.168.99.1 dev <VLAN4000接口名>

2. iptables规则未覆盖容器网段

当前规则仅针对192.168.99.0/24,但Docker容器使用独立网段(如172.18.0.0/16),需将容器网段加入IPsec转发规则:

-A FORWARD -s 172.16.0.0/24 -d 172.18.0.0/16 -i enp35s0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A FORWARD -s 172.18.0.0/16 -d 172.16.0.0/24 -o enp35s0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT

确保规则放在Docker规则之前。

3. IPsec策略未包含容器网段

IPsec配置的rightsubnet仅包含192.168.99.0/24,容器流量不在保护范围内,导致走公网或被丢弃。修改IPsec配置:

rightsubnet=192.168.99.0/24,172.18.0.0/16
重启IPsec服务生效。

4. Docker SNAT规则干扰

检查Docker是否对容器访问172.16.0.0/24的流量做了SNAT,导致源IP变为节点公网IP,不匹配IPsec策略。添加SNAT例外规则:

-A POSTROUTING -s 172.18.0.0/16 -d 172.16.0.0/24 -j ACCEPT

规则需放在Docker的SNAT规则之前。

内容的提问来源于stack exchange,提问作者Denden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:26:00