最近我发现这个可以给docker一个“个人”ip
ip addr del 10.1.1.133/24 dev eth0
ip link add link eth0 dev eth0m type macvlan mode bridge
ip link set eth0m up
ip addr add 10.1.1.133/24 dev eth0m
route add default gw 10.1.1.1
在容器上我做了
CID=$(docker run -d ...)
pipework eth0 $CID 10.1.1.133/[email protected]
如果主机和 docker 容器都位于同一子网(本例中为 10.1.1.0/24),则效果很好,但如果我想为 docker 使用不同的子网?例如10.2.2.0/24?
我尝试过 iptables 伪装,但没有任何作用,docker 容器无法 ping 或到达外部网络(互联网)。
iptables -t nat -A POSTROUTING -m iprange --src-range 10.2.2.2-10.2.2.255 -o eth0 -j MASQUERADE
当然ip转发是开启的
答案1
找到解决方案。主机必须设置为路由器,启用 iptables NAT 并启用到新 ip 类的路由,在本例中 eth0m 是桥接网络
iptables -A FORWARD -i eth0m -o eth0m -j ACCEPT
iptables -A FORWARD -i eth0m -o eth0m -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0m -j MASQUERADE
管道必须使用新的路由器,在本例中为 192.168.0.254
pipework eth0 $DOCKID 10.8.3.1/[email protected]
最后必须添加路由,在本例中 10.8.3.0 是另一个 ip 类
route add -net 10.8.3.0 netmask 255.255.255.0 dev eth0m