在Linux服务器上禁用IPv6的三种方法

您的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

在Linux服务器上禁用IPv6的三种方法

或者,在UEFI系统上,运行以下命令:

$ sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

使用此方法,您需要重新启动服务器以应用更改:

sudo reboot

注:建议在操作前备份好/etc/default/grub原参数,如果需要重新启用IPv6,则恢复原先的参数即可。

栏目相关文章