Linux 下修改 IPv4/IPv6 优先级, 让 IPv4 优先访问

在一台设备上同时启用 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

原文

各位大佬 怎样才能使CENTOS7的IPV4优先
Debian 双栈网络时开启 IPv4 优先

最后更新于 2025-08-27