站长视角
用户至上

Linux系统IPv4/IPv6双栈网络环境下配置IPv4优先的办法

现在市场是很多VPS都是双栈网络,有的系统默认会以 IPv6 优先,只有 IPv6 无法访问的时候才会尝试访问 IPv4。日常使用中这个倒不会有什么影响,但有一些特定用途,需要让 IPv4 被优先识别。当然,我们可以使用一些命令或现成的脚本直接禁掉 IPv6 也能达到这个效果,但这不是我的目的。于是就找了一些资料,对系统进行修改最终实现保持双栈网络的前提下让 IPv4 优先于 IPv6。这里记录一下,也方便有同需求的博友。

Linux 系统下,有一个 /etc/gai.conf 文件。默认情况下,它会使用 IPv6 优先,如果您安装了 curl 并且本地支持 IPv6,那么可以使用 curl ip.sb 测试

root@debian:~# curl ip.sb 2001:db8::2 # 效果等同于:curl ip.sb -6

如果你不想使用 IPv6 优先,可以在这个文件中找到

#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 测试

root@debian:~# curl ip.sb 192.0.2.2 # 效果等同于:curl ip.sb -4

如此也就完成了 IPv4 的优先配置。

Centos 中如果没有这个文件,自己新建一个,然后写入 precedence ::ffff:0:0/96 100 即可。

这里也顺带也说一下:如何禁用 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

如果需要其他网卡则更改或添加 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

注意 cat 命令后的 >> 即为添加文件内容,如果使用 > 则是覆盖文件内容。

然后使用 sysctl -p 来重新加载配置文件,此时查看 ip a 就可以发现 IPv6 已经被禁止了。

赞(7)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权, 转载请注明出处。
文章名称:《Linux系统IPv4/IPv6双栈网络环境下配置IPv4优先的办法》
文章链接:https://cnidc.co/46199.html
【声明】:国外主机测评仅分享信息,不参与任何交易,也非中介,所有内容仅代表个人观点,均不作直接、间接、法定、约定的保证,读者购买风险自担。一旦您访问国外主机测评,即表示您已经知晓并接受了此声明通告。
【关于安全】:任何 IDC商家都有倒闭和跑路的可能,备份永远是最佳选择,服务器也是机器,不勤备份是对自己极不负责的表现,请保持良好的备份习惯。

登录

找回密码

注册