我的 Windows 笔记本电脑直接连接到 192.168.1.0/24(无线局域网)。我通过连接到两个网络的路由器访问 10.21.0.0/16。此配置下路由运行正常。
我有一个 VPN,连接到 10.0.0.0/8。VPN 网络实际上不使用 10.21.0.0/16 范围内的任何 IP。因此,我应该能够配置我的路由表,以通过无线局域网路由所有 10.21.0.0/16 IP,并通过 VPN 路由所有其他 10.0.0.0/8。
我的理解是,如果 10.21.0.0 的度量低于 10.0.0.0,我就可以这样做。VPN(10.0.0.0)自动分配度量 20。我手动为 WLAN 分配了度量 1。我使用以下命令手动向路由表添加条目:
route add 10.21.0.0 mask 255.255.0.0 192.168.1.201 metric 1
然后为该路由分配一个度量 2(这是预期的)。
问题是它不起作用。我无法 ping 通 10.21.0.0 网络上的任何机器。但我可以访问 10.0.0.0 上的其他内容。我还可以访问 192.168.1.0 上的内容。
为了调试这个问题,我做了以下工作。
- 在路由器 (192.168.1.201) 上运行 tcpdump。我可以验证没有发往 10.21.0.0 的数据包到达该接口。
- 在路由器上禁用 iptables。禁用 Windows 防火墙。
- 在我的笔记本电脑上运行 wireshark,尝试查看 ping 请求发送到哪个接口。但我看不到它们发送到任何地方!!
- ping 命令没有收到任何“目标不可达”消息。
这是路由表的相关部分。
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.201 192.168.1.18 2
10.0.0.0 255.0.0.0 On-link 10.55.44.203 20
10.21.0.0 255.255.0.0 192.168.1.201 192.168.1.18 2
更新
根据要求,以下是输出route print 10.21.0.1
C:\>route print 10.21.0.1
===========================================================================
Interface List
17...02 50 f2 00 00 05 ......AGN Virtual Network Adapter
16...a0 88 b4 e1 8f 20 ......Intel(R) Centrino(R) Advanced-N 6205
1...........................Software Loopback Interface 1
10...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter
11...00 00 00 00 00 00 00 e0 Microsoft 6to4 Adapter
18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
47...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
None
Persistent Routes:
None
IPv6 Route Table
===========================================================================
Active Routes:
None
Persistent Routes:
None
C:\>
发现得不错,问题可能就出在这里。但遗憾的是,即使为我知道已启动的某台特定主机添加路由,也不起作用。
C:\>route print 10.*
===========================================================================
Interface List
17...02 50 f2 00 00 05 ......AGN Virtual Network Adapter
16...a0 88 b4 e1 8f 20 ......Intel(R) Centrino(R) Advanced-N 6205
1...........................Software Loopback Interface 1
10...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter
11...00 00 00 00 00 00 00 e0 Microsoft 6to4 Adapter
18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
47...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
10.0.0.0 255.0.0.0 On-link 10.76.206.8 20
10.21.0.0 255.255.0.0 192.168.1.201 192.168.1.18 2
10.21.61.1 255.255.255.255 192.168.1.201 192.168.1.18 2
10.76.206.0 255.255.255.0 On-link 10.76.206.8 276
10.76.206.8 255.255.255.255 On-link 10.76.206.8 276
10.76.206.255 255.255.255.255 On-link 10.76.206.8 276
10.255.255.255 255.255.255.255 On-link 10.76.206.8 276
===========================================================================
Persistent Routes:
None
C:\>ping 10.21.61.1
Pinging 10.21.61.1 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 10.21.61.1:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
如果我连接到路由器(192.168.1.201)并运行 tcpdump,则在笔记本电脑连接到的接口上看不到任何到 10.21.0.0/16 的数据包。
答案1
本地网络接口上有 10/8。Windows 不会尝试将数据包路由到 10/8 子网(10.21/16 是 10/8 的子网);根本不涉及路由。
答案2
您的路由表看起来是正确的。您的 VPN 网络过滤器驱动程序可能不使用路由表,而是将发往 10.21.0.0/16 的数据包直接路由到 VPN 适配器,甚至丢弃它们。
您可以尝试相同的配置,但在网络连接属性中禁用 VPN 过滤驱动程序吗?您应该在属性中看到 VPN 软件的项目,只需取消选中它并单击“确定”即可禁用它。下面的图片来自我的电脑,所以它没有。如果您也没有看到任何与 VPN 相关的项目,VPN 软件肯定使用路由表,因为我看不出它如何在没有自己的过滤驱动程序的情况下绕过它。
顺便说一下,我在电脑上添加了相同的路由,并用命令得到了类似的结果route print
,所以我不确定它们是否表明存在任何问题,尽管令人惊讶的是 10.21.0.1 没有匹配。我过滤了输出以仅显示相关部分。
C:\>route print 10.*
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
10.0.0.0 255.0.0.0 192.168.1.1 192.168.1.2 1
10.21.0.0 255.255.0.0 192.168.1.1 192.168.1.2 1
Default Gateway: 192.168.1.1
===========================================================================
Persistent Routes:
None
C:\>route print 10.21.*
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
10.21.0.0 255.255.0.0 192.168.1.1 192.168.1.2 1
Default Gateway: 192.168.1.1
===========================================================================
Persistent Routes:
None
C:\>route print 10.21.0.1
===========================================================================
Active Routes:
Default Gateway: 192.168.1.1
None
Persistent Routes:
None
始终优先选择具有最长匹配前缀的路由,因此在这种情况下路由度量不起作用。仅当存在两条具有相同前缀的路由时才使用度量。