注意:这是我的家庭计算机实验室,而不是商业/生产环境。我非常乐意将其破坏并再次修复,因此欢迎提出任何建议!
概括
我添加了这个简短摘要,因为这个问题变得相当长。如果您想了解有关路由表、IP 配置等的更多详细信息,请查看下文。
我的电脑上有几块网卡。一块网卡是 172.16.200.1 / 24。当我尝试 ping 172.16.200.2(网络上存在的主机)时,我得到了回复。到目前为止一切顺利。
当我尝试连接到 172.16.200.5(或任何其他不存在的主机)时,计算机将返回到我的默认路由(通过我的默认网关 192.168.0.1 的 0.0.0.0)- 然后它将由我的家庭路由器发送出去,然后在我的 ISP 网络中的路由循环中丢失。如果需要,下面会提供更多详细信息,但我猜已经有一位专家可以回答这个问题了...
我的问题是:
如何停止我的计算机后退当网络上的主机没有响应时,将路由转发到专用网络的默认网关。这些专用网络已经具有具有较低度量的显式路由。
我已经在几台机器(Server 2008 R2、Windows 7、Hyper-V Server 2012 R2、Windows Server 2012)上测试过此问题,它们的行为都一样。我开始接受这是 Windows 机器的“正常行为”,但我很好奇是否可以停止这种情况。
我创建了一个与 Windows VM 配置相同的 Ubuntu VM - Ubuntu VM 不会像 Windows VM 那样回退到默认路由。我在本文末尾添加了 Ubuntu VM 和 Windows 8.1 VM 的路由表和结果。
更多细节
我已经对这个问题进行了广泛的搜索,我见过的最接近的问题是:路由循环:TTL 在传输过程中过期,但不幸的是它没有回答如何停止问题或改变电脑的行为。答案建议修复路由。我可以更改路由器以丢弃发往私有 IP 地址的所有内容(或将其转发到我室友的 IP,呵呵),但这不会改变我的电脑的行为。(我还阅读了原始答案中引用的很棒的子网划分指南,可以在以下位置找到https://serverfault.com/questions/49765/how-does-ipv4-subnetting-work)
我无法理解为什么我的计算机在尝试使用其内部适配器(短时间)后会尝试通过互联网连接到私有 IP 地址,然后失败 - 例如,尝试 ping 我知道不在我的网络上的主机……
Pinging 172.16.200.32 with 32 bytes of data:
Reply from 172.16.200.1: Destination host unreachable.
Reply from 203.29.XXX.YY: TTL expired in transit.
Reply from 203.29.XXX.YY: TTL expired in transit.
Reply from 203.29.XXX.YY: TTL expired in transit.
Ping statistics for 172.16.200.32:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
但对一个确实存在的主机进行 ping 操作却成功了……
Pinging 172.16.200.2 with 32 bytes of data:
Reply from 172.16.200.2: bytes=32 time<1ms TTL=128
Reply from 172.16.200.2: bytes=32 time<1ms TTL=128
Reply from 172.16.200.2: bytes=32 time<1ms TTL=128
Reply from 172.16.200.2: bytes=32 time<1ms TTL=128
Ping statistics for 172.16.200.2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
好的,那么来自 172.16.200.1 的回复就是我的计算机说没有收到回复……但是,为什么甚至尝试通过我的互联网连接进行连接?我有 4 个 NIC,其中一个位于 172.16.200.0 / 24 网络上……
Ethernet adapter HyperV External (built in):
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::582c:97
IPv4 Address. . . . . . . . . . . : 172.16.1.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Ethernet adapter Expansion-2 (middle) HomeNetwork:
Connection-specific DNS Suffix . : Home
IPv4 Address. . . . . . . . . . . : 192.168.0.117
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
Ethernet adapter Expansion-3 (bottom) iSCSI-1 :
Connection-specific DNS Suffix . :
IPv4 Address. . . . . . . . . . . : 172.16.100.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Ethernet adapter Expansion-1 (top) iSCSI-2:
Connection-specific DNS Suffix . :
IPv4 Address. . . . . . . . . . . : 172.16.200.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
因此,此时,查看路由表是有意义的……
===========================================================================
Interface List
16...64 70 02 00 1f 03 ......Gigabit PCI Express Network Adapter #2
15...64 70 02 00 40 48 ......Gigabit PCI Express Network Adapter
23...00 24 1d 1d f8 35 ......TST Onboard
17...64 70 02 00 32 c1 ......Gigabit PCI Express Network Adapter #3
1...........................Software Loopback Interface 1
28...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
26...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
13...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
27...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
29...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #4
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.117 410
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
172.16.1.0 255.255.255.0 On-link 172.16.1.1 266
172.16.1.1 255.255.255.255 On-link 172.16.1.1 261
172.16.1.255 255.255.255.255 On-link 172.16.1.1 261
172.16.100.0 255.255.255.0 On-link 172.16.100.1 266
172.16.100.1 255.255.255.255 On-link 172.16.100.1 266
172.16.100.255 255.255.255.255 On-link 172.16.100.1 266
172.16.200.0 255.255.255.0 On-link 172.16.200.1 266
172.16.200.1 255.255.255.255 On-link 172.16.200.1 266
172.16.200.255 255.255.255.255 On-link 172.16.200.1 266
192.168.0.0 255.255.255.0 On-link 192.168.0.117 266
192.168.0.117 255.255.255.255 On-link 192.168.0.117 266
192.168.0.255 255.255.255.255 On-link 192.168.0.117 266
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.0.117 266
224.0.0.0 240.0.0.0 On-link 172.16.100.1 266
224.0.0.0 240.0.0.0 On-link 172.16.200.1 266
224.0.0.0 240.0.0.0 On-link 172.16.1.1 261
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.0.117 266
255.255.255.255 255.255.255.255 On-link 172.16.100.1 266
255.255.255.255 255.255.255.255 On-link 172.16.200.1 266
255.255.255.255 255.255.255.255 On-link 172.16.1.1 261
===========================================================================
Persistent Routes:
None
我首先认为 0.0.0.0 路由的度量是罪魁祸首 - 它最初是 6,所以我尝试将其更改为 410,但这并没有改变行为。(顺便说一句,我以前从未弄乱过这台机器上的路由表)。然后,我将它与我在 3 个相同网络(172.16.1.0、172.16.100.0 和 172.16.200.0)上的 Hyper-V 2012 R2 机器进行了比较,我注意到 Hyper-V 机器的 0.0.0.0 路由的度量也是 6,所以我猜这是正常且正确的……
然后我尝试将 172.16.200.0 更改为持久路由,如下所示,但仍然不起作用。
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
172.16.200.0 255.255.255.0 172.16.1.1 1
===========================================================================
我也尝试过增加度量(我知道越低越好,但以防万一,是吗?)……当然,没有运气。
在网络连接窗口的“高级设置”中,我已确认 192.168.0.117 适配器在适配器和绑定顺序中处于最低位置……
所以,经过一番思考,我被难住了。显然删除 0.0.0.0 路由可以阻止它,但当然它也会阻止我的互联网……
当我的机器尝试访问 172.16.200.0 上的主机时,我该如何阻止它尝试通过默认网关 192.168.0.1?
http://technet.microsoft.com/en-us/library/cc779122%28v=ws.10%29.aspx(“IP 路由表:TCP/IP”)似乎表明“默认路由通常将 IP 数据报(没有匹配或明确的本地路由)转发到本地子网上路由器的默认网关地址。”我可以通过该路由获得更明确的信息!
答案在这里Windows 持久路由网关不可用,因此使用默认路由这表明这是正常行为 - 当添加持久路由时,它会尝试使用该路由(如果可能),但如果路由失败,则会返回到默认路由。这肯定会带来一些相当严重的流量问题,更不用说安全问题(私人信息泄露到互联网上,或者至少是您的 ISP 专用网络……)
一些附加信息:此服务器通常运行 NPS/RRAS - 禁用它,甚至删除它都没有任何作用。此外,我创建了一个全新的 2008 R2 VM,给它两个 NIC,一个直接在 192.168.0.0 网络上,另一个在 172.16.200.0 网络上,它做了同样的事情……我希望你能看出我花了一些时间在这上面。
我已将家用路由器设置为将所有 172.16.XX 内容转发回我自己的计算机,但这是一种解决方法……
我是不是遗漏了什么?也许是一些显而易见的事情?我是不是在要求不可能的事情?
[更新 #1 和 #2]
我检查了路由器上的每一个配置位,但它似乎无法处理任何代理 ARP 请求 - 甚至没有我能看到的任何设置。
我使用 MS Network Monitor 3.4 测试路由器是否响应 ARP 请求,但并没有响应。当我尝试 ping 不存在的主机时,我可以看到发出的 ARP 请求,但我没有收到任何 ARP 响应。ping 存在的主机时,自然会得到 ARP 响应。此时是否可以安全地假设我的路由器没有处理代理 ARP 请求?
路由器上的路由表如下:
> route show
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.20.21.36 * 255.255.255.255 UH 0 0 0 ppp0
192.168.0.0 * 255.255.255.0 U 0 0 0 br0
default * 0.0.0.0 U 0 0 0 ppp0
我添加了以下条目作为临时的权宜之计 - 它可以阻止我可怜的“丢失”数据包进入我的 ISP:
172.16.1.0 192.168.0.117 255.255.255.0 UG 1 0 0 br0
172.16.100.0 192.168.0.117 255.255.255.0 UG 1 0 0 br0
172.16.200.0 192.168.0.117 255.255.255.0 UG 1 0 0 br0
[更新 #3 - 添加了 Ubuntu 和 Win8.1 VM 路由表]
好的,所以我创建了一个全新的 Ubuntu VM 和一个全新的 Windows 8.1 VM。Ubuntu VM 不会尝试回退到其 0.0.0.0 路由,但 Windows 8.1 会。我尝试了旧的 ping-a-non-existant-host 并观察了 172.16.1.1 路由器上的流量。它接收来自 Windows 8.1 VM 的 ICMP 请求并将其传递,但它从未看到来自 Ubuntu VM 的任何 ICMP 流量。
Ubuntu VM 表如下:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
0.0.0.0 172.16.1.1 0.0.0.0 UG 0 0 0 eth0 0 0 0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1 0 0 0
172.16.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 0 0 0
172.16.200.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1 0 0 0
Windows 8.1 表格如下:
===========================================================================
Interface List
9...00 15 5d 01 4c 1c ......Microsoft Hyper-V Network Adapter #2
3...00 15 5d 01 4c 08 ......Microsoft Hyper-V Network Adapter
1...........................Software Loopback Interface 1
4...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.1.1 172.16.1.101 5
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
172.16.1.0 255.255.255.0 On-link 172.16.1.101 261
172.16.1.101 255.255.255.255 On-link 172.16.1.101 261
172.16.1.255 255.255.255.255 On-link 172.16.1.101 261
172.16.200.0 255.255.255.0 On-link 172.16.200.1 261
172.16.200.1 255.255.255.255 On-link 172.16.200.1 261
172.16.200.255 255.255.255.255 On-link 172.16.200.1 261
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 172.16.1.101 261
224.0.0.0 240.0.0.0 On-link 172.16.200.1 261
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 172.16.1.101 261
255.255.255.255 255.255.255.255 On-link 172.16.200.1 261
===========================================================================
Persistent Routes:
None
答案1
自 Vista 以来,故障恢复到默认路由是正常行为,您可以在以下文章中阅读相关内容: 多宿主 Windows 计算机上的源 IP 地址选择。
循环问题是由错误配置的路由器引起的,它使用不同的子网将数据包发回,而不是丢弃它们。