5

常用Linux系统Debian/Ubuntu/RockyLinux等怎么禁用IPv6

 9 months ago
source link: https://vps.la/2023/11/03/%e5%b8%b8%e7%94%a8linux%e7%b3%bb%e7%bb%9fdebian-ubuntu-rockylinux%e7%ad%89%e6%80%8e%e4%b9%88%e7%a6%81%e7%94%a8ipv6/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

常用Linux系统Debian/Ubuntu/RockyLinux等怎么禁用IPv6

John • 2023-11-03 10:25 am • 学习教程

image-3.jpg.webp

IPv6被认为是IPv4——互联网上的传统32位地址空间——的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题。然而,由于已经有大量主机、设备用IPv4连接到了互联网上,所以想在一夜之间将它们全部切换到IPv6几乎是不可能的。许多IPv4到IPv6的转换机制(例如:双协议栈、网络隧道、代理) 已经被提出来用来促进IPv6能被采用,并且很多应用也正在进行重写,如我们所提倡的,来增加对IPv6的支持。有一件事情可以确定,就是在可预见的未来里IPv4和IPv6势必将共存。

理想情况下,向IPv6过渡的进程不应该被最终的用户所看见,但是IPv4/IPv6混合环境有时会让你碰到各种源于IPv4和IPv6之间不经意间的相互碰撞的问题。举个例子,你会碰到应用程序超时的问题,比如apt-get或ssh尝试通过IPv6连接失败、DNS服务器意外清空了IPv6的AAAA记录、或者你支持IPv6的设备不兼容你的互联网服务提供商遗留下的IPv4网络,等等等等。

当然这不意味着你应该盲目地在你的Linux机器上禁用IPv6。鉴于IPv6许诺的种种好处,作为社会的一份子我们最终还是要充分拥抱它的,但是作为给最终用户进行故障排除过程的一部分,如果IPv6确实是罪魁祸首,那你可以尝试去关闭它。

这里有一些让你在Linux中部分(例如:对于某个特定的网络接口)或全部禁用IPv6的小技巧。这些小贴士应该适用于所有主流的Linux发行版包括Ubuntu、Debian、Linux Mint、CentOS、Fedora、RHEL以及Arch Linux。

查看IPv6是否启用

使用命令:

ifconfig
linux-ifconfig-result.jpg.webp

使用命令:

ip addr
image.png.webp

临时禁用IPv6

执行以下代码:

sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/<interface-name>/disable_ipv6'

举个例子,将eth0接口禁用IPv6:

sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6'

重新启用eth0接口的IPv6:

sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6'

永久禁用IPv6

第一种方法是通过修改 /etc/sysctl.conf 文件,添加以下内容:

# 禁用整个系统所有接口的IPv6
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用某一个指定接口的IPv6(例如:eth0, lo)
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

使这些更改生效,运行以下命令:

sudo sysctl -p

快捷命令:

nic=$(ip route get 8.8.8.8 | grep dev | awk -F'dev' '{ print $2 }' | awk '{ print $1 }')
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf \
&& echo "net.ipv6.conf.$nic.disable_ipv6 = 1" >> /etc/sysctl.conf \
&& sysctl -p

另一个永久禁用IPv6的方法是在开机的时候传递一个必要的内核参数。

编辑 /etc/default/grub 文件,给GRUBCMDLINELINUX变量添加”ipv6.disable=1″。

image-1.png.webp

编辑完后执行命令:

sudo update-grub

会自动更新/boot/grub/grub.cfg,这样做最大的好处是当系统更新内核时,你的设置不会被覆盖掉。

Debian关闭IPv6的方法

尽管IPv6是互联网的新基石,有着数量多的优势,但是目前很多时候IPv6的支持并不完整,有时候会因为IPv6遇到一些奇奇怪怪的兼容性问题。于是就需要关闭IPv6而强制使用IPv4进行互联网连接。
现给出两个方法,本质上都是通过改写sysctl实现的,第一种是在sysctl.d中新加入配置文件,第二中是直接修改sysctl.conf配置文件,推荐使用第一种从而避免误操作影响其他配置文件。

方法一:在sysctl.d中新加入配置文件

/etc/sysctl.d/文件夹中新建disable-ipv6.conf,并写入配置

cd /etc/sysctl.d/
touch disable-ipv6.conf
echo net.ipv6.conf.all.disable_ipv6=1 > disable-ipv6.conf

使用以下命令运行配置文件

sysctl -p -f /etc/sysctl.d/disable-ipv6.conf

如果使用ip a命令,在输出中没有发现IPv6地址,则说明成功关闭了IPv6功能。

方法二:直接修改sysctl.conf配置文件

打开/etc/sysctl.conf,在Uncomment the next line to enable packet forwarding for IPv6前一行添加以下三行内容:

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.ens3.disable_ipv6 = 1

注意ens3这个,由于每个设备的网卡名字都有可能不同,需要使用ip a命令查找一下具体的名称以替换掉ens3
使用以下命令运行配置文件:

sysctl -p

如果使用ip a命令,在输出中没有发现IPv6地址,则说明成功关闭了IPv6功能。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK