Why?

不想看废话的可以直接跳到这里
随着互联网的发展,IPv4 在各个方面都已无法满足日益增长的需求,作为它的接任者————新一代的 IP 协议 IPv6 应运而生.
我们正处在 IPv4 和 IPv6 并存的过渡阶段,目前主流设备都已支持 IPv6,国内几大运营商也开始大规模推广 IPv6.(可以访问test-ipv6.com来确认支持情况ヾ(•ω•`)o)
默认情况下,IPv6 优先级会高于 IPv4:
当访问一个双栈网站(即同时支持 IPv4 和 IPv6)时,系统会选择使用 IPv6 进行访问.
这么做的本意是为了加快推广新技术,但在国内特殊的网络环境下却显现出一些问题:

  • 当访问国内网站时,问题并不明显;
  • Cloudflare 优选 IP 失效:目前大家的优选 IP 基本上都只有 IPv4,IPv6 则是走 cloufflare 默认(主要是 v6 筛选及维护难度过高);
  • 线路无优化导致网络质量差:买过国外优化线路服务器的小伙伴大多都知道,线路的优化一般只针对 IPv4,IPv6 大多为普通线路.

手动设置优先级

针对这些问题,有两个常见的解决方案:

  • 直接关闭 IPv6,但会导致无法访问纯 v6 网站(虽然目前这类网站不多)

  • 另一个方法是手动设置,让系统优先使用 IPv4.

    下面记录了部分系统设置 IPv4 优先的方法,也当给自己留个备忘录:

Windows

  1. 打开注册表编辑器(Win+R输入regedit);
  2. 在顶部导航栏输入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters;
  3. 找到DisabledComponents,默认情况下这个值应该为 0;
  4. 右键并点击修改(M),将这个值加 20(注意右边的基数必须是十六进制);
    修改注册表
  5. 保存并重启电脑就好啦( ̄︶ ̄)↗

PS: DisabledComponents取值范围为 0~255,用于配置 Windows 系统对于 IPv6 的行为;
将值加 32,也就是将二进制下右数第 6 位置 1,对应的效果就是优先 IPv4 而非 IPv6;
以下为官方文档的链接,在对对这个值进行其它更改时,请务必确认清楚自己正在做什么,小白不要随意尝试!

Linux

输入以下命令:

本脚本在 Debian 下通过测试,理论上适用于所有 Linux 内核的操作系统,如有兼容性问题麻烦告诉我ヾ(•ω•`)o

cp /etc/gai.conf /etc/gai.conf.backup && echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf

运行后如果出现问题,使用以下命令恢复原配置:

mv /etc/gai.conf.backup /etc/gai.conf

其它系统

目前未发现MacOS``Android,iOS开放了相关选项,如果有知道的小伙伴麻烦告知一下( ̄ y▽, ̄)╭
有需求的还是老老实实禁用 v6 吧()

检测效果

设置完成后可以打开此链接,出现的地址为 IPv4 即为成功:
检测效果