在linux中,如果需要桥接网卡,桥接模块会自动加载。但bridge的依赖项之一是ipv6。由于我只需要 ipv4,有什么方法可以覆盖 ipv6 依赖项吗?我尝试将该模块列入黑名单,但它根本不起作用。
编辑:问题不是问如何禁用 ipv6,而是我想知道如何在没有 ipv6 模块的情况下加载桥接。问题不重复。
答案1
从其配置定义:
depends on: CONFIG_IPV6 || CONFIG_IPV6 = CONFIG_n
看来桥接模块要么依赖于 ipv6 模块(如果它是在内核中编译的(内置或作为模块)),要么不会依赖它(如果它根本没有在内核中编译)。因此,如果您不想使用 IPv6,您可以简单地使用没有CONFIG_IPV6
设置该选项的内核。
如果这不是一个选择,您可以执行以下操作之一:
首先加载 ipv6 模块 (
modprobe ipv6
),然后立即禁用该接口或任何其他或所有接口的 IPv6,方法是更改disable_ipv6
切换到 1:echo 1 > /proc/sys/net/ipv6/conf/someinterface/disable_ipv6
或使用等效的 sysctl (更多
sudo
或ip netns
友好):sysctl -w net.ipv6.conf.someinterface.disable_ipv6=1
必须首先加载 ipv6 模块才能禁用其功能!否则上面的切换将不可用。
在桥接接口本身上禁用 IPv6 确实可能是个好主意。
如果您想禁用 ipv6 的任何使用,包括稍后出现的较新接口:
sysctl -w net.ipv6.conf.default.disable_ipv6=1 sysctl -w net.ipv6.conf.all.disable_ipv6=1
还有一个内核启动选项
ipv6.disable=1
,它可能更适合有限的环境(例如嵌入式),并且可能不会安装所有 ipv6 代码,但我没有测试它是否与您的桥接“激活”兼容。将“ipv6.disable=1”添加到引导选项,然后保存 grub 文件:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 quiet splash"
此引导选项的详细信息请参见 AskUbuntu 答案:如何永久禁用 IPv6?
然后我想这应该也可以工作(但我也无法测试它,因为我有内置的 IPv6):而不是简单地使用
modprobe ipv6
第一种方法,而是尝试这个:modprobe ipv6 disable=1
或者
modprobe ipv6 disable_ipv6=1
在它被加载之前。如果这有效,那么您可以将其添加为类似以下内容的选项:
options ipv6 disable=1 disable_ipv6=1 #pick the right option
例如在一个名为
/etc/modprobe.d/disable-ipv6.conf
.