如何永久禁用 IPv6?

Tin*_*ats 64 security ipv6 networking

我们如何通过终端命令在系统范围内禁用 IPv6?

我读过编辑/etc/modprobe.d/aliases 并替换:

alias net-pf-10 ipv6
Run Code Online (Sandbox Code Playgroud)

和:

alias net-pf-10 off
alias ipv6 off
Run Code Online (Sandbox Code Playgroud)

这是否可以安全应用并且它是否会在重新启动后永久禁用 ipv6?

Eri*_*lho 85

将以下几行放入后,我成功禁用了 IPv6 /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Run Code Online (Sandbox Code Playgroud)

还运行此命令以加载更改

sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

  • 在将这些行添加到 sysctl.conf 后,运行 `sudo sysctl -p` 或重新启动以使更改生效。 (12认同)
  • 我只需要在无线上执行此操作作为错误解决方法,以便我可以再次连接。以下是仅对一个适配器执行此操作的方法:`net.ipv6.conf.wlan0.disable_ipv6 = 1` (5认同)
  • 这在 Ubuntu 17.10 上不起作用。有关 grub 修复,请参阅下面的 NullNoname 注释。 (2认同)
  • 也不适用于 Ubuntu 16.04。Grub 方法有效。 (2认同)

Nul*_*ame 63

如果您的 PC 在启动时没有加载 /etc/sysctl.conf(我就是这种情况),则需要从 grub 中禁用 IPv6。Linux 内核有一个名为“ipv6.disable=1”的启动选项,它禁止启动 IPv6。

要编辑引导选项,请以 root 用户身份使用任何文本编辑器编辑“/etc/default/grub”:

sudo nano /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

找到包含“GRUB_CMDLINE_LINUX_DEFAULT”的行:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Run Code Online (Sandbox Code Playgroud)

将“ipv6.disable=1”添加到引导选项,然后保存您的 grub 文件:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 quiet splash"
Run Code Online (Sandbox Code Playgroud)

最后,更新 grub:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

  • +1 这可以工作并完全禁用 IPv6,因此没有留下 `/proc/sys/net/ipv6/` 的痕迹,这可能会产生诸如 `X11 forwarding request failed` 之类的问题,因为 `sshd` 试图绑定到未配置的IPv6 接口。请注意,类似地,您可以在纯 IPv6 虚拟机上以这种方式摆脱 IPv4。谢谢。 (10认同)
  • 这对 20.10 有效。更简洁的方法是创建一个文件“/etc/default/grub.d/disable-ipv6.cfg”,其内容为“GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} ipv6.disable=1”。不要忘记“update-grub”。 (2认同)

pol*_*nut 9

卡瓦略的回答包括关于必须跑步的评论对sudo sysctl -p我帮助最大。

但是,至少在我的情况下:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.<mydevice>.disable_ipv6 = 1
Run Code Online (Sandbox Code Playgroud)

似乎第二行是必要的。

也许这与我使用 TP-Link Archer T2U 的事实有关,为此我必须从源代码自定义构建驱动程序。

我的假设是,因此,<mydevice>不算作“ all”之一。

因此,简而言之,如果您自定义添加了(自定义)网络驱动程序,则net.ipv6.conf.all.disable_ipv6 = 1可能不足以禁用 IPv6 网络。

不过不得不承认,我没有试过这条线net.ipv6.conf.default.disable_ipv6 = 1

  • Upvote 提到有时需要禁用不同的设备。 (2认同)
  • 我有“默认”条目,我必须配置特定设备才能成功禁用它。 (2认同)

mch*_*hid 8

以下是如何检查您的计算机上是否启用了 ipv6

test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
Run Code Online (Sandbox Code Playgroud)

如果你看到

Running kernel is IPv6 ready
Run Code Online (Sandbox Code Playgroud)

它已启用。

如果没有看到输出,则不是。

如果此页面上的其他答案对您不起作用,要禁用 ipv6,请将 ipv6 全部列入黑名单。为此,请使用以下命令:

echo 'blacklist ipv6' | sudo tee -a '/etc/modprobe.d/blacklist.local' >/dev/null 
Run Code Online (Sandbox Code Playgroud)

此外,这也可能有所帮助:

echo 'install ipv6 /bin/true' | sudo tee -a '/etc/modprobe.d/blacklist.local' >/dev/null
Run Code Online (Sandbox Code Playgroud)

重新启动以使更改生效。要在启动后检查它是否已启用,请再次运行此命令:

test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
Run Code Online (Sandbox Code Playgroud)

应该没有输出。

单击此处了解有关如何在启动时禁用 IPV6 的信息。


小智 6

如果您使用的是 Ubuntu 的现代版本(我使用的是 16.04 LTS),那么您可以使用这个整洁的解决方案:

创建/etc/sysctl.d/60-ipv6-disable.conf包含以下文本:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Run Code Online (Sandbox Code Playgroud)

service procps start

  • 这是最干净的方法 - 不明白为什么被否决。它也适用于 fedora/centos/redhat。它的优点是它不会改变系统默认文件(如最流行的答案中建议的直接 sysctl.conf ) (2认同)