一個支援 IPv6 的網路服務,平常又不用,應該把它關掉,才是節省資源的上策。
IPv6 的網路服務是否關閉,模組是否載入,可以先跳至步驟五查詢。
一、切換成 root 身份
以下操作都需先切換成 root 身份,請參考 " 在 Linux 中,切換為 root 身分以操作、設定系統 " 。二、修改「模組探測」的黑名單
編輯「模組探測」黑名單(即:" /etc/modprobe.d/blacklist.conf "),將 ipv6 這個模組列入黑名單。Linux 啟動階段在「模組探測」時,便不會去嘗試啟動它。以 gedit 為例,[root@Celeron-D ~]# gedit /etc/modprobe.d/blacklist.conf在檔案最後加入這列設定,
blacklist ipv6將檔案存回,即完成此步驟。
三、修改 Linux 核心載入命令
上一步驟只是不探測,仍可能載入、佔用記憶體,僅是不執行而已,這樣還不夠。直接在 Linux 核心載入時,加上參數,根本就不將它載入記憶體,更節省電腦資源。在 Fedora 14 及以前的版本,是編輯這個檔案 " /boot/grub/grub.conf ",找到以 " kernel /vmlinux . . ." 為首的那列命令,在命令末端加入 " noipv6 "。在 Fedora 17 (15 和 16 可能也是)是編輯這個檔案 " /boot/grub2/grub.cfg ",找到以 " linux /vmlinux . . ." 為首的那列命令,在命令末端加入 " ipv6.disable=1 "。
注意1:這列命令很長,常會換很多列,加入參數時請多加留意。
注意2:如果找到很多列,不能確定是那一列是 Linux 執行時所用,就每列都加。
四、關閉 IPv6 的「防火牆」
啟動「防火牆」設定程式(可參考:Fedora 之「圖形化介面」的「防火牆」設定程式),從「選單」→「選項」→「配置服務設定」點選後,跳出一個「服務設定」視窗,將 ip6tables 下的打勾全部取消,
按「確定」後,即完成,這個步驟可以避免「防火牆」試圖載入 IPv6 模組,或發出警告訊息。
五、關閉 IPv6 的「防火牆」服務
除了把「防火牆」設定關閉外,作業系統啟動時,也預設開啟 ip6tables 服務,此為執行「防火牆」封包過濾的服務。雖然經前面步驟的設定後,啟動時將因不能正確執行而停止服務,但總是浪費一些時間。所以,還是把它完全關閉,可以加快啟動的時間。這個步驟在 Fedora 14 和 17 有些不同,分述如下:Fedora 14 的查詢、設定命令:
[root@Celeron-D ~]# chkconfig --list ip6tables ip6tables 0:關閉 1:關閉 2:開啟 3:關閉 4:開啟 5:關閉 6:關閉 [root@Celeron-D ~]# chkconfig --level 35 ip6tables off [root@Celeron-D ~]# chkconfig --list ip6tables ip6tables 0:關閉 1:關閉 2:開啟 3:開啟 4:開啟 5:開啟 6:關閉上例中,第一、三列命令為查詢,第二列命令為關閉「運行等級」3 及 5 的 IPv6 的封包過濾服務。
Fedora 17 的查詢、設定:
[root@Core-i7 ~]# systemctl status ip6tables.service
ip6tables.service - IPv6 firewall with ip6tables
Loaded: loaded (/usr/lib/systemd/system/ip6tables.service; enabled)
Active: active (exited) since Tue, 1 Sep 2012 08:02:19 +0800; 3h 32min ago
Process: 470 ExecStart=/usr/libexec/ip6tables.init start (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/ip6tables.service
[root@Core-i7 ~]# systemctl stop ip6tables.service
[root@Core-i7 ~]# systemctl disable ip6tables.service
rm '/etc/systemd/system/basic.target.wants/ip6tables.service'
[root@localhost ~]# systemctl status ip6tables.service
ip6tables.service - IPv6 firewall with ip6tables
Loaded: loaded (/usr/lib/systemd/system/ip6tables.service; disabled)
Active: inactive (dead) since Tue, 1 Sep 2012 8:02:41 +0800; 30s ago
Process: 2354 ExecStop=/usr/libexec/ip6tables.init stop (code=exited, status=0/SUCCESS)
Main PID: 470 (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/ip6tables.service
上例中,第一、四列命令為查詢,第二、三列命令為停止及關閉 IPv6 的封包過濾服務。六、確認 IPv6 完全關閉
在重新開機前,可以先查詢目前系統的 IPv6 支援情況。執行查詢並不需要 root 的身份,一般使用都也可查詢。IPv6 的網路服務是否關閉,可用命令 ifconfig 查詢,[SiB@Celeron-D ~]$ ifconfig lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) . . . . . . p1p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.221 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::230:f1ff:fe5a:316d prefixlen 64 scopeid 0x20<link> ether 00:30:f1:5a:31:6d txqueuelen 1000 (Ethernet) . . . . . .上例中,可看到 " inet6 " 之資訊,此即為 IPv6 服務存在的證據。另外,IPv6 模組是否載入,則用這個命令查詢,
[SiB@Celeron-D ~]$ lsmod | grep ipv6
nf_conntrack_ipv6 | 13928 | 4 | |
nf_defrag_ipv6 | 13708 | 1 | nf_conntrack_ipv6 |
nf_conntrack | 71613 | 3 | xt_state, nf_conntrack_ipv4, nf_conntrack_ipv6 |
接著,查詢經過步驟二 ~ 四後(要重新開機,修改才生效),IPv6 在系統中的狀況,
[SiB@Celeron-D ~]$ ifconfig lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 0 (Local Loopback) . . . . . . p1p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.221 netmask 255.255.255.0 broadcast 192.168.10.255 ether 00:30:f1:5a:31:6d txqueuelen 1000 (Ethernet) . . . . . . [SiB@Celeron-D ~]$ lsmod | grep ipv6 [SiB@Celeron-D ~]$可看到 IPv6 模組完全沒有被載入,而 IPv6 服務也被關閉。
已測試版本:
- Fedora: 14, 17
沒有留言:
張貼留言
感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)