如何在Linux发行版下禁用IPv6?

译文
系统 Linux 系统运维
互联网协议版本6(IPv6)是互联网协议(IP)的最新版本;而IP是一种通信协议,它为众多网络上的计算机提供了一种识别和定位系统,并且跨互联网路由转发流量。IPv6的初衷是取代IPv4。IPv6比较新,有时会出现行为异常,这取决于配置方式。本文将介绍如何在Ubuntu、Debian、Kali和Linux Mint等Linux发行版下禁用IPv6。

  互联网协议版本6(IPv6)是互联网协议(IP)的最新版本;而IP是一种通信协议,它为众多网络上的计算机提供了一种识别和定位系统,并且跨互联网路由转发流量。IPv6当初由互联网工程任务组(IETF)开发,旨在处理期待已久的IPv4地址耗尽问题。IPv6的初衷是取代IPv4。IPv6比较新,有时会出现行为异常,这取决于配置方式。本文将介绍如何在Ubuntu、Debian、Kali和Linux Mint等Linux发行版下禁用IPv6。

[[145787]]

  互联网上的每一个设备都被分配了一个IP地址,以识别身份和确定位置。由于互联网在上世纪90年代迎来商业化浪潮后发展迅猛,很显然需要比IPv4地址空间多得多的地址,以连接将来的众多新设备。到1998年,互联网工程任务组(IETF)敲定了后续协议:IPv6。IPv6使用128位地址,允许2128个(相当于约3.4×1038个)地址,也就是比IPv4多7.9×1028倍,后者使用32位地址,提供约43亿个地址。这两种协议并不是被设计成协同运行的,这增添了向IPv6迁移的复杂性。然而,幸好已设想出了几种IPv6迁移机制,以便IPv4主机和IPv6主机之间能够通信。

  除了提供更大的地址空间外,IPv6还具有其他的技术优点。尤其是,它允许分层地址分配方法,这些方法便于跨互联网的路由聚集,因而限制了路由表的不断扩大。多播地址的使用得到了扩展和简化,并为服务交付提供了额外的优化。该协议在设计当初就已经考虑到了设备移动性、安全性和配置等方面。

  IPv6地址由8组四个十六进制位表示,组与组之间由分号隔开,比如2001:0db8:85a3:0042:1000:8a2e:0370:7334,但是有一些方法可以缩短这种全面标记法。不过,IPv6还没有得到广泛的支持,采用率仍在逐渐提高。

  你的系统支持IPv6吗?

  为了让IPv6正常工作,你就需要一款支持IPv6的操作系统。Ubuntu、Debian、Linux Mint和大多数现代发行版支持它。你可以查看ipconfig的输出结果,看看IPv6是否正常工作,它是否被分配给了网络接口:  

  1. $ ifconfig  
  2.   eth0 Link encap:Ethernet HWaddr 00:1c:c0:f8:79:ee  
  3.   inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0  
  4.   inet6 addr: fe80::21c:c0ff:fef8:79ee/64 Scope:Link  
  5.   UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1  
  6.   RX packets:110880 errors:0 dropped:0 overruns:0 frame:0  
  7.   TX packets:111960 errors:0 dropped:0 overruns:0 carrier:0  
  8.   collisions:0 txqueuelen:1000  
  9.   RX bytes:62289395 (62.2 MB) TX bytes:25169458 (25.1 MB)  
  10.   Interrupt:20 Memory:e3200000-e3220000 
  11.  
  12. lo Link encap:Local Loopback  
  13.   inet addr:127.0.0.1 Mask:255.0.0.0  
  14.   inet6 addr: ::1/128 Scope:Host  
  15.   UP LOOPBACK RUNNING MTU:65536 Metric:1  
  16.   RX packets:45258 errors:0 dropped:0 overruns:0 frame:0  
  17.   TX packets:45258 errors:0 dropped:0 overruns:0 carrier:0  
  18.   collisions:0 txqueuelen:0  
  19.   RX bytes:4900560 (4.9 MB) TX bytes:4900560 (4.9 MB) 

  查看inet6 addr这一行。

  接下来你需要同样支持IPv6的路由器/调制解调器。除此之外,你的互联网服务提供商(ISP)也得支持IPv6。

  不用检查网络基础设施的每一个部分,更好的办法就是只要查明你能不能通过IPv6连接到网站。有许多网站可以对你的连接测试IPv6支持。比如说,试着连接到http://testmyipv6.com/。

  启用IPv6的内核参数如下所示:  

  1. $ sysctl net.ipv6.conf.all.disable_ipv6  
  2. net.ipv6.conf.all.disable_ipv6 = 0 
  3.  
  4. $ sysctl net.ipv6.conf.default.disable_ipv6  
  5. net.ipv6.conf.default.disable_ipv6 = 0 
  6.  
  7. $ sysctl net.ipv6.conf.lo.disable_ipv6  
  8. net.ipv6.conf.lo.disable_ipv6 = 0 

  通过proc文件同样能查看:

 

  1. $ cat /proc/sys/net/ipv6/conf/all/disable_ipv6 

  注意:变量控制着IPv6的disabling。于是将它们设成1,就可以禁用IPv6。

  如果IPv6不受支持,就禁用它

  所以,如果IPv6在你的网络基础设施上不受支持,完全禁用它可能很有用。原因何在?因为IPv6在不支持它的网络上会引起一些问题,比如域名查询延迟,比如不必要地试图连接到IPv6地址,导致网络连接延迟,等等。

  我确实遇到过诸如此类的一些问题。apt-get命令偶尔会试图连接到IPv6地址,连接失败后,会重新试着连接到IPv4地址。不妨看看这个输出结果:

 

  1. $ sudo apt-get update  
  2. Ign http://archive.canonical.com trusty InRelease  
  3. Ign http://archive.canonical.com raring InRelease  
  4. Err http://archive.canonical.com trusty Release.gpg  
  5. Cannot initiate the connection to archive.canonical.com:80 (2001:67c:1360:8c01::1b). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::1b 80] 
  6. Err http://archive.canonical.com raring Release.gpg 
  7. Cannot initiate the connection to archive.canonical.com:80 (2001:67c:1360:8c01::1b). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::1b 80] 
  8.  
  9. ..... 

  诸如此类的错误在最新的Ubuntu版本中比较常见,可能是由于这些版本试图比以往更频繁地使用IPv6。

  我注意到了类似的问题出现在Hexchat等其他的应用程序中,在Google Chrome中也出现过,有时要花比平常更长的时间来查询域名。

  所以最好的解决办法就是完全禁用IPv6,以此杜绝那些问题。这只需要一处小小的配置,就能帮助你解决系统上的许多网络问题。用户甚至反映,改动配置后,互联网速度有所提升。

