在一台设备上同时启用 IPv4 和 IPv6 时, 系统和浏览器通常会默认 IPv6 优先。
这意味着: 只要目标站点支持 IPv6, 系统就会优先通过 IPv6 访问, 只有在 IPv6 不可用时才会回退到 IPv4。
但在某些应用场景下, 我们可能希望 IPv4 优先, 例如
- 大部分运营商的 IPv6 网络路由没有优化, 会出现 IPv6 绕路、跳数更多, 而 IPv4 路由更优, 访问速度更快
- 某些网站、API、CDN 节点在 IPv6 上不可用或不稳定
- 开发调试时希望默认走 IPv4, 有助于排查网络问题
默认情况测试
如果系统支持 IPv6, 且安装了 curl
, 可以直接执行
curl ifconfig.co
默认情况下返回的是 IPv6 地址, 例如
[root@localhost 1]# curl ifconfig.co
2605:6400::2
说明当前访问优先走 IPv6
修改 IPv4 / IPv6 优先级
Linux 系统通过 /etc/gai.conf
文件控制 getaddrinfo
调用的地址选择策略。
默认设置下, IPv6 优先级高于 IPv4。在不禁用 IPv6 的情况下优先使用 IPv4
编辑配置文件
vim /etc/gai.conf
在文件中添加
precedence ::ffff:0:0/96 100
这条规则的含义是
::ffff:0:0/96
表示 IPv4 映射地址段100
表示提升该段的优先级, 使 IPv4 优先于 IPv6
修改后测试
此时再使用 curl ifconfig.co
测试
[root@localhost 1]# curl ifconfig.co
107.1.2.3
此时返回 IPv4 地址, 说明已经成功将 IPv4 设置为优先
一键修改
注意 cat
命令后的 >>
即为添加文件内容, 如果使用 >
则是覆盖文件内容
cat >> /etc/gai.conf << EOF
precedence ::ffff:0:0/96 100
EOF
原文