Windows 系统中一块网卡可以有多个地址,比如通过 DHCPv6、SLAAC、临时 IPv6 或者手动分配的全局单播 IPv6 地址等。同时,连接到 Internet 上的网卡可能有多张,而这些网卡可能都拥有多个有效的全局单播 IPv6 地址。
如何确定哪个网络接口卡的哪个地址将用于默认路由无需真正建立互联网连接?
答案1
对于 PowerShell(至少是内置的 PowerShell 5)Find-NetRoute
,您必须指定要确定路由的目标,以及可选的源地址 - 该工具不假设默认路线将是唯一的路线。
Linux使用的技巧ip route get
是创建一个实际的 UDP 数据报套接字,将其绑定到指定目标,并在内核做出决定后读取套接字状态。此操作无需发送任何数据包即可完成。
答案2
必须配置默认网关。由于它位于驱动程序的设置中,因此无需连接互联网即可查询。如果 IP 地址是静态的,则即使没有任何网络连接也可以查询。
用于将流量转发到默认网关的 IP 接口是 IP 地址位于同一子网的接口。IPv4 将 DGW 指定为0.0.0.0/0
,IPv6将 DGW 指定为::0
。
可以配置多个 DGW,但如果配置了,则需要使用度量、权重或类似概念对它们进行优先级排序。多个具有相同优先级的 DGW 将导致连接问题。
假设这个多宿主系统:
+-----------------------+
| eth0 192.168.0.100/24|--
| |
| eth1 192.168.1.100/24|--
| |
| eth2 192.168.2.100/24|--
+-----------------------+
默认网关为 192.168.2.254。用于转发到 DGW 的 IP 接口为 192.168.2.100/24,因为它与 192.168.2.254 处于同一 IP 范围内。
现在假设这个单宿主系统在单个 NIC 上有多个 IP 接口:
+-----------------------+
| eth0 192.168.0.100/24|
| |
| eth1 192.168.1.100/24|--
| |
| eth2 192.168.2.100/24|
+-----------------------+
默认网关是 192.168.2.254。用于转发到 DGW 的 IP 接口再次是 192.168.2.100/24,因为它与 192.168.2.254 位于同一 IP 范围内。
物理接口只能有一个 IP 接口进入给定的 IP 地址范围。如果接口的 IP 为 192.168.0.100/24:
- 它不能在 192.168.0.0-255 范围内有另一个 IP 接口,因为该范围内已经有一个接口
- 它不能有另一个 IP 接口 192.168.1.100/23,因为 /23 IP 地址范围是 192.168.0.0-.1.255,并且它在该范围内已经有一个接口。
- 它不能有另一个 IP 接口 192.168.1.200/25,因为 192.168.1.200 在 /24 IP 范围内
- 它可以具有 /24 IP 范围之外的任何其他 IP 接口
在 PowerShell 中,可以通过多种方式查询 DGW,至少可以使用获取 NetIP 配置,获取NetRoute和获取 WmiObject. 更多信息和示例可参见此 Stack Overflow 线程以及以前的 Microsoft 链接。
有关子网和 CIDR 网络前缀的概述,请参阅我的回答这里,更多详细信息可在网上找到。