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

How to forward packets from one network interface via another interface

See picture below for architecture.

我知道有很多类似的问题。但是,在阅读了多篇文章并尝试了一些之后,我仍然无法按要求进行设置。所以我将其作为一个新问题发布。

场景:

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

请注意,peervpnXX 接口是 eth0

之上的隧道接口 运行

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

我想做的是让 c1 通过中间人 c2[= 与 c3 通信103=]。原则上,我正在尝试:

  • 路由数据包从 10.23.0.0/24c1c3 通过 c2.
  • 路由数据包从 10.12.0.0/24c3c1 通过 c2.

我在 c1c3 上创建了一条路由规则,用于将数据包发送到子网 10.23.0.0/24 & 10.12.0.0/24 通过接口 peervpn12peervpn23。但是,我想我缺少一些需要在 c2.

上设置的转发规则

PS: Assume that the 'eth0' interface is locked down and is used only as the underlying interface to route packets of the 'peervpnXX' interface

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

沙比尔

设法找到问题。

在为另一个子网中的容器添加路由时,我没有正确指定 网关 网关仍然指向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

通过此设置,我能够实现预期的流程。

谢谢你,我不知道为什么它被否决了。
也许如果我知道原因我以后可以纠正自己:)