连接两个接口和docker容器

连接两个接口和docker容器

有两个位于同一网络上的容器组成示例:

version: '3.8'
services:
    A:
        image: alpine:3.18
        container_name: container-a
    B:
        image: custom-alpine-with-two-interfaces
        container_name: container-b

在容器中B有两个接口: eth0(docker default 172.26.0.2/16) 和eth1

另外,在容器中我将默认A网关设置为:。现在我想配置容器将所有传入的包从IP传递到。ip route add default via 172.26.0.2BBeth0Aeth1

如何实现这一目标?

                             (10.10.0.5)              (10.10.0.6)
 container A     <------->   container B   <------->   internet
(172.26.0.3)                 (172.26.0.2) 
  • A当我设置default via 172.26.0.2并运行时traceroute example.com,它卡在172.26.0.1
traceroute to example.com (1.1.1.1), 30 hops max, 46 byte packets
 1  container_b (172.26.0.2)  0.004 ms  0.004 ms  0.004 ms
 2  myshost.local (172.26.0.1)  0.004 ms  0.007 ms  0.006 ms
 3  *  *  *
 4  *  *  *

  • 我也尝试了这个 iptables 配置,B但什么也没发生:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

答案1

我想知道你为什么要在 iptables 中这样做。特别是因为我怀疑更完善的解决方案将会产生更多的“转发规则”。例如:

  • 它是否会发展到拥有更广泛的第二层容器来转发数据包。
  • 是否需要基于源、目的地或数据包内容的标准来决定如何转发。

也就是说,我怀疑会出现一个功能更齐全的(反向)代理......

您能否进一步分享一下您的理由?

相关内容