更改docker容器的默认接口

更改docker容器的默认接口

我为这个问题苦苦挣扎了两天。

假设:

  • Docker 网络(和接口)命名码头网类型子网172.18.0.0/16
  • 两个接口以太网0(192.168.1.1) 和以太网1(192.168.2.1)
  • 默认路由经过以太网0

我想要的是:

  • 来自附加到的容器的传出流量码头网必须去以太网1

我尝试过的:

  • docker 创建的默认 iptable 规则保持不变:

-A POSTROUTING -s 172.18.0.0/16 ! -o docknet -j MASQUERADE

  • 我的规则:

iptables -t mangle -I PREROUTING -s 172.18.0.0/16 -j MARK --set-mark 1

ip rule add from all fwmark 1 table 2

其中表2为:

default via 192.168.2.1 dev eth1 proto static

通过此设置,当我尝试从连接到 Dockernet 的容器 (172.18.0.2) ping 8.8.8.8 时,会发生以下情况:

  • 172.18.0.2 被转换为 192.168.2.1
  • 数据包经过 eth1
  • 数据包返回到 eth1,源地址为 8.8.8.8,目标地址为 192.168.2.1

从这里应该会发生从 192.168.2.1 到 172.168.0.2 的反向转换,但运行时tcpdump -i any host 8.8.8.8没有关于此转换的跟踪

我还检查了 conntrack -L ,结果如下:

icmp 1 29 src=172.18.0.2 dst=8.8.8.8 类型=8 代码=0 id=9 src=8.8.8.8 dst=192.168.2.1 类型=0 代码=0 id=9 标记=0 使用=1

有用的信息:

  • eth1实际上是一个4G USB适配器
  • IP 转发已激活
  • curl --interface eth1 ipinfo.io按预期工作

相关内容