Debian 双栈网络时开启 IPv4 优先(音频版)
PS: 用 AI 生成的图老是不合法微信封面的比例,放到文尾。本文也提供音频版, 欢迎订阅我的微信公众号。
在如今的网络世界,IPv6 正在逐渐普及,但 IPv4 依然是许多场景的“老大哥”。如果你用的是 Debian 系统,并且身处 IPv4 和 IPv6 共存的双栈网络环境,可能会发现系统默认优先使用 IPv6——这在某些情况下并不理想,比如某些服务只支持 IPv4,或者 IPv6 连接不稳定。今天,我们就来聊聊如何在 Debian 上实现 IPv4 优先,甚至在需要时完全禁用 IPv6。跟着这篇教程,轻松搞定网络配置!
为什么需要调整网络优先级?
先来点背景知识:双栈网络指的是设备同时支持 IPv4 和 IPv6 协议栈。现代操作系统(如 Debian)和浏览器通常默认优先使用 IPv6,只有当 IPv6 连接失败时才会“退而求其次”用 IPv4。这听起来很智能,但在实际场景中可能会遇到问题:
- 服务兼容性:某些老旧服务或内网应用只支持 IPv4,IPv6 优先可能导致连接失败
- 网络性能:部分网络环境下,IPv6 的延迟或稳定性不如 IPv4
- 特殊需求:比如开发测试时,你可能希望强制使用某一种协议
所以学会调整 IPv4 和 IPv6 的优先级,或者在极端情况下禁用 IPv6,是每个 Debian 用户的“进阶技能”。下面,我们一步步教你搞定!
让 IPv4 优先:修改 gai.conf 文件
Debian 系统中,/etc/gai.conf
文件控制了 getaddrinfo 函数的行为,这个函数决定了系统如何选择 IPv4 或 IPv6 地址。默认情况下,IPv6 优先,但我们可以通过简单修改让 IPv4 站到“C 位”。
修改步骤
打开终端,输入以下命令编辑 /etc/gai.conf
#precedence ::ffff:0:0/96 100
去掉 # 号,修改为:
precedence ::ffff:0:0/96 100
保存并退出。
懒人福利:如果你不想手动编辑,可以直接用这条命令一键搞定:
bash
sed -i 's/#precedence ::ffff:0:0\/96 100/precedence ::ffff:0:0\/96 100/' /etc/gai.conf
测试效果
配置完成后,用 curl 命令测试一下:
curl ip.sb
也可以使用
# 查询本机外网IPv4地址
curl 4.ipw.cn
# 查询本机外网IPv6地址
curl 6.ipw.cn
# 测试网络是IPv4还是IPv6访问优先(访问IPv4/IPv6双栈站点,如果返回IPv6地址,则IPv6访问优先)
curl test.ipw.cn
如果返回的是类似 6.6.6.6 的 IPv4 地址,恭喜你,IPv4 优先已生效!如果返回的是类似 2001:db8::2 的 IPv6 地址,检查是否正确保存了配置。
原理
::ffff:0:0/96 是 IPv4 地址在 IPv6 协议中的映射范围,设置其优先级为 100(高于默认 IPv6 的优先级),系统就会优先选择 IPv4 地址。
特殊场景:强制 IPv6 优先
有些朋友可能有“奇特”需求,比如测试 IPv6 环境或某些服务明确要求 IPv6 优先。别担心,我们也可以反向操作!
同样编辑 /etc/gai.conf
, 在文件末尾添加以下两行:
label 2002::/16 1
label 2001:0::/32 1
保存退出,或者用命令一键添加:
bash
echo -e "label 2002::/16 1\nlabel 2001:0::/32 1" | sudo tee -a /etc/gai.conf
原理
2002::/16
和 2001:0::/32
是常见的 IPv6 地址段,设置它们的 label 优先级为 1,确保系统优先选择这些 IPv6 地址。IANA 目前分配的公网 IPv6 地址还未覆盖到 3000:0000::/4
,所以这招基本万无一失
(这个未测试过,仅供参考)
极端情况:完全禁用 IPv6
如果你的网络环境压根不需要 IPv6,或者 IPv6 总给你添乱,可以直接禁用它。以下是禁用 IPv6 的方法,适合“断舍离”爱好者。
编辑 /etc/sysctl.conf
文件:
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用eth0的ipv6
net.ipv6.conf.eth0.disable_ipv6 = 1
结语
通过简单的配置文件调整,你就可以在 Debian 双栈网络中自由掌控 IPv4 和 IPv6 的优先级,甚至彻底禁用 IPv6。无论是提升网络兼容性、优化性能,还是满足特定需求,这些技巧都能让你事半功倍!
