前言
系统一般都是 ipv6 优先访问的,但是某些情况,我们仍然希望 ipv4 优先使用!
Windows
可以 ping
某个支持双栈的域名来确认系统以哪个优先。例:
ping bing.com
首先查看下系统访问的优先级:
netsh interface ipv6 show prefixpolicies
一般会显示如下信息:
::1/128
:本地回环地址,类似 IPv4 中的 127.0.0.1::/0
:ipv6 单拨地址::ffff:0:0/96
:ipv4 地址范围2002::/16
:6to4,具体详见 RFC3056: Connection of IPv6 Domains via IPv4 Clouds2001::/32
:TEREDO,具体详见 RFC4380: Teredo: Tunneling IPv6 over UDP through Network Address Translations (NATs)fc00::/7
:Unique-Local,具体详见 RFC4193: Unique Local IPv6 Unicast Addresses
下面调整优先顺序,也就是 ::ffff:0:0/96
的优先级,以管理员身份运行下面代码:
netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 100 4
上面的意思是把
::ffff:0:0/96
(位于标签 4
)的优先级调整为 100
(数字越大优先级越高)当然,反悔了的话,可以直接重置成默认配置:
netsh interface ipv6 reset
重置后可能需要重启计算机!
Linux
同样,判断哪个优先,可以使用 ping
或者 curl
,比如:
curl ip.sb
返回哪个就是哪个优先,手动指定优先级,可以编辑 /etc/gai.conf 这个文件:
nano /etc/gai.conf
找到 precedence ::ffff:0:0/96 100
这行,取消前面的 # 注释,然后保存即可!
也可以直接用一行命令搞定:
sed -i 's/#precedence ::ffff:0:0\/96 100/precedence ::ffff:0:0\/96 100/' /etc/gai.conf
如果需要彻底禁用 ipv6 ,直接编辑 /etc/sysctl.conf 这个文件,然后修改或加入以下内容保存即可:
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
也可以用一行代码添加:
cat >> /etc/sysctl.conf << EOF
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
EOF
完成后使用 sysctl -p
重载配置或重启 VPS 即可!
附录
感谢以下参考链接:
https://ipw.cn/doc/ipv6/user/ipv4_ipv6_prefix_precedence.html
Comments NOTHING