![如何从 Linux 完全、动态地禁用 IPv4 堆栈?](https://linux22.com/image/545581/%E5%A6%82%E4%BD%95%E4%BB%8E%20Linux%20%E5%AE%8C%E5%85%A8%E3%80%81%E5%8A%A8%E6%80%81%E5%9C%B0%E7%A6%81%E7%94%A8%20IPv4%20%E5%A0%86%E6%A0%88%EF%BC%9F.png)
我该如何禁用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 功能。