![从外部(宿主机或者其他容器)访问docker容器的VPN](https://linux22.com/image/698565/%E4%BB%8E%E5%A4%96%E9%83%A8%EF%BC%88%E5%AE%BF%E4%B8%BB%E6%9C%BA%E6%88%96%E8%80%85%E5%85%B6%E4%BB%96%E5%AE%B9%E5%99%A8%EF%BC%89%E8%AE%BF%E9%97%AEdocker%E5%AE%B9%E5%99%A8%E7%9A%84VPN.png)
我在同一台机器上有几个docker容器,其中一个正在运行OpenVPN服务器,因此它有网络接口tun0
(192.168.255.1
)。这个虚拟专用网络有一个192.168.255.2
远程客户端。
我需要能够从另一个docker容器或主机与该远程客户端通信,就好像它们在同一个本地网络中一样。我在主机上添加了路由:
# ip route add 192.168.255.0/24 dev docker0
现在我可以 ping 通192.168.255.1
(VPN 服务器)但无法访问客户端:
# ping 192.168.255.2
PING 192.168.255.2 (192.168.255.2) 56(84) bytes of data.
From 172.17.0.1 icmp_seq=1 Destination Host Unreachable
From 172.17.0.1 icmp_seq=2 Destination Host Unreachable
From 172.17.0.1 icmp_seq=3 Destination Host Unreachable
我尝试了 TAP 和 TUN OpenVPN 设备模式、默认和子网拓扑 - 没有帮助
答案1
你应该看看我在这里的回答:https://serverfault.com/a/879809/67419这正是我所配置的,只是我没有使用默认的 Docker 桥,而是创建了一个专用的桥。但它与默认桥的工作方式类似。
您确实必须添加正确的路由(正如您所做的那样),但您至少还需要允许在您的 iptables 上转发,类似于sudo iptables -A FORWARD -i tun+ -j ACCEPT
。
确保client-to-client
至少topology subnet
在您的 OpenVPN 服务器配置中拥有。
所有细节都在我的另一个回答里。