注意:这是我的家庭计算机实验室,而不是商业/生产环境。我很高兴打破它并再次修复它,所以欢迎任何建议!
概括
我添加了这个快速摘要,因为这个问题越来越长。如果您想了解有关路由表、IP 配置等的更多详细信息,请查看以下内容。
我的电脑上有几个网卡。一个 NIC 是 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 机器的“正常行为”,但我很好奇它是否可以停止。
我创建了一个 Ubuntu VM,其配置与我的 Windows VM 相同 - Ubuntu VM 不会像 Windows VM 那样回退到默认路由。我在这篇文章的底部添加了 Ubuntu VM 和 Windows 8.1 VM 的路由表和结果。
更多细节
我已经对这个主题进行了广泛的搜索,我见过的最接近的问题是:Routing loop: TTL expired in transport,但不幸的是,它没有回答如何停止问题或改变计算机上的行为。答案建议修复路由。我可以更改我的路由器以丢弃所有发往私有 IP 地址的内容(或将其转发到我室友的 IP,呵呵),但这不会改变我计算机的行为。(我还阅读了原始答案中引用的很棒的子网划分指南,可以在https://serverfault.com/questions/49765/how-does-ipv4-subnetting-work找到)
我无法理解为什么我的计算机在尝试使用其内部适配器(短期)后会尝试通过 Internet 连接到私有 IP 地址然后失败 - 例如,在尝试 ping …