如何永久禁用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.