在 Linux 系统中,网络协议栈的优先级由 glibc 的配置文件 /etc/gai.conf 控制,主要通过 precedence 参数来决定是 IPv4 优先还是 IPv6 优先。

# 查看当前优先级的方法

# 1. 检查 /etc/gai.conf 配置

使用以下命令查看 gai.conf 文件:

cat /etc/gai.conf

在文件中查找以下内容:

#precedence ::ffff:0:0/96  100
  • 如果这一行被注释(以 # 开头),表示默认情况下 IPv6 优先
  • 如果这一行被取消注释(去掉 # ),表示 IPv4 优先

# 2. 测试当前优先级

可以通过 pingcurl 等工具测试实际的网络协议优先级。

# 使用 ping
ping -6 google.com  # 强制使用 IPv6
ping -4 google.com  # 强制使用 IPv4
# 使用 curl
curl -6 ifconfig.co  # 强制使用 IPv6
curl -4 ifconfig.co  # 强制使用 IPv4

如果没有强制指定协议,查看系统默认使用的协议即可判断优先级。


# 修改优先级的方法

# 1. 设置 IPv4 优先

编辑 /etc/gai.conf 文件:

sudo nano /etc/gai.conf

取消注释以下行(去掉 # ):

precedence ::ffff:0:0/96  100

保存并退出后,系统将优先使用 IPv4。

# 2. 设置 IPv6 优先

确保 gai.conf 中的以下行被注释(添加 # ):

#precedence ::ffff:0:0/96  100

# 3. 应用更改

无需重启, gai.conf 的更改会立即生效。


# 验证修改是否生效

可以再次使用 pingcurl 测试默认的协议优先级,也可以通过以下命令查看:

getent ahosts google.com

输出中第一个显示的 IP 地址类型即为当前的优先协议(IPv6 或 IPv4)。