如何在 Ubuntu Linux 上禁用 IPv6
想知道怎樣在 Ubuntu 上禁用 IPv6 嗎?我會(huì)在這篇文章中介紹一些方法,以及為什么你應(yīng)該考慮這一選擇;以防改變主意,我也會(huì)提到如何啟用,或者說(shuō)重新啟用 IPv6。
什么是 IPv6?為什么會(huì)想要禁用它?
互聯(lián)網(wǎng)協(xié)議第 6 版Internet Protocol version 6(IPv6)是互聯(lián)網(wǎng)協(xié)議(IP)的最新版本?;ヂ?lián)網(wǎng)協(xié)議是一種通信協(xié)議,它為網(wǎng)絡(luò)上的計(jì)算機(jī)提供識(shí)別和定位系統(tǒng),并在互聯(lián)網(wǎng)上進(jìn)行通信路由。IPv6 于 1998 年設(shè)計(jì),以取代 IPv4 協(xié)議。
IPv6 意在提高安全性與性能的同時(shí)保證地址不被用盡;它可以在全球范圍內(nèi)為每臺(tái)設(shè)備分配唯一的以 128 位比特存儲(chǔ)的地址,而 IPv4 只使用了 32 位比特。
盡管 IPv6 的目標(biāo)是取代 IPv4,但目前還有很長(zhǎng)的路要走;互聯(lián)網(wǎng)上只有不到 30% 的網(wǎng)站支持 IPv6(這里 是谷歌的統(tǒng)計(jì)),IPv6 有時(shí)也給 一些應(yīng)用帶來(lái)問(wèn)題。
由于 IPv6 使用全球(唯一分配的)路由地址,以及(仍然)有互聯(lián)網(wǎng)服務(wù)供應(yīng)商Internet Service Provider(ISP)不提供 IPv6 支持的事實(shí),IPv6 這一功能在提供全球服務(wù)的虛擬私人網(wǎng)絡(luò)Virtual Private Network(虛擬專(zhuān)用網(wǎng))供應(yīng)商的優(yōu)先級(jí)列表中處于較低的位置,這樣一來(lái),他們就可以專(zhuān)注于虛擬專(zhuān)用網(wǎng)用戶(hù)最重要的事情:安全。
不想讓自己暴露在各種威脅之下可能是另一個(gè)讓你想在系統(tǒng)上禁用 IPv6 的原因。雖然 IPv6 本身比 IPv4 更安全,但我所指的風(fēng)險(xiǎn)是另一種性質(zhì)上的。如果你不實(shí)際使用 IPv6 及其功能,那么啟用 IPv6 后,你會(huì)很容易受到各種攻擊,因而為黑客提供另一種可能的利用工具。
同樣,只配置基本的網(wǎng)絡(luò)規(guī)則是不夠的;你必須像對(duì) IPv4 一樣,對(duì)調(diào)整 IPv6 的配置給予同樣的關(guān)注,這可能會(huì)是一件相當(dāng)麻煩的事情(維護(hù)也是)。并且隨著 IPv6 而來(lái)的將會(huì)是一套不同于 IPv4 的問(wèn)題(鑒于這個(gè)協(xié)議的年齡,許多問(wèn)題已經(jīng)可以在網(wǎng)上找到了),這又會(huì)使你的系統(tǒng)多了一層復(fù)雜性。
據(jù)觀察,在某些情況下,禁用 IPv6 有助于提高 Ubuntu 的 WiFi 速度。
在 Ubuntu 上禁用 IPv6 [高級(jí)用戶(hù)]
在本節(jié)中,我會(huì)詳述如何在 Ubuntu 上禁用 IPv6 協(xié)議,請(qǐng)打開(kāi)終端(默認(rèn)快捷鍵:CTRL+ALT+T),讓我們開(kāi)始吧!
注意:接下來(lái)大部分輸入終端的命令都需要 root 權(quán)限(sudo)。
警告!
如果你是一個(gè)普通 Linux 桌面用戶(hù),并且偏好穩(wěn)定的工作系統(tǒng),請(qǐng)避開(kāi)本教程,接下來(lái)的部分是為那些知道自己在做什么以及為什么要這么做的用戶(hù)準(zhǔn)備的。
1. 使用 sysctl 禁用 IPv6
首先,可以執(zhí)行以下命令來(lái)檢查 IPv6 是否已經(jīng)啟用:
- ip a
如果啟用了,你應(yīng)該會(huì)看到一個(gè) IPv6 地址(網(wǎng)卡的名字可能會(huì)與圖中有所不同)
IPv6 Address Ubuntu
IPv6 Address Ubuntu在教程《在 Ubuntu 中重啟網(wǎng)絡(luò)》(LCTT 譯注:其實(shí)這篇文章并沒(méi)有提到使用 sysctl 的方法……)中,你已經(jīng)見(jiàn)過(guò) sysctl 命令了,在這里我們也同樣會(huì)用到它。要禁用 IPv6,只需要輸入三條命令:
- sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
- sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
- sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
檢查命令是否生效:
- ip a
如果命令生效,你應(yīng)該會(huì)發(fā)現(xiàn) IPv6 的條目消失了:
IPv6 Disabled Ubuntu
然而這種方法只能臨時(shí)禁用 IPv6,因此在下次系統(tǒng)啟動(dòng)的時(shí)候,IPv6 仍然會(huì)被啟用。
(LCTT 譯注:這里的臨時(shí)禁用是指這次所做的改變直到此次關(guān)機(jī)之前都有效,因?yàn)橄嚓P(guān)的參數(shù)是存儲(chǔ)在內(nèi)存中的,可以改變值,但是在內(nèi)存斷電后就會(huì)丟失;這種意義上來(lái)講,下文所述的兩種方法都是臨時(shí)的,只不過(guò)改變參數(shù)值的時(shí)機(jī)是在系統(tǒng)啟動(dòng)的早期,并且每次系統(tǒng)啟動(dòng)時(shí)都有應(yīng)用而已。那么如何完成這種意義上的永久改變?答案是在編譯內(nèi)核的時(shí)候禁用相關(guān)功能,然后要后悔就只能重新編譯內(nèi)核了(悲)。)
一種讓選項(xiàng)持續(xù)生效的方式是修改文件 /etc/sysctl.conf,在這里我用 vim 來(lái)編輯文件,不過(guò)你可以使用任何你想使用的編輯器,以及請(qǐng)確保你擁有管理員權(quán)限(用 sudo):
Sysctl Configuration
將下面這幾行(和之前使用的參數(shù)相同)加入到文件中:
- net.ipv6.conf.all.disable_ipv6=1
- net.ipv6.conf.default.disable_ipv6=1
- net.ipv6.conf.lo.disable_ipv6=1
執(zhí)行以下命令應(yīng)用設(shè)置:
- sudo sysctl -p
如果在重啟之后 IPv6 仍然被啟用了,而你還想繼續(xù)這種方法的話,那么你必須(使用 root 權(quán)限)創(chuàng)建文件 /etc/rc.local 并加入以下內(nèi)容:
- #!/bin/bash
- # /etc/rc.local
- /etc/sysctl.d
- /etc/init.d/procps restart
- exit 0
接著使用 chmod 命令 來(lái)更改文件權(quán)限,使其可執(zhí)行:
- sudo chmod 755 /etc/rc.local
這會(huì)讓系統(tǒng)(在啟動(dòng)的時(shí)候)從之前編輯過(guò)的 sysctl 配置文件中讀取內(nèi)核參數(shù)。
2. 使用 GRUB 禁用 IPv6
另外一種方法是配置 GRUB,它會(huì)在系統(tǒng)啟動(dòng)時(shí)向內(nèi)核傳遞參數(shù)。這樣做需要編輯文件 /etc/default/grub(請(qǐng)確保擁有管理員權(quán)限)。
GRUB Configuration
現(xiàn)在需要修改文件中分別以 GRUB_CMDLINE_LINUX_DEFAULT 和 GRUB_CMDLINE_LINUX 開(kāi)頭的兩行來(lái)在啟動(dòng)時(shí)禁用 IPv6:
- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
- GRUB_CMDLINE_LINUX="ipv6.disable=1"
(LCTT 譯注:這里是指在上述兩行內(nèi)增加參數(shù) ipv6.disable=1,不同的系統(tǒng)中這兩行的默認(rèn)值可能有所不同。)
保存文件,然后執(zhí)行命令:
- sudo update-grub
(LCTT 譯注:該命令用以更新 GRUB 的配置文件,在沒(méi)有 update-grub 命令的系統(tǒng)中需要使用 sudo grub-mkconfig -o /boot/grub/grub.cfg )
設(shè)置會(huì)在重啟后生效。
在 Ubuntu 上重新啟用 IPv6
要想重新啟用 IPv6,你需要撤銷(xiāo)之前的所有修改。不過(guò)只是想臨時(shí)啟用 IPv6 的話,可以執(zhí)行以下命令:
- sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
- sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
- sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
否則想要持續(xù)啟用的話,看看是否修改過(guò) /etc/sysctl.conf,可以刪除掉之前增加的部分,也可以將它們改為以下值(兩種方法等效):
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.default.disable_ipv6=0
- net.ipv6.conf.lo.disable_ipv6=0
然后應(yīng)用設(shè)置(可選):
- sudo sysctl -p
(LCTT 譯注:這里可選的意思可能是如果之前臨時(shí)啟用了 IPv6 就沒(méi)必要再重新加載配置文件了)
這樣應(yīng)該可以再次看到 IPv6 地址了:
IPv6 Reenabled in Ubuntu
另外,你也可以刪除之前創(chuàng)建的文件 /etc/rc.local(可選):
- sudo rm /etc/rc.local
如果修改了文件 /etc/default/grub,回去刪掉你所增加的參數(shù):
- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
- GRUB_CMDLINE_LINUX=""
然后更新 GRUB 配置文件:
- sudo update-grub
尾聲
在這篇文章中,我介紹了在 Linux 上禁用 IPv6 的方法,并簡(jiǎn)述了什么是 IPv6 以及可能想要禁用掉它的原因。