#p#

  第一种方法:禁用IPv6

  编辑文件/etc/sysctl.conf:

  1. $ sudo gedit /etc/sysctl.conf 

  然后在该文件的末尾处填写下列几行:

 

  1. # IPv6 disabled 
  2. net.ipv6.conf.all.disable_ipv6 = 1  
  3. net.ipv6.conf.default.disable_ipv6 = 1  
  4. net.ipv6.conf.lo.disable_ipv6 = 1 

  保存文件,关闭文件。

  使用下列命令重启sysctl

  1. $ sudo sysctl -p 

  再次查看ifconfig的输出结果,现在应该没有ipv6地址了。

 

  1. $ ifconfig  
  2. eth0  Link encap:Ethernet HWaddr 08:00:27:5f:28:8b 
  3.   inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0  
  4. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1  
  5. RX packets:1346 errors:0 dropped:0 overruns:0 frame:0  
  6. TX packets:965 errors:0 dropped:0 overruns:0 carrier:0  
  7. collisions:0 txqueuelen:1000  
  8. RX bytes:1501691 (1.5 MB) TX bytes:104883 (104.8 KB) 

  要是这一招不管用,那么试试重启系统,再次查看ifconfig。

  第二种方法:禁用IPv6,使用GRUB方法

  还可以编辑grub配置文件,以此禁用IPv6。

  1. $ sudo gedit /etc/default/grub 

  找到含有GRUB_CMDLINE_LINUX的这一行,编辑该行,如下所示。

  1. GRUB_CMDLINE_LINUX="ipv6.disable=1" 

  同样还可以添加到名为GRUB_CMDLINE_LINUX_DEFAULT的变量的值,任何一种方法都管用。保存文件,关闭文件,重新生成grub配置。

  1. $ sudo update-grub2 

  重启。现在,IPv6应该已被禁用了。

  第三种方法:不禁用IPv6,设置IPv4的优先级高于IPv6

  找到getaddrinfo(3)配置文件,也就是/etc/gai.conf,并去掉相应行的注释,让IPv4的优先级高于IPv6。

  1. $ sudo gedit /etc/gai.conf 

  找到这一行,去掉其注释:

  1. #precedence ::ffff:0:0/96 100 

  那样一来,它看起来就像这样:

  1. precedence ::ffff:0:0/96 100 

  保存并退出文件。重启后一切都搞定了,因为现在优先处理的是IPv4。如果你要启用IPv6,但是在执行DNS查询之类的操作时优先处理IPv4,这是最佳方法。

  结束语

  禁用IPv6会带来问题。如果你的互联网连接和路由器已经迁移到了IPv6,你就会失去合理使用它的能力。一些家庭网络功能可能也需要IPv6,比如说,Windows 7和Linux等操作系统中引入的易于使用的家庭组(Homegroup)家庭网络功能就需要启用你家庭网络上的计算机中的IPv6,才能使用它。

  整个世界正在向IPv6迁移,不过进展过于缓慢。IPv6是取代IPv4的必要技术,因为我们快用尽IPv6,IPv6才是解决之道。在这种大环境下,最后一种设置优先级的方法(不禁用IPv6,设置IPv4的优先级高于IPv6)是更好的方法。你很有可能实际上在自己的网络上不需要IPv6,除非依赖Windows家庭组或类似的功能,所以如果你明确知道自己在干嘛,禁用它可能危害不会特别大。然而,除非互联网服务提供商的网络或你的家庭网络存在严重问题,否则如果你继续坚持使用IPv4,不会看到速度有所提升的情况。

  总之一句话,如果你注意到IPv6需要修复,那么今天就修复,而不是拖到明天才修复。我们置身于大规模部署IPv6的早期时代,我们需要协同工作,才能化解出现的部署难题。上述的这些解决办法只是代表一小部分的潜在问题。你总是可以上网寻求帮助,有许多靠谱的IPv6讨论论坛可以帮你答疑解惑。要把网络行为异常当成是了解和改善IPv6互联状态的机会,要忍住禁用这种协议的任何冲动。

