![无法使用 VPN 客户端更改路由](https://linux22.com/image/1389922/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20VPN%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%9B%B4%E6%94%B9%E8%B7%AF%E7%94%B1.png)
我的 VPN 连接强制所有互联网流量通过隧道,这非常慢。我希望能够只通过隧道传输某些 IP 地址,并在我这边(客户端)执行此操作。
我正在使用 VPN 连接FortiSSL 客户端,在建立连接之前,路由表如下所示:
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.101 40
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.0.0 255.255.255.0 On-link 192.168.0.101 276
192.168.0.101 255.255.255.255 On-link 192.168.0.101 276
192.168.0.255 255.255.255.255 On-link 192.168.0.101 276
192.168.119.0 255.255.255.0 On-link 192.168.119.1 276
192.168.119.1 255.255.255.255 On-link 192.168.119.1 276
192.168.119.255 255.255.255.255 On-link 192.168.119.1 276
192.168.221.0 255.255.255.0 On-link 192.168.221.1 276
192.168.221.1 255.255.255.255 On-link 192.168.221.1 276
192.168.221.255 255.255.255.255 On-link 192.168.221.1 276
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.119.1 276
224.0.0.0 240.0.0.0 On-link 192.168.221.1 276
224.0.0.0 240.0.0.0 On-link 192.168.0.101 276
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.119.1 276
255.255.255.255 255.255.255.255 On-link 192.168.221.1 276
255.255.255.255 255.255.255.255 On-link 192.168.0.101 276
连接后如下所示:
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.101 4265
0.0.0.0 0.0.0.0 On-link 172.16.0.1 21
127.0.0.0 255.0.0.0 On-link 127.0.0.1 4531
127.0.0.1 255.255.255.255 On-link 127.0.0.1 4531
127.255.255.255 255.255.255.255 On-link 127.0.0.1 4531
172.16.0.1 255.255.255.255 On-link 172.16.0.1 276
192.168.0.0 255.255.255.0 On-link 192.168.0.101 4501
192.168.0.101 255.255.255.255 On-link 192.168.0.101 4501
192.168.0.255 255.255.255.255 On-link 192.168.0.101 4501
192.168.119.0 255.255.255.0 On-link 192.168.119.1 4501
192.168.119.1 255.255.255.255 On-link 192.168.119.1 4501
192.168.119.255 255.255.255.255 On-link 192.168.119.1 4501
192.168.221.0 255.255.255.0 On-link 192.168.221.1 4501
192.168.221.1 255.255.255.255 On-link 192.168.221.1 4501
192.168.221.255 255.255.255.255 On-link 192.168.221.1 4501
200.250.246.74 255.255.255.255 192.168.0.1 192.168.0.101 4245
224.0.0.0 240.0.0.0 On-link 127.0.0.1 4531
224.0.0.0 240.0.0.0 On-link 192.168.119.1 4502
224.0.0.0 240.0.0.0 On-link 192.168.221.1 4502
224.0.0.0 240.0.0.0 On-link 192.168.0.101 4502
224.0.0.0 240.0.0.0 On-link 172.16.0.1 21
255.255.255.255 255.255.255.255 On-link 127.0.0.1 4531
255.255.255.255 255.255.255.255 On-link 192.168.119.1 4501
255.255.255.255 255.255.255.255 On-link 192.168.221.1 4501
255.255.255.255 255.255.255.255 On-link 192.168.0.101 4501
255.255.255.255 255.255.255.255 On-link 172.16.0.1 276
VPN 客户端设置了一个捕获所有路由,其度量值低于我所有其他路由,这会将所有互联网流量路由通过隧道。我尝试将默认互联网路由的度量值更改为较低的值:
C:\Windows\system32>route change 0.0.0.0 mask 0.0.0.0 192.168.0.1 metric 10 if 13
OK!
但什么都没改变。
然后我尝试删除 VPN 的“catch-all”路由,即上面度量为 21 的路由:
C:\Windows\system32>route delete 0.0.0.0 mask 0.0.0.0 if 50
OK!
它打破了一切:
C:\Windows\system32>ping 8.8.8.8
Pinging 8.8.8.8 with 32 bytes of data:
PING: transmit failed. General failure.
我也尝试更改适配器上的度量,但是 FortiSSL 客户端在连接时会覆盖所有设置,所以没有帮助。
解决方案必须由我这边来承担,因为另一边的人需要几天的时间才能做出回应。
如果有帮助的话,我正在运行 Windows 7 x64。
-- 更新 (2013-12-24) --
谢谢布朗尼的提示,我检查了这个问题罗希塔布并发现 FortiSSL 客户端通过NotifyRouteChange
IP Helper API 调用监视路由表。
我在通话前设置了一个断点NotifyRouteChange
,并使用选项“跳过通话”成功阻止 FortiSSL 重置路由指标,现在我有:
然而,当我运行 tracert 时,我的路由仍然通过 VPN 出去:
C:\Windows\system32>tracert www.google.com
Tracing route to www.google.com [173.194.118.83]
over a maximum of 30 hops:
1 45 ms 47 ms 45 ms Jurema [172.16.0.1]
我不知道 Windows 网络是否有任何方面可以支持某条路线,即使路线打印的指标表明并非如此?
答案1
请注意,我在这里没有使用常规的网络符号进行寻址(例如 CIDR 或甚至host/mask
符号,以免让提问者感到困惑)。
不要删除您的“默认网关”路由(0.0.0.0 mask 0.0.0.0
),这样您的网络堆栈就不知道将大多数数据包发送到哪里,而是尝试将 VPN 路由的度量提高到低于默认路由的度量(在本例中4265
)。
连接 Fortigate 客户端后:
route change 0.0.0.0 mask 0.0.0.0 172.16.0.1 metric 4266 if N
fortissl
其中 N 是开头返回的接口的接口号route print
。
网络堆栈应该正确处理这个问题:
- “包含目标地址”的路由将处理数据包(该路由告诉网络堆栈发送发往的数据包以
this IP
进行this gateway
进一步路由)。 - 所有带有目标 IP 的数据包都
172.16.*.*
将发送到 VPN;因为 Windows 网络堆栈知道,如果某个接口上附加了地址,则该接口就是您访问该地址范围内其他 IP 的方式。如果您发布“子网掩码”,我可以更清楚地了解该范围172.16.0.1
。
您必须确定需要通过 VPN 访问的资源的 IP 地址。您可以nslookup [hostname of resource]
在连接时使用,无需调整路由,轻松完成此操作。
[咆哮]
我不反对通过 VPN 进行拆分隧道,特别是考虑到您提到的使用问题。如果您的 IT 部门认为拆分隧道是一种安全机制,那么他们需要重新考虑他们正在做的事情:
- VPN 客户端对资源的访问应该被隔离并受到严格限制,就像通过 Internet 访问一样(因为您无法完全控制的资产比您可以完全控制的资产具有更高的风险)。
- 他们应该为 VPN 客户端集成网络访问控制机制。这样他们就可以在客户端机器上执行某些策略(例如“防病毒定义是否是最新的?”等等)。
- 考虑使用如下刚性解决方案Fortigate SSL VPN 虚拟桌面(使用 SSL VPN 许可证,配置起来相当容易,而且免费 [我认为])。
[/咆哮]