本文理论上适合任何 Linux 系统,其他系统未经测试,请自行测试使用。
背景介绍
双协议栈技术就是指在一台设备上同时启用 IPv4 协议栈和 IPv6 协议栈,这样就可以同时使用 IPv4 和 IPv6 的网络。
所有现代化的操作系统和浏览器均会以 IPv6 优先,只有 IPv6 无法访问的时候才会尝试访问 IPv4,某些特定的应用和场景下,我们并不想要 IPv6 优先,这时候就需要修改一些配置文件让 IPv4 优先。
修改 /etc/gai.conf
在 Debian 等 Linux 系统下,有一个 /etc/gai.conf
文件,用于系统的 getaddrinfo
调用,默认情况下,它会使用 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
有时候又会需要强制 IPv6 优先 (怎么有些系统和用户那么奇怪?),因为目前 IANA 分配的公网 IPv6 还未进行到 3000:0000::/4
,所以我们只要把这段之前的 IPv6 加到优先级列表即可,加入这两行 label
的优先级:
label 2002::/16 1
label 2001:0::/32 1
禁用 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
如果需要其他网卡则更改或添加 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 已经被禁止了。
使用前,我们可以看到无论是本地还是公网网卡都有 inet6
,即都有 IPv6 地址:
使用后,无论本地还是公网网卡均无 IPv6 地址:
转自https://u.sb/debian-prefer-ipv4/
文章评论
I really love your website.. Great colors & theme. Did
you develop this site yourself? Please reply back as I'm trying
to create my very own site and would like to know where you got this from or what the theme is named.
Cheers!
@best gold ira companies Thank you for visiting. The theme is KRATOS, and you can find it in the WordPress theme store. I just made modifications to the background image.