如何通过另一个接口转发来自一个网络接口的数据包

时间:2017-09-11 23:47:52

标签: networking routing containers iptables ifconfig

  

请参阅下面的图片了解架构。

我知道有很多类似的问题。但是,阅读了多个帖子并尝试了一些后,我仍然无法按要求进行设置。所以我发布这是一个新问题。

情景:

  • 我有三个容器( c1 c2 c3
  • 我有不同的界面,每个界面分别在三个容器中运行( eth0 peervpnXX
  • c1 有接口: eth0 peervpn12
  • c2 有接口: eth0 peervpn12 peervpn23
  • c3 有接口: eth0 peervpn23

虽然 eth0 接口位于同一子网上,但 peervpnXX 接口位于不同的子网上:

  • peervpn12 - 10.12.0.0/24
  • peervpn23 - 10.23.0.0/24

请注意,peervpnXX接口是在eth0 上运行的隧道接口

现在分配给每个容器的ip_addresses如下:

  • c1 :172.17.0.2 (eth0)和10.12.0.2 (peervpn12)
  • c2 :172.17.0.3 (eth0)和10.12.0.1 (peervpn12)和10.23.0.1 (peervpn23)< /强>
  • c3 :172.17.0.4 (eth0)和10.23.0.2 (peervpn23)

我要做的是让 c1 通过中间人 c2 c3 进行通信。原则上,我想:

  • 通过 c2 <将 10.23.0.0/24 的数据包从 c1 路由到 c3 /强>
  • 通过 c2 <将 10.12.0.0/24 的数据包从 c3 路由到 c1 /强>

我在 c1 &amp;上创建了一个路由规则。 c3 将数据包发送到子网 10.23.0.0/24 &amp; 10.12.0.0/24 通过接口 peervpn12 peervpn23 。但是,我想我错过了一些需要在 c2 上设置的转发规则。

  

PS:假设&#39; eth0&#39; interface被锁定,仅用作底层接口来路由“peervpnXX”的数据包。接口

非常感谢任何有关解决此问题的帮助 先感谢您。

沙比尔

Complete Architecture explained above

1 个答案:

答案 0 :(得分:0)

管理以找到问题。

虽然在另一个子网中添加容器的路由,但我没有正确指定网关网关仍然指向运行docker 的主机(参见上图)。所以我添加了特定于两个终端容器的正确路由规则 - c1&amp; 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

通过这种设置,我能够实现我期望的流程。

谢谢你,我不知道为什么会被投票 也许如果我知道将来可以纠正自己的原因:)