【问题标题】:Iptables with Docker - All created networks accessible via lan, routing issue?带有 Docker 的 iptables - 所有创建的网络都可以通过局域网访问,路由问题?
【发布时间】:2017-09-15 13:12:43
【问题描述】:

我想让 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 是有问题的 LAN。

由于路由表,我们可以从主机 ping Docker 创建的每台机器。

  1. 在windows box上设置静态路由route add 172.0.0.0 MASK 255.0.0.0 192.168.2.3

  2. 已在 Linux Docker 主机上启用检查转发

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

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

  5. 设置转发

    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

【问题讨论】:

标签: docker networking


【解决方案1】:

好吧,我想多了!

我解决了

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

解决了这个问题 - 我现在可以从我的 LAN 访问 docker 容器内分配的所有 IP 地址 :)

【讨论】:

  • 这可以在 2 个 AWS EC2 实例之间工作吗?一个安装了 docker 并运行了一个容器,另一个能够在 docker0 网络中 ping docker 容器 ip?
猜你喜欢
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2013-10-04
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多