Docker 通过 VPN 在特定端口上进行隧道通信

Docker 通过 VPN 在特定端口上进行隧道通信

不确定这是 docker 特有的问题还是一般的网络问题。

我正在运行带有多个 docker 容器的 Debian Jessie 服务器。我的理解是,docker 创建一个名为 的虚拟接口(或严格地说是虚拟以太网桥),docker0并绑定每个单独容器的虚拟接口。然后,它操纵主机iptables以允许每个容器的公开端口与主机网络之间的通信。

我有一个 VPN,接口是tun0。其中一个容器公开两个端口:888823456。我想通过隧道传输所有流量向和从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

相关内容