伪装 docker 接口和主机接口
Masquerading docker interface and host interface
我是运行主机上的docker,我想将docker(TUN接口)内的特定接口连接到主机的外部网络。
当 运行 ifconfig
在 docker 内时,我看到 3 个接口:eth0
、lo
和 my_tun
(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 容器的 TUN 接口(最好在 Ubuntu 上)。
提前致谢!
终于用中间网络解决了。
我创建了一个桥接类型的 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 MASQUERADE
我是运行主机上的docker,我想将docker(TUN接口)内的特定接口连接到主机的外部网络。
当 运行 ifconfig
在 docker 内时,我看到 3 个接口:eth0
、lo
和 my_tun
(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 容器的 TUN 接口(最好在 Ubuntu 上)。
提前致谢!
终于用中间网络解决了。 我创建了一个桥接类型的 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 MASQUERADE