如何强制 Windows 使用 IPv4 以太网连接

如何强制 Windows 使用 IPv4 以太网连接

所以我想知道为什么 Windows 更喜欢我糟糕的 wifi 连接而不是以太网,这与接口指标无关。事实证明,我的以太网不支持 IPv6,但我的 Wifi 却支持,因此 Windows 认为它​​是合适的网络。

但是,即使 wifi 支持 IPv6,它仍然很糟糕,我可以强制 Windows 优先使用以太网连接,并且仅在需要 IPv6 时才使用 wifi 连接吗?再次,我尝试弄乱接口指标,但它不起作用,因为尽管以太网(无 IPv6)的指标较低,但 Windows 仍然更喜欢使用 IPv6 连接。

我知道这一点,因为一旦我关闭 Wifi 的 IPv6,Windows 就会优先使用我的以太网连接。因此,总结一下,或者说 tldr:

  • Wifi 很烂,但支持两个 IP 版本,Windows 喜欢这个
  • 以太网速度极快,但不支持 IPv6,Windows 不喜欢这一点
  • 当 IPv6 发挥作用时,如何强制 Windows 使用以太网和仅使用 Wifi?(接口度量不起作用)

答案1

IPv6 本身并不会导致无线连接不良,因此通常不应将其从现代 Windows 系统中删除。

如果您的无线网络内部连接到使用 IPv4 的路由器(192.168.1.x),那么它已经在使用 IPv4。

一些蜂窝连接现在是 IPv6。

为您的 Windows 机器获取更新的驱动程序,卸载无线,重新启动计算机,安装更新的驱动程序,然后测试看是否更好。

检查无线路由器中的固件,看是否需要更新。

然后,如果您同时拥有以太网和无线,并且希望推迟到以太网,请确保度量标准(网络连接中的高级 TCP/IP 属性)设置为自动。

完成上述所有操作后您可能希望重新启动。

答案2

这是一个更复杂的问题,因为并不总是视窗做出此决定,因此并不总是 Windows 必须被迫选择其中一个(也就是说,除了完全禁用 IPv6)。

在 Windows 中,当主机名查找返回多个地址时,操作系统会使用“地址标签”或“前缀策略”机制对它们进行排序。例如,“6to4”和“site-local”IPv6 地址范围优先以下IPv4,但 IPv6 的其余部分是多于IPv4。(除非您的计算机的唯一地址也是 6to4 地址。“匹配标签”部分会增加一些复杂性。)

在 Windows 上,您可以使用netshGet-NetPrefixPolicy查看优先级列表(在 Linux 上,该文件/etc/gai.conf具有相同的功能)。

netsh interface ipv6 show prefixpolicies

要使 IPv4 优先于 IPv6,您可以为前缀::ffff:0:0/96(代表 IPv6 映射的 IPv4 地址)添加更高的优先级:

netsh interface ipv6 add prefixpolicy prefix=::ffff:0:0/96 precedence=100 label=4

现在,它的优先级将高于::/0代表 IPv6 和 IPv4 整体的 catch-all 条目。(此前缀的原始优先级为 35,而 ::/0 的优先级为 40。)

但是,并非所有程序都使用操作系统提供的顺序。特别是浏览器,它使用所谓的“快乐眼球”算法(该算法有几个版本),同时启动 IPv4 和 IPv6 连接,并使用最先建立的连接。根据版本的不同,连接可能会同时启动,或者IPv6 可能会抢占先机,无论哪种情况,通常都会忽略“前缀策略”顺序。

如果程序实现了自己的地址排序,那么你可能会倒霉。

如果您只需要 IPv6特定目的地,那么有一个重度选项,即删除 IPv6 的“默认路由”,并仅为这些目的地静态配置路由。(这假设您的网关 IP 地址不会改变,也就是说希望大多数路由器都是这种情况。

netsh interface ipv6 set interface "Wi-Fi" ignoredefaultroutes=enable
route -6 del ::/0
route -6 -p add 2001:db8::/48 fe80::<gateway_address> if <wifi_interface_index>

(但请注意,没有默认路由可能会导致某些程序(如 Chrome)完全避免使用 IPv6 - 即使对于您有特定路线。)

最后,你可以禁用 IPv6全部您的接口,因为到目前为止还没有流行的服务是仅支持 IPv6 的;所以除非你需要 IPv6 用于特定目的地,否则你基本上只是失去了入站连接。(假设您的两个 ISP 都以正常方式提供 IPv4,而不是通过 NAT64 或类似机制。)

相关内容