如何从 Linux 完全、动态地禁用 IPv4 堆栈?

如何从 Linux 完全、动态地禁用 IPv4 堆栈?

我该如何禁用IPv4Linux 堆栈?我想这样做动态地即有时我希望启用它,有时我只想要IPv6堆栈。有没有可移植的方法来实现这一点?如果你知道如何在任何发行版中做到这一点,那也会对我有很大帮助。

答案1

在 IRC 上聊了一会之后,大家普遍认为 Linux 内核在 ipv4 和 ipv6 之间共享一些代码,因此完全禁用 ipv4 可能完全不可能。你可以尝试编译不包含 ipv4 部分的内核,但是在这种情况下 ipv6 可能无法编译(但没有什么可以阻止你尝试!)。

据我所知,您可以从接口中删除 ipv4 地址,但我认为目前不可能完全禁用 ipv4。

编辑:在对内核 2.6.36进行快速检查后,make menuconfig我找不到在不禁用整个 TCP/IP 堆栈(以及 ipv6)的情况下禁用 ipv4 的方法。

答案2

如果这是针对开发人员的,那么可以使用“库插入”,使用 LD_PRELOAD 一些经过修改的库,其中包含存根函数,这些存根函数只返回错误(或者根据星期几或其他外部标准调用真正的错误)。

答案3

我认为不可能完全禁用 IPv4,但根据您的目标,放弃所有 IPv4 流量iptables可能就足够了,不是吗?

类似这样的方法应该可行。我还没有在任何机器上测试过,因为我是通过 IPv4 访问它们的。

sudo iptables -I INPUT -j DROP
sudo iptables -O OUTPUT -j DROP

答案4

最主要的是你应该重新编译不包含 ipv4 模块的内核。Fedora 系统

由于系统使用 127.0.0.1 环回接口,因此无法完全禁用它。
但您可以使用 if-cfg 命令禁用一些 ipv4 功能。

相关内容