将入站流量从接口转发到 Docker 容器

将入站流量从接口转发到 Docker 容器

我必须将来自我的机器的流量转发192.168.72.0/28到在具有地址并以模式运行eth0的同一台机器上运行的容器。172.7.0.4bridge

我尝试过添加路由规则

ip route add 192.168.72.0/28 via 172.17.0.4

我可以看到接口处的流量eth0,但在 Docker 容器的接口处看不到流量。

我也尝试过DNAT,但运气不佳

iptables -t nat -I PREROUTING -i eth0 -s 192.168.72.0/28 -j DNAT --to-destination 172.17.0.4

我缺少什么?

问题是容器正在网桥中运行,而我确实有一个网络接口,它是一个具有非标准名称的 veth。在这种情况下通常采用哪种方法?

答案1

/etc/iproute2/rf_tables在追加下创建新的路由表2 connect

然后运行命令:

ip rule add from 192.168.72.0/28 table connect
ip route add default via 172.17.0.4 table connect

其中172.17.0.4是 Docker 容器的 IP。在你的情况下可能会有所不同。

那么是时候遵守iptables规则了

iptables -A INPUT -s 192.168.72.0/28 -j ACCEPT
iptables -A FORWARD -d 192.168.72.0/28 -j ACCEPT
iptables -A FORWARD -s 192.168.72.0/28 -j ACCEPT
iptables -A OUTPUT -d 192.168.72.0/28 -j ACCEPT

此时所有流量都将通过 Docker 容器并且可以正常工作。

相关内容