如何永久禁用IPv6?


54

我们如何通过终端命令禁用整个IPv6系统?

我已阅读编辑/etc/modprobe.d/aliases 并替换为:

alias net-pf-10 ipv6

与:

alias net-pf-10 off
alias ipv6 off

这样使用安全吗,并且在重新启动后会永久禁用ipv6吗?


5
为什么要永久禁用IPv6?
— 安德森·格林

2
绝对有理由(嗯,我实际上可以在MS Windows上找到一个)没有理由关闭IPv6。你为什么想这么做?
— 2013年

17
完全没有理由实际上要打开ipv6。一切仍然是ipv4,它对于管理小型网络且时间有限的人没有任何优势。它是攻击和潜在错误配置的又一载体,因此谨慎选择禁用它。也许不是任何IETF工程师想要听到的,但这不是我的问题。如果有充分的理由,我将启用它,直到那时,我只需要管理另一个攻击媒介。
— 乔纳森·费舍尔

8
禁用IPv6不能使您免受IPv6攻击。启用它,对其进行处理并从中学习会更好,这是使您的环境更加满意的唯一方法。最好让每个人都学习“如何永久禁用IPv4”。首先,IPv6比IPv4容易得多,因此不再需要NAT,因此管理起来就少了……Internet的增长非常快,几年后,IPv6网络将比IPv4更大,因此,使用IPv4,您将脱离真正的Internet。快走!升级您的IP!改变是一件好事。
— ThiagoCMC 2014年

7
@ JonathanS.Fisher和其他人-这些评论没有帮助。仅仅因为您可能不知道禁用IPv6的原因,并不意味着就没有一个。一种主要情况是不支持IPv6的VPN服务。如果不禁用它,则会泄漏您的IPv6地址。
— 斯康

Answers:


74

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

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

还运行此命令以加载更改

sudo sysctl -p

VMware上的Uubuntu无法ping通,而我在Ubuntu上关闭了ipv6,现在可以了。
— Honghe.Wu

12
将这些行添加到sysctl.conf后,请运行sudo sysctl -p或重新引导以使更改生效。
— Rajat Gupta 2014年

4
我只需要在无线网络上执行此操作即可解决错误,因此我可以再次连接。以下是仅针对一个适配器的操作方法:net.ipv6.conf.wlan0.disable_ipv6 = 1
— cmc 2014年

1
这在Ubuntu 17.10上不起作用。有关grub修复程序,请参见下面的NullNoname注释。
— 路加福音

1
也不适用于Ubuntu 16.04。rub方法有效。
— Penghe Geng

53

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

要编辑启动选项,请使用任何文本编辑器作为root用户编辑“ / etc / default / grub”:

sudo nano /etc/default/grub

查找包含“ GRUB_CMDLINE_LINUX_DEFAULT”的行:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

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

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 quiet splash"

最后,更新grub:

sudo update-grub

6
1这个工程和完全禁用IPv6中,因此不存在的痕迹/proc/sys/net/ipv6/留其可产生类似的问题X11 forwarding request failed,因为sshd试图绑定到非配置的IPv6接口。请注意,类似地,您可以在纯IPv6 VM上以这种方式摆脱IPv4。谢谢。
— 蒂诺2014年

7

Carvalho的回答(包括有关必须跑步的评论)对sudo sysctl -P我的帮助最大。

但是,至少就我而言:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.<mydevice>.disable_ipv6 = 1

似乎第二行是必要的。

也许这与我使用的是TP-Link Archer T2U有关,为此我必须从源代码中自定义构建驱动程序。
我的假设是,结果<mydevice>不算作“ all”之一。
因此,简而言之,如果您自定义添加了(自定义)网络驱动程序,则net.ipv6.conf.all.disable_ipv6 = 1可能不足以禁用IPv6网络。

但是必须承认,我没有尝试
net.ipv6.conf.default.disable_ipv6 = 1


1
赞成提到有时需要禁用其他设备。
— 斯康

缺少default线路可能是这里的问题。如果在执行sysctl时在引导过程中尚未加载驱动程序,则它不包含在其中all-但是设置默认值将意味着它在加载后会得到设置。
— Charles Duffy

1
我有该default条目,并且必须配置特定设备才能成功禁用它。
— 阿方索西川

7

这是检查计算机上是否启用ipv6的方法

test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"

如果你看到

Running kernel is IPv6 ready

它被启用。

如果看不到输出,则不会。

如果您无法使用此页面上的其他答案,则要禁用ipv6,请将ipv6一起列入黑名单。为此,请使用以下命令:

echo 'blacklist ipv6' | sudo tee -a '/etc/modprobe.d/blacklist.local' >/dev/null 

另外,这可能也有帮助:

echo 'install ipv6 /bin/true' | sudo tee -a '/etc/modprobe.d/blacklist.local' >/dev/null

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

test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"

应该没有输出。

单击此处以获取有关如何在引导时禁用IPV6的信息。


该答案假定内核ipv6功能部件是内核模块(blacklist.local用于防止其加载)。在某些情况下,ipv6已编译到内核(不是模块)中,在这种情况下,有必要使用ipv6.disable=1引导参数表引导内核(这样做是:(1)sudo gedit /etc/default/grub(2)搜索该行GRUB_CMDLINE_LINUX_DEFAULT=<args>,(3)添加ipv6.disable=1到启动参数)
— humanityANDpeace

@humanityANDpeace您可能会对这个更全面的答案感兴趣:unix.stackexchange.com/a/190189
— mchid '17

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

跑 service procps start


2
这是最干净的方法-不知道为什么投票失败。它也适用于fedora / centos / redhat。它的优点是它不会更改系统默认文件(如最受欢迎的答案中建议的那样直接更改sysctl.conf)
— CostinGuină17年

@Costin我没有投票,但这并不总是有效。有时您必须输入特定的设备名称(例如,在安装自定义驱动程序的情况下)。请参阅Alfonso Nishikawas对我的回答的评论。
— polynomial_donut

我很庆幸我采用了这种方法,因为我最终失去了在远程服务器上的连接(它需要 IPv6),而且很容易将我的助手定向到现场删除一个文件并重新启动。
— Roger Dueck

我不得不service procps restart在ubuntu 18.04上运行
— iPherian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.