原文标题:How to disable IPv6 in Linux?

责任编辑:火凤凰 来源: 51CTO
相关推荐

2020-10-06 18:55:16

Ubuntu LinuIPv6网络协议

2016-10-09 08:50:36

2019-06-28 15:25:05

IPv6协议Ubuntu

2018-10-22 09:00:00

Linux发行版双系统

2010-05-31 09:58:57

关闭IPv6

2010-05-31 10:16:31

禁用IPv6协议

2009-04-09 17:03:43

LinuxMint 6“KDE”

2021-11-03 08:00:00

Linux开源操作系统

2019-04-09 15:38:18

Linux发行版Windows

2019-12-30 14:23:02

UbuntuLinuxgrub

2022-11-20 15:53:06

UbuntuLinuxFFmpeg

2018-12-24 09:48:45

UbuntuLinuxPutty

2009-11-30 10:47:20

Greenie LinLinux

2016-09-18 10:08:38

Linux发行版SUSE Studio

2021-06-11 06:10:25

Linux发行版操作系统

2017-10-16 09:04:11

Linux发行版U盘

2019-07-01 10:09:09

IPv6IPv4运营商

2023-06-16 12:15:09

UbuntuLinuxAVIF 图像

2021-09-06 11:29:59

LinuxCutefishOS操作系统

2009-12-01 16:55:40

Live Linux
点赞
收藏

51CTO技术栈公众号