我正在尝试通过 Ubuntu 服务器上的 VPN 隧道路由来自 Docker 容器的流量,但遇到了路由问题。以下是设置以及我迄今为止尝试过的方法:设置:Docker
我正在尝试通过 Ubuntu 服务器上的 VPN 隧道路由来自 Docker 容器的流量,但遇到了路由问题。以下是设置以及我迄今为止尝试过的方法:
设置:
p3
p4
p5
p6
p7
p8
p9
当前路由和 IP 规则:
$ ip route show
default via 192.168.200.1 dev vti1
172.20.0.0/16 via 192.168.200.1 dev vti1
root@dockeronubuntu2204-s-1vcpu-1gb-ams3-01:~# ip route show
default via 142.93.128.1 dev eth0 proto static
10.18.0.0/16 dev eth0 proto kernel scope link src 10.18.0.5
10.110.0.0/20 dev eth1 proto kernel scope link src 10.110.0.2
10.129.20.0/27 dev vti1 scope link
142.93.128.0/20 dev eth0 proto kernel scope link src 142.93.141.70
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-db5a54d34c53 proto kernel scope link src 172.18.0.1 linkdown
172.20.0.0/16 dev br-60ce34a14131 proto kernel scope link src 172.20.0.1
192.168.200.0/24 via 192.168.200.1 dev vti1
$ ip route show table vpn
default via 192.168.200.1 dev vti1
172.20.0.0/16 via 192.168.200.1 dev vti1
$ ip rule show
0: from all lookup local
216: from 172.20.0.0/16 lookup vpn
217: from 172.18.0.0/16 lookup vpn
218: from 192.168.96.0/20 lookup vpn
220: from all lookup 220
32766: from all lookup main 32767: from all lookup default
ip addr show vti1
给出:
18: vti1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/ipip 192.168.200.1 peer 10.129.20.2
inet 192.168.200.1/24 scope global vti1
valid_lft forever preferred_lft forever
inet 192.168.200.2/24 scope global secondary vti1
valid_lft forever preferred_lft forever
inet6 fe80::5efe:c0a8:c801/64 scope link
valid_lft forever preferred_lft forever
问题: 从 IP 为 的容器 192.168.200.1
ping 时 172.20.0.2
,流量似乎没有通过 VPN 路由,我使用 进行了检查 tcpdump -i vti1
。另一方面,尝试 ping 时 192.168.200.0
,我确实看到流量通过 vti1
,并且 ping 返回: From 192.168.200.1 icmp_seq=1 Destination Host Unreachable.
有人知道我错过了什么吗?在我看来,vpn 接口没有正确配置来处理通过 192.168.200.0/24 的流量,尽管我对 IT 还很陌生,不知道该去哪里解决这个问题。
附加信息:
第15页
p16
要通过 Ubuntu 服务器上的 VPN 隧道路由来自 Docker 容器的流量,您似乎已经接近解决方案,但可能需要进行一些调整。以下是您可以检查和调整的一些事项:
vti1
)配置正确,以便在 Docker 容器子网( 172.20.0.0/16
)和远程网络之间路由流量。
172.20.0.0/16
子网的数据包。
172.20.0.0/16
子网的流量应该使用该 vpn
表。但是,您需要确保 VPN 本身知道如何路由往返于此子网的流量。
ip rule show
)和路由( ip route show
)是否设置正确。
考虑像这样调整路由表:
ip route add 172.20.0.0/16 via 192.168.200.1 dev vti1 table vpn
ip rule add from 172.20.0.0/16 lookup vpn
iptables -t nat -A POSTROUTING -s 172.20.0.0/16 -o vti1 -j MASQUERADE
vti1
) 具有正确的 MTU 设置。不正确的 MTU 可能会导致数据包被悄悄丢弃。
ip link set dev vti1 mtu 1400
MTU 值 1400 是一个常见的安全值,但您可能需要根据您的 VPN 提供商进行调整。
tcpdump
使用 vti1
来检查来自 Docker 容器的数据包是否确实通过 VPN 出去。
ping
从 traceroute
容器内部查看数据包是如何被路由的。
tcpdump -i vti1
ping -I 172.20.0.2 192.168.200.1
172.20.0.0/16
子网的路由。
iptables
或 ufw
验证并调整防火墙规则。
iptables -L -v -n
ufw status
您可能需要调整 NAT 设置并确保正确应用路由规则。如果执行这些步骤后流量仍无法通过,则问题可能在于 VPN 本身的配置方式或远程 VPN 端点上的路由。