前言
在现代 Linux 系统中,默认情况下系统会优先使用 IPv6 地址进行连接(如果网络支持),但在某些场景下,我们可能更希望系统优先使用 IPv4,或者相反。
本教程将介绍如何通过修改 gai.conf
配置文件,让你的 Linux 系统实现 IPv4 和 IPv6 之间的优先顺序切换。
📌 背景知识:地址选择机制
Linux 中网络应用程序通常通过 getaddrinfo()
进行 DNS 查询,这个函数会返回一个 IPv6 和 IPv4 地址的列表。系统根据 /etc/gai.conf
中定义的优先级来选择要连接的地址。
✅ 设置方法:编辑 gai.conf 文件
gai.conf
的完整路径是:
/etc/gai.conf
这是控制地址选择优先级的配置文件。
🔁 方案一:将 IPv4 改为 IPv6 优先
打开 gai.conf 文件:
sudo nano /etc/gai.conf
找到并取消注释(或者添加)以下内容:
precedence ::ffff:0:0/96 10
这条语句的含义是:将 IPv4 映射地址的优先级降低为 10,默认是 100。这样会让 IPv6 地址在解析时优先被选中。
🔁 方案二:将 IPv6 改为 IPv4 优先(回到默认)
同样编辑文件:
sudo nano /etc/gai.conf
将该行改回默认优先级 100(如果之前改过):
precedence ::ffff:0:0/96 100
或者如果之前是注释的,也可以取消注释该行。
✅ 测试是否生效
你可以使用 getent
命令查看 DNS 查询的地址顺序:
getent ahosts google.com
如果你看到 IPv6 地址排在前面,就说明 IPv6 优先;IPv4 在前则是 IPv4 优先。
🧪 补充测试:使用 curl 验证 IP 协议
curl -6 https://ip.sb # 测试 IPv6
curl -4 https://ip.sb # 测试 IPv4
你也可以直接访问 https://ip.sb 查看当前出口 IP 类型。
🚧 注意事项
修改后 无需重启系统,配置立即生效。
某些应用程序(如 SSH、Nginx、apt)有独立的配置选项可能会影响实际使用协议。
如果你的服务器没有正确配置 IPv6 网络,设置 IPv6 优先可能导致连接变慢或失败。
🧭 结语
通过合理配置 gai.conf
,你可以根据网络环境灵活选择是优先使用 IPv6 还是 IPv4。这在调试网络问题、优化访问速度,或者适配特定服务商时非常有用。
如果你在使用中遇到实际连接问题,也可以配合 Wireshark
或 ss
, netstat
等工具排查流量协议。
📌 喜欢这篇文章?欢迎分享或留言讨论你的网络配置经验!
评论区