![具有两个 NIC 的 Windows 服务器上的数据包路由](https://linux22.com/image/609897/%E5%85%B7%E6%9C%89%E4%B8%A4%E4%B8%AA%20NIC%20%E7%9A%84%20Windows%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%E8%B7%AF%E7%94%B1.png)
这个问题让我很困惑。我在 Google 上搜索过,但既没有提到这种行为,也没有解释。也许我使用了错误的搜索词。我在这个网站上读过很多问题的解决方案,但这是我第一次发布问题。
我有几台 Windows 2008R2 服务器,每台服务器都配置了两个 NIC。第一个 NIC 是公用的,其 IP 地址在公用域中,第二个 NIC 的 IP 地址在专用域 10.0.0.0/8 中。专用 IP 的用途是用于集群 (Oracle RAC),因此专用 NIC 只能由 Oracle 访问,并且名称解析通过 hosts 文件完成。
第一块网卡配置了默认网关和DNS服务器,第二块网卡只有IP地址和子网掩码,配置的IP地址为10.1.8.1/255.0.0.0。
在此服务器上,如果我对 10.185.1.44(我们网络上的另一台服务器)进行 tracert,第一次会失败。第二次会成功。此行为在任何具有两个 NIC 的服务器上都是一致的且可重现。
从以下输出可以看出,在第一次尝试中,Windows 尝试将数据包路由到私有接口并失败。在第二次尝试中,Windows 将数据包路由到公共接口并且 tracert 成功。出于安全考虑,我删除了实际的公共 IP 地址。
问题 1:为什么 Windows 第一次尝试通过私有 NIC 访问 10.185.1.44,第二次尝试使用公共 NIC?
Q2:第二个观察结果是,一旦 tracert 成功,如果我在大约 2 分钟内进行下一次 tracert,它就会成功。如果我在大约 3 分钟后尝试下一次 tracert,它会第一次失败,然后成功。
IPv6 已完全禁用。适配器的绑定顺序为先公有,后私有。
tracert 10.185.1.44
Tracing route to 10.185.1.44 over a maximum of 30 hops
1 myserver.mydomain.com [10.1.8.1] reports: Destination host unreachable.
Trace complete.
tracert 10.185.1.44
Tracing route to 10.185.1.44 over a maximum of 30 hops
1 3 ms <1 ms <1 ms default gateway on public NIC
2 <1 ms <1 ms <1 ms next hop IP
3 2 ms 1 ms 1 ms next hop IP
4 2 ms 2 ms 2 ms next hop IP
5 3 ms 2 ms 2 ms next hop IP
6 4 ms 2 ms 3 ms next hop IP
7 2 ms 3 ms 2 ms next hop IP
8 2 ms 2 ms 2 ms next hop IP
9 3 ms 2 ms 2 ms 10.185.1.44
Trace complete.
任何对此现象的解释都将受到赞赏。
答案1
您需要阅读帖子“子网划分如何工作”。由于您使用的子网掩码非常大,因此尽管您的两个 NIC 的八位字节非常不同,但它们实际上位于同一子网中。由于您的默认网关可以通过任一子网访问,因此当第一个 NIC 发生故障时,系统会使用备用 NIC 尝试到达目的地。
10.1.8.1/8 和 10.185.1.44/8 位于同一子网。如果您想保持简单,只需使用不同的 RFC1918 空间,如 172.16.0.0/12 或 192.168.0.0/16 网络。