如何通过 Docker OpenVPN Client 转发网络流量?

如何通过 Docker OpenVPN Client 转发网络流量?

我当前的设置有一个运行 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.2tcpdump -nn -i any10.8.0.2172.18.0.1ip route add 172.18.0.2 via 192.168.1.1192.168.1.1

相关内容