如何在Linux上禁用IPv6

时间:2020-02-23 14:30:30  来源:igfitidea点击:

我们是否在Linux服务器上启用了IPv6,但是它会导致某些无法与IPv6正常运行的应用程序出现问题?在本指南中,请仔细研究在Linux服务器CentOS,Debian/Ubuntu,Arch Linux 等上禁用IPv6的不同方法。

什么是IPv6?

Internet协议版本6(IPv6)是下一代Internet协议地址标准,简而言之是Internet工程任务组(IETF)的一组规范,实质上是IP版本4(IPv4)的升级。

由于某些原因,我们可能需要在服务器上禁用IPv6并坚持使用IPv4. 请按照下面给出的步骤在Linux/Unix系统上禁用IPv6.

通过使用sysctl修改内核参数来禁用IPv6

值得注意的是,几乎所有Linux发行版默认都启用Internet协议版本6(IPv6)。禁用它的一种方法是使用sysctl。我们需要注意,除非sshd_config包含AddressFamily inet,否则这可能会破坏SSH Xforwarding。

该方法适用于大多数发行版,我在Ubuntu,Debian,Arch Linux,CentOS(6/7)上进行了测试。

将这些行添加到/etc/sysctl.d/ipv6.conf以在Linux上禁用IPv6.

cat <<EOT > /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
EOT

应用后,它将/proc/sys/net/ipv6/conf/all/disable_ipv6文件的状态从0更改为1. 请在使用以下cat命令应用规则之前进行检查。

# cat /proc/sys/net/ipv6/conf/all/disable_ipv6
0

然后保存文件并使用以下命令应用规则:

# 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设置时已启动的接口。我们应该在/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磁盘镜像:

# 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文件:

# 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系统上,运行以下命令:

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

使用这种方法,我们需要重新引导服务器使更改生效。

# reboot

重新启用IPv6与启用它完全相反。