![了解 OpenVPN 的路由表](https://linux22.com/image/126589/%E4%BA%86%E8%A7%A3%20OpenVPN%20%E7%9A%84%E8%B7%AF%E7%94%B1%E8%A1%A8.png)
我把材料取自如何理解 OpenVPN 客户端上的路由表。
这是路由表:
# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
54.202.18.143 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
0.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
我配置了 OpenVPN,但我对两件事感到困惑:
- 通过 tun0 的 TCP 数据包
- 通过 54.202.18.143(公共 VPN IP)的 UDP OpenVPN 数据包
问题:
- 为什么 OpenVPN 需要这一行:
54.202.18.143 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
? - 哪些数据包通过 tun0?
- 哪些数据包通过 54.202.18.143?
感谢您的帮助!
答案1
困惑:
- 流经的不仅仅是 TCP 数据包
tun0
。也可能是 UDP 和 ICMP。 - UDP 是封装 OpenVPN 流量的协议
问题解答:
这是一条通往 VPN 网关的显式路由(确保
255.255.255.255
与54.202.18.143
该 IP 地址完全匹配:仅此而已):54.202.18.143 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
我假设这
10.0.2.2
是您的 LAN 路由器,因此这告诉您的客户端 VPN 端点的所有流量都将通过您的路由器发送eth0
(以及向前)。这可以确保,因为您的伪默认路由已更新为通过 VPN 发送所有流量,所以封装的数据包本身也不会通过 VPN 进行路由。 (就像蛇吃尾巴一样,这不是一个好的情况。)伪默认路由由这两行构建:
0.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0 128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
这些线路的优先级高于实际默认路由,但低于路由表中任何其他线路的优先级。它们一起匹配除与路由表中其他行匹配的流量之外的所有流量。
- 除 OpenVPN UDP 封装流量外的所有数据包都将经过 tun0
- 只有 OpenVPN UDP 封装流量将通过 54.202.18.143。