如何在Linux上禁用IPv6
我们是否在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与启用它完全相反。