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

时间:2017-09-15 13:12:44

标签: docker networking

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

例如,请查看下表。

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创建的每台机器,因为路由表。

  1. 在Windows框route add 172.0.0.0 MASK 255.0.0.0 192.168.2.3

  2. 上设置静态路由
  3. 在Linux Docker主机上启用了已检查转发

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

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

  6. 设置转发

    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

  7. 但是,我仍然无法通过与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 :(得分:0)

好的,我正在思考它!

我用

解决了这个问题
property = 10
#property = 10
#this is a test for #property
#this is a test for property

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