在 docker 中运行 openvpn 并用作其他联网设备的互联网网关

mrw*_*ter 5 vpn openvpn tunnel docker

我正在尝试通过运行在 docker 容器内的 OpenVPN 客户端在我的 LAN 上运行隧道所有网络流量。

我的路由器和默认网关在 10.10.10.1 上运行

我在一个 docker 容器中运行 OpenVPN,它有自己的 IP,所有端口都在 10.10.10.25 上打开

OpenVPN 正在连接到我的 VPN 提供商 - 如果从正在运行的 docker 容器内部运行 traceroute,流量将通过我的 VPN 正确路由 - curl 也可以正常工作,正确路由流量。

但是,如果我将任何 LAN 设备上的默认网关设置为 10.10.10.25,则无法路由到 Internet。

OpenVPN docker 容器中的路由是:

0.0.0.0/1 via 10.8.8.1 dev tun0
default via 10.10.10.1 dev eth0
10.8.8.0/24 dev tun0  proto kernel  scope link  src 10.8.8.46
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.25
128.0.0.0/1 via 10.8.8.1 dev tun0
172.83.40.68 via 10.10.10.1 dev eth0
Run Code Online (Sandbox Code Playgroud)

在 OpenVPN 容器中运行的 Ifconfig 给出:

eth0      Link encap:Ethernet  HWaddr 02:42:0A:0A:0A:19
          inet addr:10.10.10.25  Bcast:10.10.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2377 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1984 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:370083 (361.4 KiB)  TX bytes:523356 (511.0 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:74 errors:0 dropped:0 overruns:0 frame:0
          TX packets:74 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5769 (5.6 KiB)  TX bytes:5769 (5.6 KiB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.8.46  P-t-P:10.8.8.46  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:27 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1606 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2274 (2.2 KiB)  TX bytes:241166 (235.5 KiB)
Run Code Online (Sandbox Code Playgroud)

启用ipv4转发,默认防火墙策略全部ACCEPT

我还尝试使用以下命令在 docker 容器上进行 NATing:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

但我仍然无法获得任何连接

一些注意事项:

  • 如果 OpenVPN 未运行,我可以通过 docker 容器路由流量:LAN 设备 -> 10.10.10.25 -> 10.10.10.1 -> WAN
  • OpenVPN 正确设置了路由,因为我能够从 docker 容器内部正确访问互联网
  • LAN 仍然可以通过运行 OpenVPN 的 10.10.10.25 访问