如果没有 /proc/sys/net/ipv6 文件夹,请在 Debian 10 上启用 ipv6

如果没有 /proc/sys/net/ipv6 文件夹,请在 Debian 10 上启用 ipv6

如果运行 ifconfig,我可以看到没有为任何接口分配 ipv6 地址。如果我尝试创建 AF_INET6 套接字,则会收到一条错误消息,指出不支持该地址族。我没有/proc/sys/net/inet6文件夹。该机器运行 Debian 10 (buster)。在/etc/默认/grub没有关于禁用 ipv6 的行。

$ uname -r
4.19.52.1.amd64-smp

请您告诉我如何启用 ipv6?我找到了很多关于如何禁用它的文章,但没有找到如何启用它。

答案1

在 Linux 中禁用 IPv6 的方法有很多种,因此您必须检查所有这些方法。

首先,您的内核版本不太像 Debian 10 标准 AMD64 内核。如果您使用自定义内核,则 IPv6 可能会在内核编译时被禁用,在这种情况下,您需要重新编译内核(或切换到另一个内核)才能启用它。

请跑

grep CONFIG_IPV6= /boot/config-$(uname -r)

看看它说了什么。或者,如果该/boot/config-<kernel version>文件不存在,请改为运行以下命令:

modprobe configs; zcat /proc/config.gz | grep CONFIG_IPV6=

如果响应什么也没有,或者包含一行:

# CONFIG_IPV6 is not set

那么您当前的内核在编译时禁用了 IPv6 支持。在这种情况下,您必须安装新的内核包(或构建并安装自定义内核)才能启用 IPv6。

如果响应包含一行:

CONFIG_IPV6=m

然后 IPv6 支持被编译为内核模块。

如果有一行:

CONFIG_IPV6=y

然后 IPv6 支持被编译到主内核中。在这种情况下,禁用 IPv6 的一种方法是将引导选项添加ipv6.disable=1到内核命令行(/etc/default/grub如果使用 GRUB 引导加载程序,或者在/boot/cmdline.txtRaspberry Pi 引导加载程序中),但您说您已经检查过这一点。

IPv6 编译为模块

modprobe -c |grep "options ipv6"以 root 身份运行。如果响应包含一行:

options ipv6 disable=1

或者

options ipv6 disable_ipv6=1

那么 IPv6 被内核模块配置禁用,您应该在/etc/modprobe.d.

要在这种情况下重新启用 IPv6,请找到该行,将其注释掉,然后update-initramfs -u以 root 身份运行,以确保 IPv6 不会在早期启动时被禁用,因为此禁用策略可能需要重新启动才能重新启用。

(理论上,ipv6在注释掉禁用选项后卸载并重新加载就足够了,但由于模块之间的依赖关系,如果不重新启动,实际上可能很难做到这一点。)

适用于模块化和编译 IPv6 的方法

您还应该检查 sysctl 设置:

grep "disable_ipv6" /etc/sysctl.conf /etc/sysctl.d/*.conf

如果输出包含类似这样的行,则 IPv6 已通过 sysctl 设置禁用:

net.ipv6.conf.<something>.disable_ipv6 = 1

这里,<something>可能是单词alldefault,或者特定网络接口的名称。要重新启用,请注释掉这些disable_ipv6行并以 root 身份运行sysctl -p,然后重新启动(或只是重新配置您的网络接口)。

相关内容