首页 文章

与Docker的Iptables - 所有创建的网络都可以通过局域网,路由问题访问?

提问于
浏览
-1

我想使docker主机成为一个网关来路由172.0.0.0范围内的所有流量,因此所有机器都可以通过本地LAN上的静态路由访问 .

例如,请查看下表 .

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    0      0        0 bond0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 bond0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-8cb984474cf3
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-08751d4f00ac
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-205529b1f9cc
172.21.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-f199a191f679
172.22.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-67ac401705aa
172.23.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-ec7ad4f839dd
172.24.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-f7af361c29fb
172.25.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker_gwbridge
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 bond0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

Bond0是有问题的局域网 .

从主机我们可以ping由Docker创建的每台机器,因为路由表 .

  • 在Windows框中设置静态路由 route add 172.0.0.0 MASK 255.0.0.0 192.168.2.3

  • 在Linux Docker主机上启用了已检查转发

  • 在bond0接口上启用伪装 iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE

  • 我选择了一个示例接口 br-08751d4f00ac ,即172.19.0.0

  • 设置转发

sudo iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE sudo iptables -A FORWARD -i bond0 -o br-08751d4f00ac -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i br-08751d4f00ac -o bond0 -j ACCEPT

但是,我仍然无法从与bond0相同的网络上的Windows机器ping .

Tracing route to 172.19.0.2 over a maximum of 30 hops

  1    <1 ms    <1 ms    <1 ms  192.168.2.3
  2

1 回答

  • 0

    好吧,我正在思考它!

    我用它解决了

    sudo iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE
    sudo iptables -A FORWARD -i bond0 -o docker0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -A FORWARD -i docker0 -o bond0 -j ACCEPT
    

    解决了问题 - 我现在可以从我的局域网访问Docker容器内分配的所有IP地址了:)

相关问题