不确定这是 docker 特有的问题还是一般的网络问题。
我正在运行带有多个 docker 容器的 Debian Jessie 服务器。我的理解是,docker 创建一个名为 的虚拟接口(或严格地说是虚拟以太网桥),docker0
并绑定每个单独容器的虚拟接口。然后,它操纵主机iptables
以允许每个容器的公开端口与主机网络之间的通信。
我有一个 VPN,接口是tun0
。其中一个容器公开两个端口:8888
和23456
。我想通过隧道传输所有流量向和从23456
通过 VPN端口。
如何才能做到这一点?
另一种看待这个问题的方式是,docker 根据端口自动将流量路由到正确的容器。我想通过 插入另一层iptables
,其中端口上的流量23456
被定向到 VPN,而来自 VPN 的任何流量都被定向到端口23456
。
供参考,VPN 提供商使用 OpenVPN。
答案1
这应该是完全自动的,除了通常的伪装规则的需要:
iptables -t nat -A POSTROUTING -i docker0 -o tun0 -j MASQUERADE
为了全面起见,请确保在主机上具有为 docker0 提供服务的路由规则:如果您可以从主机 ping docker,则无需进一步阅读。否则,请添加
ip route add Docker'sNetwork/16 via dev docker0