请参阅下面的图片了解架构。
我知道有很多类似的问题。但是,阅读了多个帖子并尝试了一些后,我仍然无法按要求进行设置。所以我发布这是一个新问题。
情景:
虽然 eth0 接口位于同一子网上,但 peervpnXX 接口位于不同的子网上:
请注意,peervpnXX接口是在eth0 上运行的隧道接口
现在分配给每个容器的ip_addresses如下:
我要做的是让 c1 通过中间人 c2 与 c3 进行通信。原则上,我想:
我在 c1 &上创建了一个路由规则。 c3 将数据包发送到子网 10.23.0.0/24 & 10.12.0.0/24 通过接口 peervpn12 和 peervpn23 。但是,我想我错过了一些需要在 c2 上设置的转发规则。
PS:假设' eth0' interface被锁定,仅用作底层接口来路由“peervpnXX”的数据包。接口
非常感谢任何有关解决此问题的帮助 先感谢您。
沙比尔
答案 0 :(得分:0)
管理以找到问题。
虽然在另一个子网中添加容器的路由,但我没有正确指定网关。 网关仍然指向运行docker 的主机(参见上图)。所以我添加了特定于两个终端容器的正确路由规则 - c1& C3 即可。
c1 - ip route add 10.23.0.0/24 via 10.12.0.1 dev peervpn12
c3 - ip route add 10.12.0.0/24 via 10.23.0.1 dev peervpn23
与此同时,必须在c2容器的iptables中添加正确的 FORWARD 规则:
iptables -A FORWARD -s 10.12.0.2 -i peervpn12 -d 10.23.0.2 -o peervpn23 -j ACCEPT
iptables -A FORWARD -s 10.23.0.2 -i peervpn23 -d 10.12.0.2 -o peervpn12 -j ACCEPT
通过这种设置,我能够实现我期望的流程。
谢谢你,我不知道为什么会被投票 也许如果我知道将来可以纠正自己的原因:)