我有一个简单的 openvpn 设置,客户端运行有一个redirect-gateway def1
选项。
以下是生成的路由表(VPN_SERVER_IP 是 VPN 服务器的公网 IP,本地网络是 192.168.127.0/24,VPN LAN 是 10.8.0.0/24):
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.49 128.0.0.0 UG 0 0 0 tun_tcpdec
0.0.0.0 192.168.127.1 0.0.0.0 UG 0 0 0 eth0
10.8.0.0 10.8.0.49 255.255.255.0 UG 0 0 0 tun_tcpdec
10.8.0.49 0.0.0.0 255.255.255.255 UH 0 0 0 tun_tcpdec
VPN_SERVER_IP 192.168.127.1 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.8.0.49 128.0.0.0 UG 0 0 0 tun_tcpdec
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.127.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
它能正常工作,所有流量都重定向到 VPN,但我不明白如何操作。假设我尝试 ping Cloudflare 的 DNS 1.1.1.1,第二条规则难道不应该只通过路由器发送数据包(规则 2)吗?
答案1
流量通过您的 VPN 流动,因为流量符合以下两个规则之一:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.49 128.0.0.0 UG 0 0 0 tun_tcpdec
128.0.0.0 10.8.0.49 128.0.0.0 UG 0 0 0 tun_tcpdec
该redirect-gateway def1
选项添加了这两条路由。这些路由用于转发流量,而不是第二条规则,因为这些规则更具体(网络掩码设置了一位,第二条规则中的网络掩码设置了零位)。
这意味着大约一半的互联网使用第一条规则转发,而另一半互联网使用第二条规则转发。
之所以采用这种方法,是因为它适用于大多数平台。另一种方法是使用路由表条目优先级,其中 OpenVPN 分配的默认路由将获得比其他默认网关更高的优先级。