【问题标题】:How to forward packets from one network interface via another interface如何通过另一个接口转发来自一个网络接口的数据包
【发布时间】:2017-09-11 23:47:51
【问题描述】:

架构见下图。

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

场景:

  • 我有三个容器(c1c2c3
  • 我有不同的接口,每个接口都在三个容器中运行(eth0peervpnXX
  • c1 有接口:eth0peervpn12
  • c2 有接口:eth0peervpn12peervpn23
  • c3 有接口:eth0peervpn23

虽然 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 通过中间人 c2c3 通信。原则上,我试图:

  • 通过c2将用于10.23.0.0/24的数据包从c1路由到c3
  • 通过c2将用于10.12.0.0/24的数据包从c3路由到c1

我在 c1c3 上创建了一个路由规则,以将数据包发送到子网 10.23.0.0/2410.12.0.0 /24 通过接口 peervpn12peervpn23。但是,我认为我缺少一些需要在 c2 上设置的转发规则。

PS:假设“eth0”接口被锁定,仅作为底层接口用于路由“peervpnXX”接口的数据包

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

沙比尔

【问题讨论】:

    标签: networking routing containers iptables ifconfig


    【解决方案1】:

    设法找到问题。

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

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

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

    【讨论】:

    • 如果我将iptables'FORWARD链设置为全局接受,我需要最后两个iptables -A FORWARD吗?
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2015-01-10
    • 2015-01-22
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多