在本文中,将介绍在 Red Hat Enterprise Linux 7 中禁用和启用 ipv6 的步骤
根据要求,有许多方法可用于禁用 IPv6,因此这里我将介绍一些我所知道的方法
为单个接口禁用 IPv6
注意:这实际上不会停用 ipv6 模块,而是会为此特定接口禁用 IPv6
当前在我的服务器上有 Bond0,它启用了 IPv6,如下所示
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 10.43.138.1 netmask 255.255.255.224 broadcast 10.43.138.31 inet6 fe80::92f4:cdc0:37ea:9ff6 prefixlen 64 scopeid 0x20<link> ether 00:17:a4:77:00:02 txqueuelen 1000 (Ethernet) RX packets 223 bytes 28496 (27.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 191 bytes 26556 (25.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
要为 bond0 禁用ipv6的功能,我可以使用以下任一步骤
添加以下变量(如果它不存在)并从配置文件中删除所有其他与 IPv6 相关的变量
# vi /etc/sysconfig/network-scripts/ifcfg-bond0 IPV6INIT=no
重启你的网络服务
# systemctl restart network.service
但这还不能发挥作用,因为目前在 sysctl.conf 文件中为 bond0 启用了 ipv6,如下所示
# sysctl -a | grep net.ipv6.conf.bond0.disable_ipv6 net.ipv6.conf.bond0.disable_ipv6 = 0
通过在 /etc/sysctl.conf 中添加以下行来禁用相同的功能。
首先确保我们没有此值的任何条目
# grep "net.ipv6.conf.bond0.disable_ipv6" /etc/sysctl.conf
如果输出为空白,请添加以下行,
如果我们已经找到现有条目,则将“0”的值更改为“1”,否则执行以下命令
# echo "net.ipv6.conf.bond0.disable_ipv6=1" >> /etc/sysctl.conf
刷新 sysctl 值
# sysctl -p
然后使用下面的命令重建初始 内存 磁盘镜像
# dracut -v -f
接下来检查bond0的ipv6状态
# ifconfig bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 10.43.138.1 netmask 255.255.255.224 broadcast 10.43.138.31 ether 00:17:a4:77:00:02 txqueuelen 1000 (Ethernet) RX packets 317 bytes 35564 (34.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 251 bytes 38566 (37.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
要禁用其他使用 ipv6 的其他单个接口,可以遵循相同的步骤。
为整个服务器禁用 IPv6(对于所有接口)
完成上述步骤后,我仍然为正在使用的环回地址和 bond3 启用了 Ipv6
# ifconfig | grep inet6 inet6 fe80::73f1:af4c:dc8:ac prefixlen 64 scopeid 0x20<link> inet6 ::1 prefixlen 128 scopeid 0x10<host>
所以现在我想完全禁用它们
这里我们不需要使用单独的接口文件,我们可以使用我们的 GRUB 直接禁用 ipv6.
注意:这将需要重新启动系统以使更改生效
在“/etc/default/grub”文件中添加“ipv6.disable=1”,如下所示
GRUB_CMDLINE_LINUX="ipv6.disable=1 crashkernel=auto rd.lvm.lv=system/root rd.lvm.lv=system/usr biosdevname=0 net.ifnames=0 rhgb quiet"
接下来使用下面命令重新生成 grub2 配置文件
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-a311757619b943238cda551a0f1b2743 Found initrd image: /boot/initramfs-0-rescue-a311757619b943238cda551a0f1b2743.img done
如果我们有一个基于 UEFI 的 BIOS 启用节点,也执行以下命令
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
最后继续重启服务器以使更改生效
在 RHEL 上启用 IPv6
这实际上在很大程度上取决于我们禁用 IPv6 所遵循的步骤,因此必须遵循相反的步骤。
除非服务器通过 GRUB 启用了 IPv6,否则我们无法为特定接口启用 IPv6。
例如:如果我们使用 grub 禁用了 ipv6,则无法为单个接口 配置ipv6。
否则,可能会遇到下面的错误:
# sysctl -p kernel.shmmax = 18446744073692774399 kernel.shmall = 18446744073692774399 kernel.randomize_va_space = 0 kernel.core_pattern = /var/opt/sdf/cores/core.%e sysctl: cannot stat /proc/sys/net/ipv6/conf/eth0/disable_ipv6: No such file or directory
所以第一步是在 GRUB 中启用 ipv6。
在 /etc/default/grub 中的“GRUB_CMDLINE_LINUX”变量中删除条目“ipv6.disable=1”
# grep "GRUB_CMDLINE_LINUX" /etc/default/grub GRUB_CMDLINE_LINUX="novga console=ttyS0,9600 panic=1 numa=off crashkernel=auto rd.lvm.lv=system/root rd.lvm.lv=system/swap noht biosdevname=0 net.ifnames=0 rhgb quiet console=tty0
使用以下命令重新生成 grub2.cfg 文件
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-1ffe0ef8aba64348879fd545b8328da6 Found initrd image: /boot/initramfs-0-rescue-1ffe0ef8aba64348879fd545b8328da6.img done
如果您的是基于 UEFI 的 BIOS的服务器,还要执行以下命令:
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
删除/etc/sysctl.conf 文件中任何如下所示的条目
/proc/sys/net/ipv6/conf/all/disable_ipv6=1 /proc/sys/net/ipv6/conf/default/disable_ipv6 /proc/sys/net/ipv6/conf/<interface>/disable_ipv6
取消注释 /etc/hosts 文件中的以下行
::1 localhost ipv6-localhost ipv6-loopback
检查文件 /etc/ssh/sshd_config 的内容并确保对 AddressFamily 行进行了注释:
#AddressFamily inet
最后重新启动系统以使这些更改生效。