我正在主机上运行docker,我想将docker内部的特定接口(TUN接口)连接到主机的外部网络。
在docker中运行ifconfig时,我看到3个接口:eth0、lo和my_tun (调谐器接口)。在主机上,我看到lo、docker0和enp7s0 (外部网络)。我寻求的结果是,在my_tun接口上发送的数据包将被发送到enp7s0。
如果TUN接口不在docker中,我会这样做:
sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE所以我的问题是如何使用属于docker容器(最好是在Ubuntu上)的TUN接口来做这件事。
提前感谢!
发布于 2021-09-04 20:03:09
我最终用一个中间网络解决了这个问题。我创建了一个类型为bridge的docker网络,并将其连接到容器和主机。然后,我使用容器内的iptables规则将通信从tun设备转发到网络,并使用主机上的类似规则将通信从网络转发到外部接口。
因此,假设网络名为proxy_net,则其docker接口为proxy_net0,其网关为192.168.1.254。
在容器内部:
iptables -A FORWARD -i my_tun -o proxy_net0 -j ACCEPT
iptables -A FORWARD -i proxy_net0 -o my_tun -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -o proxy_net0 -j MASQUERADE
ip route replace default via 192.168.1.254 dev proxy_net0在主机上:
sudo iptables -A FORWARD -i proxy_net -o enp7s0 -j ACCEPT
sudo iptables -A FORWARD -i enp7s0-o proxy_net -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -o enp7s0 -j MASQUERADEhttps://stackoverflow.com/questions/67224864
复制相似问题