![在 docker 中运行 openvpn 并用作其他联网设备的互联网网关](https://linux22.com/image/728789/%E5%9C%A8%20docker%20%E4%B8%AD%E8%BF%90%E8%A1%8C%20openvpn%20%E5%B9%B6%E7%94%A8%E4%BD%9C%E5%85%B6%E4%BB%96%E8%81%94%E7%BD%91%E8%AE%BE%E5%A4%87%E7%9A%84%E4%BA%92%E8%81%94%E7%BD%91%E7%BD%91%E5%85%B3.png)
我正在尝试通过在 Docker 容器内运行的 OpenVPN 客户端在我的 LAN 上运行隧道所有网络流量。
我的路由器和默认网关在 10.10.10.1 上运行
我在具有自己 IP 的 docker 容器中运行 OpenVPN,并且所有端口都在 10.10.10.25 上打开
OpenVPN 正在连接到我的 VPN 提供商 - 如果从正在运行的 docker 容器内部运行 traceroute,则流量会通过我的 VPN 正确路由 - curl 也能正常工作,正确路由流量。
但是,如果我将任何 LAN 设备上的默认网关设置为 10.10.10.25,则无法路由到互联网。
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
在 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)
ipv4 转发已启用,并且默认防火墙策略全部为接受
我也尝试使用以下命令对 docker 容器进行 NAT:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
但我仍然无法建立任何连接
一些说明:
- 如果 OpenVPN 没有运行,我可以通过 docker 容器路由流量:LAN 设备 -> 10.10.10.25 -> 10.10.10.1 -> WAN
- OpenVPN 正确设置了路由,因为我能够从 docker 容器内部正确访问互联网
- 运行 OpenVPN 后仍可通过 10.10.10.25 访问 LAN