我当前的设置有一个运行 OpenVPN Client 的 Docker 映像,该映像连接到 AWS 中的访问服务器。如果我运行以下命令:
docker exec <container-id> bash
我可以进入 OpenVPN 容器本身,并且可以 ping 连接到 OpenVPN 服务器的相关 IP。我的问题是,我该如何告诉本地机器(ubuntu)转发所有本地流量,比如说我只是从容器外部执行 ping,通过 Docker0 接口和 OpenVPN 客户端?
我尝试过设置 web 代理,但我相信设置 web 代理是为了帮助其他容器将流量转发到 OpenVPN 容器,而我需要从本地机器转发流量。
答案1
您需要从主机添加到您想要通过 OpenVPN 隧道转发的目的地的路由,以便它们指向您的 Docker 容器 IP 地址。
例如:
route add -net 192.168.1.0/24 gw 172.17.17.1
192.168.1.0/24
您想要通过 Docker 容器的本地 IP 地址路由的 IP 网络在哪里172.17.17.1
。
如果您无法控制隧道另一端机器的路由,则需要在这些机器上设置反向路由。另一种选择是在 Docker 容器上设置 NAT。
答案2
正如@tero-kilkanen 所解释的,您必须通过使用 OpenVPN 客户端的容器添加从主机到 AWS 实例的路由。
ip route add 192.168.1.0/24 via 172.18.0.2
172.18.0.2
您的 docker 容器 IP 和192.168.1.0/24
子网在 AWS 中在哪里。
下一步将取决于 AWS 中的访问服务器配置设置。最简单的故障排除方法是安装tcpdump
在 AWS 中的远程主机实例上。然后开始从主机 ping 远程实例,即 ping远程实例的 IP。然后在远程实例上运行192.168.1.2
并观察传入的 ping 请求,并注意它们来自的 IP 地址。如果此 IP 不是 OpenVPN IP,即您的主机 IP 是 docker 网络。然后将登录到远程实例并将从 AWS 的路由添加回您的主机。即OpenVPN 访问服务器的 AWS 路由器/网关 IP 在哪里。192.168.1.2
tcpdump -nn -i any
10.8.0.2
172.18.0.1
ip route add 172.18.0.2 via 192.168.1.1
192.168.1.1