博主的很多VPS都是双栈网络,系统默认会以 IPv6 优先,只有 IPv6 无法访问的时候才会尝试访问 IPv4。日常使用中这个倒不会有什么影响,但最近因为一些特定用途,需要让 IPv4 被优先识别。当然,我们可以使用一些命令或现成的脚本直接禁掉 IPv6 也能达到这个效果,但这不是我的目的。于是就找了一些资料,对系统进行修改最终实现保持双栈网络的前提下让 IPv4 优先于 IPv6。这里记录一下,也方便有同需求的博友。
Linux 系统下,有一个 /etc/gai.conf
文件。默认情况下,它会使用 IPv6 优先,如果您安装了 curl 并且本地支持 IPv6,那么可以使用 curl ip.sb
测试
[email protected]:~# curl ip.sb
2001:db8::2
# 效果等同于:curl ip.sb -6
如果你不想使用 IPv6 优先,可以在这个文件中找到
取消掉注释,修改为
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
测试
[email protected]:~# 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 已经被禁止了。
文章出处:CNBoy 四海部落,刀云转载
刀云免责声明
1、帖子原作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
2、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。
签名:这个人很懒,什么也没有留下!