如何在 Linux 中禁用ipv6或者启用 ipv6

在本文中,将介绍在 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

最后重新启动系统以使这些更改生效。

日期:2020-06-02 22:18:30 来源:oir作者:oir