![图片[1]-如何在Linux双栈网络环境中设置IPv4优先(保留IPv6功能)-五六四五开发站](https://img20.360buyimg.com/openfeedback/jfs/t1/330606/22/13661/91893/68c82005F1bc0e0b5/cc2025c754a0e390.jpg)
许多VPS服务器同时支持IPv4和IPv6双协议栈,但Linux系统默认会优先使用IPv6进行网络连接。虽然日常使用中这一设定通常不会造成问题,但在某些特定场景下(例如部分兼容性要求较高的应用或网络调试),我们可能需要让系统优先选择IPv4。直接禁用IPv6虽然是一种解决方案,但并不是最优选择。本文将介绍如何在保持IPv6功能正常的情况下,调整系统配置实现IPv4优先。
实现这一目标的关键在于修改 /etc/gai.conf文件(地址信息获取配置)。该系统文件控制着getaddrinfo函数的协议排序策略。默认配置中,IPv6拥有更高的优先级。我们可以通过以下方式验证当前优先级(需确保已安装curl且环境支持IPv6):
curl ip.sb
若输出为IPv6地址(例如:2001:db8::2),说明当前IPv6为优先状态。
要改为IPv4优先,请编辑 /etc/gai.conf文件,找到如下行:
#precedence ::ffff:0:0/96 100
将其修改为(取消注释并保持参数):
precedence ::ffff:0:0/96 100
也可直接执行以下命令完成修改:
sed -i 's/#precedence ::ffff:0:0\/96 100/precedence ::ffff:0:0\/96 100/' /etc/gai.conf
修改完成后再次执行 curl ip.sb,此时应当显示IPv4地址(例如:192.0.2.2),表明IPv4已成功获得优先级。
注:部分系统(如CentOS)若缺少此文件,可手动创建并写入 precedence ::ffff:0:0/96 100配置内容。
补充内容:临时禁用IPv6的方法
若需完全禁用IPv6,可编辑 /etc/sysctl.conf文件(请先将eth0替换为实际网卡名称),添加如下配置:
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
可通过以下命令批量添加配置(注意使用>>追加模式,避免覆盖原有内容):
cat >> /etc/sysctl.conf << EOF
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
EOF
执行 sysctl -p使配置生效后,通过 ip a命令可确认IPv6已被禁用。
© 版权声明
THE END








暂无评论内容