2012年9月2日 星期日

關閉 Fedora 裏不常用的 IPv6 服務

雖然,IPv4 的網路位址已經分配完,新的網路設備也多支援 IPv6,但是大部分的時候,一般使用者仍不太需要 IPv6(至少,目前多數的網路仍在 IPv4 可通行的範圍)。對於 CPU 資源有限,或是想將 CPU 資源用在更需要運算的使用者,是有點浪費且不符合經濟原則的。

    一個支援 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_ipv6137081nf_conntrack_ipv6
nf_conntrack716133xt_state, nf_conntrack_ipv4, nf_conntrack_ipv6
可看到,有些使用 IPv6 或與 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.)