更新时间:2023-01-01 15:40:00浏览次数:804+次
您的Linux服务器上是否启用了IPv6?这会导致某些应用程序出现问题,因为这些应用程序不能很好地使用IPv6。在本文中,我们将探讨在Linux服务器上禁用IPv6的不同方法,适用于CentOS、Debian、Ubuntu、Arch Linux发行版。
简介
互联网协议版本6(IPv6)是下一代互联网协议地址标准,简而言之,它是互联网工程任务组(IETF)的一组规范,本质上是IP版本4(IPv4)的升级。
出于某些原因,您可能需要在服务器上禁用IPv6并坚持使用IPv4。如果是这样,请按照以下步骤在Linux/Unix系统上禁用IPv6。
方法一:使用grubby禁用IPv6
grubby工具可用于对grub.cfg文件进行持久性更改,尤其是在基于Red Hat的系统中。要使用grubby命令行工具禁用IPv6,请运行以下命令:
sudo grubby --update-kernel ALL --args ipv6.disable=1
执行命令后验证设置:
$ grubby --info DEFAULT
index=0
kernel="/boot/vmlinuz-4.18.0-315.el8.x86_64"
args="ro crashkernel=auto quiet ipv6.disable=1 $tuned_params"
root="UUID=e25c8aa8-466a-495d-9358-70f0a81da587"
initrd="/boot/initramfs-4.18.0-315.el8.x86_64.img $tuned_initrd"
title="CentOS (4.18.0-315.el8.x86_64) 8"
id="9293fc4837174ce0b710ce177fa8d1fd-4.18.0-315.el8.x86_64"
重新启动系统以使更改生效:
sudo reboot
确认系统中的网络地址详细信息:
ip address show
方法二:通过使用sysctl修改内核参数来禁用IPv6
值得注意的是,几乎所有的Linux发行版都默认启用Internet协议版本6(IPv6)。一种禁用它的方法是使用sysctl。您需要注意,这可能会破坏SSH Xforwarding,除非sshd_config包含AddressFamily inet。
这种方法适用于大多数发行版,我在Ubuntu、Debian、Arch Linux、CentOS(6/7)上进行了测试。
将这些行添加到/etc/sysctl.d/ipv6.conf以禁用Linux上的ipv6:
sudo tee /etc/sysctl.d/ipv6.conf<<EOF
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOT
应用时,它会将文件/proc/sys/net/ipv6/conf/all/disable_ipv6的状态从0更改为1。在使用下面的cat命令应用规则之前进行检查:
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
0
然后保存文件并使用命令应用规则:
$ sudo sysctl -p /etc/sysctl.d/ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
再次检查/proc/sys/net/ipv6/conf/all/disable_ipv6:
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1
这些行可以添加到/etc/sysctl.conf文件中。请注意,/etc/sysctl.d/上的文件覆盖/etc/sysctl.conf上的设置。
请注意,define显式列出所有目标接口,因为禁用all.disable_ipv6不适用于应用sysctl设置时已“up”的接口。您应该注释掉/etc/hosts中的IPv6主机:
$ sed -i 's/^[[:space:]]*::/#::/' /etc/hosts
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
对于CentOS 7或RedHat系统,您可以使用以下方法重建初始RAM磁盘映像:
$ sudo dracut -f
方法三:通过修改/etc/default/grub(基于RedHat的发行版)禁用IPv6
您还可以通过编辑grub配置来禁用IPv6。我在CentOS 7和RHEL 7上进行了测试。为此,您需要将条目ipv6.disable=1添加到GRUB_CMDLINE_LINUX。然后生成新的GRUB文件以启动并重新启动服务器:
$ cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto ipv6.disable=1 rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
注意条目ipv6.disable=1。运行grub2-mkconfig命令重新生成grub.cfg文件:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-6cf33e6e3d114c2d84099f344a386f6a
Found initrd image: /boot/initramfs-0-rescue-6cf33e6e3d114c2d84099f344a386f6a.img
done
或者,在UEFI系统上,运行以下命令:
$ sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
使用此方法,您需要重新启动服务器以应用更改:
sudo reboot
注:建议在操作前备份好/etc/default/grub原参数,如果需要重新启用IPv6,则恢复原先的参数即可。
相关资讯