如何在Linux發(fā)行版下禁用IPv6?
譯文互聯(lián)網(wǎng)協(xié)議版本6(IPv6)是互聯(lián)網(wǎng)協(xié)議(IP)的最新版本;而IP是一種通信協(xié)議,它為眾多網(wǎng)絡(luò)上的計(jì)算機(jī)提供了一種識別和定位系統(tǒng),并且跨互聯(lián)網(wǎng)路由轉(zhuǎn)發(fā)流量。IPv6當(dāng)初由互聯(lián)網(wǎng)工程任務(wù)組(IETF)開發(fā),旨在處理期待已久的IPv4地址耗盡問題。IPv6的初衷是取代IPv4。IPv6比較新,有時(shí)會出現(xiàn)行為異常,這取決于配置方式。本文將介紹如何在Ubuntu、Debian、Kali和Linux Mint等Linux發(fā)行版下禁用IPv6。
互聯(lián)網(wǎng)上的每一個設(shè)備都被分配了一個IP地址,以識別身份和確定位置。由于互聯(lián)網(wǎng)在上世紀(jì)90年代迎來商業(yè)化浪潮后發(fā)展迅猛,很顯然需要比IPv4地址空間多得多的地址,以連接將來的眾多新設(shè)備。到1998年,互聯(lián)網(wǎng)工程任務(wù)組(IETF)敲定了后續(xù)協(xié)議:IPv6。IPv6使用128位地址,允許2128個(相當(dāng)于約3.4×1038個)地址,也就是比IPv4多7.9×1028倍,后者使用32位地址,提供約43億個地址。這兩種協(xié)議并不是被設(shè)計(jì)成協(xié)同運(yùn)行的,這增添了向IPv6遷移的復(fù)雜性。然而,幸好已設(shè)想出了幾種IPv6遷移機(jī)制,以便IPv4主機(jī)和IPv6主機(jī)之間能夠通信。
除了提供更大的地址空間外,IPv6還具有其他的技術(shù)優(yōu)點(diǎn)。尤其是,它允許分層地址分配方法,這些方法便于跨互聯(lián)網(wǎng)的路由聚集,因而限制了路由表的不斷擴(kuò)大。多播地址的使用得到了擴(kuò)展和簡化,并為服務(wù)交付提供了額外的優(yōu)化。該協(xié)議在設(shè)計(jì)當(dāng)初就已經(jīng)考慮到了設(shè)備移動性、安全性和配置等方面。
IPv6地址由8組四個十六進(jìn)制位表示,組與組之間由分號隔開,比如2001:0db8:85a3:0042:1000:8a2e:0370:7334,但是有一些方法可以縮短這種全面標(biāo)記法。不過,IPv6還沒有得到廣泛的支持,采用率仍在逐漸提高。
你的系統(tǒng)支持IPv6嗎?
為了讓IPv6正常工作,你就需要一款支持IPv6的操作系統(tǒng)。Ubuntu、Debian、Linux Mint和大多數(shù)現(xiàn)代發(fā)行版支持它。你可以查看ipconfig的輸出結(jié)果,看看IPv6是否正常工作,它是否被分配給了網(wǎng)絡(luò)接口:
- $ ifconfig
- eth0 Link encap:Ethernet HWaddr 00:1c:c0:f8:79:ee
- inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
- inet6 addr: fe80::21c:c0ff:fef8:79ee/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:110880 errors:0 dropped:0 overruns:0 frame:0
- TX packets:111960 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:62289395 (62.2 MB) TX bytes:25169458 (25.1 MB)
- Interrupt:20 Memory:e3200000-e3220000
- lo Link encap:Local Loopback
- inet addr:127.0.0.1 Mask:255.0.0.0
- inet6 addr: ::1/128 Scope:Host
- UP LOOPBACK RUNNING MTU:65536 Metric:1
- RX packets:45258 errors:0 dropped:0 overruns:0 frame:0
- TX packets:45258 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:0
- RX bytes:4900560 (4.9 MB) TX bytes:4900560 (4.9 MB)
查看inet6 addr這一行。
接下來你需要同樣支持IPv6的路由器/調(diào)制解調(diào)器。除此之外,你的互聯(lián)網(wǎng)服務(wù)提供商(ISP)也得支持IPv6。
不用檢查網(wǎng)絡(luò)基礎(chǔ)設(shè)施的每一個部分,更好的辦法就是只要查明你能不能通過IPv6連接到網(wǎng)站。有許多網(wǎng)站可以對你的連接測試IPv6支持。比如說,試著連接到http://testmyipv6.com/。
啟用IPv6的內(nèi)核參數(shù)如下所示:
- $ sysctl net.ipv6.conf.all.disable_ipv6
- net.ipv6.conf.all.disable_ipv6 = 0
- $ sysctl net.ipv6.conf.default.disable_ipv6
- net.ipv6.conf.default.disable_ipv6 = 0
- $ sysctl net.ipv6.conf.lo.disable_ipv6
- net.ipv6.conf.lo.disable_ipv6 = 0
通過proc文件同樣能查看:
- $ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
- 0
注意:變量控制著IPv6的disabling。于是將它們設(shè)成1,就可以禁用IPv6。
如果IPv6不受支持,就禁用它
所以,如果IPv6在你的網(wǎng)絡(luò)基礎(chǔ)設(shè)施上不受支持,完全禁用它可能很有用。原因何在?因?yàn)镮Pv6在不支持它的網(wǎng)絡(luò)上會引起一些問題,比如域名查詢延遲,比如不必要地試圖連接到IPv6地址,導(dǎo)致網(wǎng)絡(luò)連接延遲,等等。
我確實(shí)遇到過諸如此類的一些問題。apt-get命令偶爾會試圖連接到IPv6地址,連接失敗后,會重新試著連接到IPv4地址。不妨看看這個輸出結(jié)果:
- $ sudo apt-get update
- Ign http://archive.canonical.com trusty InRelease
- Ign http://archive.canonical.com raring InRelease
- Err http://archive.canonical.com trusty Release.gpg
- 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]
- Err http://archive.canonical.com raring Release.gpg
- 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]
- .....
諸如此類的錯誤在最新的Ubuntu版本中比較常見,可能是由于這些版本試圖比以往更頻繁地使用IPv6。
我注意到了類似的問題出現(xiàn)在Hexchat等其他的應(yīng)用程序中,在Google Chrome中也出現(xiàn)過,有時(shí)要花比平常更長的時(shí)間來查詢域名。
所以最好的解決辦法就是完全禁用IPv6,以此杜絕那些問題。這只需要一處小小的配置,就能幫助你解決系統(tǒng)上的許多網(wǎng)絡(luò)問題。用戶甚至反映,改動配置后,互聯(lián)網(wǎng)速度有所提升。
#p#
第一種方法:禁用IPv6
編輯文件/etc/sysctl.conf:
- $ sudo gedit /etc/sysctl.conf
然后在該文件的末尾處填寫下列幾行:
- # IPv6 disabled
- net.ipv6.conf.all.disable_ipv6 = 1
- net.ipv6.conf.default.disable_ipv6 = 1
- net.ipv6.conf.lo.disable_ipv6 = 1
保存文件,關(guān)閉文件。
使用下列命令重啟sysctl
- $ sudo sysctl -p
再次查看ifconfig的輸出結(jié)果,現(xiàn)在應(yīng)該沒有ipv6地址了。
- $ ifconfig
- eth0 Link encap:Ethernet HWaddr 08:00:27:5f:28:8b
- inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:1346 errors:0 dropped:0 overruns:0 frame:0
- TX packets:965 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:1501691 (1.5 MB) TX bytes:104883 (104.8 KB)
要是這一招不管用,那么試試重啟系統(tǒng),再次查看ifconfig。
第二種方法:禁用IPv6,使用GRUB方法
還可以編輯grub配置文件,以此禁用IPv6。
- $ sudo gedit /etc/default/grub
找到含有GRUB_CMDLINE_LINUX的這一行,編輯該行,如下所示。
- GRUB_CMDLINE_LINUX="ipv6.disable=1"
同樣還可以添加到名為GRUB_CMDLINE_LINUX_DEFAULT的變量的值,任何一種方法都管用。保存文件,關(guān)閉文件,重新生成grub配置。
- $ sudo update-grub2
重啟。現(xiàn)在,IPv6應(yīng)該已被禁用了。
第三種方法:不禁用IPv6,設(shè)置IPv4的優(yōu)先級高于IPv6
找到getaddrinfo(3)配置文件,也就是/etc/gai.conf,并去掉相應(yīng)行的注釋,讓IPv4的優(yōu)先級高于IPv6。
- $ sudo gedit /etc/gai.conf
找到這一行,去掉其注釋:
- #precedence ::ffff:0:0/96 100
那樣一來,它看起來就像這樣:
- precedence ::ffff:0:0/96 100
保存并退出文件。重啟后一切都搞定了,因?yàn)楝F(xiàn)在優(yōu)先處理的是IPv4。如果你要啟用IPv6,但是在執(zhí)行DNS查詢之類的操作時(shí)優(yōu)先處理IPv4,這是最佳方法。
結(jié)束語
禁用IPv6會帶來問題。如果你的互聯(lián)網(wǎng)連接和路由器已經(jīng)遷移到了IPv6,你就會失去合理使用它的能力。一些家庭網(wǎng)絡(luò)功能可能也需要IPv6,比如說,Windows 7和Linux等操作系統(tǒng)中引入的易于使用的家庭組(Homegroup)家庭網(wǎng)絡(luò)功能就需要啟用你家庭網(wǎng)絡(luò)上的計(jì)算機(jī)中的IPv6,才能使用它。
整個世界正在向IPv6遷移,不過進(jìn)展過于緩慢。IPv6是取代IPv4的必要技術(shù),因?yàn)槲覀兛煊帽MIPv6,IPv6才是解決之道。在這種大環(huán)境下,最后一種設(shè)置優(yōu)先級的方法(不禁用IPv6,設(shè)置IPv4的優(yōu)先級高于IPv6)是更好的方法。你很有可能實(shí)際上在自己的網(wǎng)絡(luò)上不需要IPv6,除非依賴Windows家庭組或類似的功能,所以如果你明確知道自己在干嘛,禁用它可能危害不會特別大。然而,除非互聯(lián)網(wǎng)服務(wù)提供商的網(wǎng)絡(luò)或你的家庭網(wǎng)絡(luò)存在嚴(yán)重問題,否則如果你繼續(xù)堅(jiān)持使用IPv4,不會看到速度有所提升的情況。
總之一句話,如果你注意到IPv6需要修復(fù),那么今天就修復(fù),而不是拖到明天才修復(fù)。我們置身于大規(guī)模部署IPv6的早期時(shí)代,我們需要協(xié)同工作,才能化解出現(xiàn)的部署難題。上述的這些解決辦法只是代表一小部分的潛在問題。你總是可以上網(wǎng)尋求幫助,有許多靠譜的IPv6討論論壇可以幫你答疑解惑。要把網(wǎng)絡(luò)行為異常當(dāng)成是了解和改善IPv6互聯(lián)狀態(tài)的機(jī)會,要忍住禁用這種協(xié)議的任何沖動。
原文標(biāo)題:How to disable IPv6 in Linux?