了解 Windows 路由表和默认网关

了解 Windows 路由表和默认网关

注意:这是我的家庭计算机实验室,而不是商业/生产环境。我非常乐意将其破坏并再次修复,因此欢迎提出任何建议!

概括

我添加了这个简短摘要,因为这个问题变得相当长。如果您想了解有关路由表、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 地址选择

循环问题是由错误配置的路由器引起的,它使用不同的子网将数据包发回,而不是丢弃它们。

相关内容