Linux 延續 Unix 風格,傳統上使用 /etc/network/interfaces(本文以 network/interfaces 簡稱之) 管理網路介面設定。不論那種 Linux 散佈版本都支援這種設定方式, LPI 檢定也是考這一招。而 Ubuntu 近來在桌面環境下引進了另一套網路介面設定管理機制,即NetworkManager 。本文旨在說明 NetworkManager 的使用要項。
Ubuntu Desktop edition (桌面版) 才會安裝 NetworkManager ,Server edition (伺服器版) 並不會安裝 NetworkManager,仍然用傳統的 network/interfaces 管理。兩種版本的網路設備管理策略並不相同,只有 Desktop edition 的使用者才會用到 NetworkManager 。NetworkManager 和 network/interfaces 兩種管理策略,基本上只能選擇一種使用。混用設定只會造成更多問題。
NetworkManager setting
NetworkManager 的設定檔放在 /etc/NetworkManager/nm-system-settings.conf。它基本上只需要4行設定內容即可運作。*1*1這是 Debian/Ubuntu 版本的組態內容。Fedora/RHEL 使用不同的 plugins 設定。
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
更改上述 NetworkManager 的設定後,可以執行 sudo /etc/init.d/network-manager restart 重新載入。*2*2在 Ubuntu 中,更改 network/interfaces 的設定後,則可以執行 sudo /etc/init.d/networking restart 重新載入設定。這兩套機制分別使用不同的管理指令。
按照官方文件的說法,當managed 設為
false
時,NetworkManager 會略過列在 network/interfaces 內的網路設備。也就是說,如果我們把網路設定寫在 network/interfaces 內的話,NetworkManager 就不會去管理它。如下例,network/interfaces 列出了 lo 和 eth0 這兩張網路介面的設定,故 NetworkManager 就不會去管理 lo 和 eth0 這兩張網路介面。
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
如果主機上所有的網路介面設備都列在 network/interfaces 設定的話,桌面上的 NetworkManager 小圖示就會顯示紅色錯誤圖示,提示沒有設備可以管理 (No valid active connections found!)。這是正常的。
如果我們想由 NetworkManager 管理 eth0 的設定,那就要刪掉 network/interfaces 內關於 eth0的設定內容。注意, network/interfaces 內關於 lo 的那兩行設定是必要的,請勿刪除。刪掉的話,系統將不具備 127.0.0.1 (localhost) 的網路介面。
反之,如果我們將 managed 設為 true
時,NetworkManager 會接管所有網路設備的設定,而忽略 network/interfaces 的內容。
system-connections
基本上,NetworkManager 會自動產生與更新 /etc/NetworkManager/system-connections 下的網路卡資訊。如果你發現 NetworkManager 不讓你手動修改網路連線,或是它更新網路設定之後無法正常連線時,可以試著手動刪除 /etc/NetworkManager/system-connections 內的所有檔案,再重新開機(或重新啟動 NetworkManager)。
<span style="font-size:18px;">sudo rm -rf /etc/NetworkManager/system-connections/* sudo /etc/init.d/network-manager restart </span>
70-persistent-net.rules
Debian/Ubuntu 使用 udev 管理硬體設備,也包括了網路卡。網路卡設備的內容會記錄在 /etc/udev/rules.d/70-persistent-net.rules 。它也會影嚮 NetworkManager 的運作。
當我們使用備份功能將系統複製到新的硬體上之後,會因為新網卡的 MAC address 與 70-persistent-net.rules 內的 MAC address 不相同,導致網路卡未被啟用、網路無法連線。此時,只需要刪除 70-persistent-net.rules ,再重開機,讓系統重新產生 70-persistent-net.rules 即可。
或者,手動編輯 70-persistent-net.rules ,將 ATTR{address}=="..."
的內容刪掉,再重開機。
Ubuntu 9.10狀況
Ubuntu 9.10 NetworkManager 存在一個 bug。當我們把所有網路設備都交由 network/interfaces 設定時,NetworkManager 會出現一個名稱叫 ifupdown 的網路連線名稱,而且我們無法在 NetworkManager 中編輯這個連線。不能編輯是正常現象,因為我們將這個網路卡的網路設定權交給了 interfaces。顯然 Ubuntu 9.10 的 NetworkManager 在分析設定時有誤;在 Ubuntu 9.04 中,NetworkManager 不會出現 ifupdown 這種名稱。
此時,我們有兩種處理方法。
- 如果我們就是想要用 network/interfaces 設定網路,那就不用處理。
- 如果我們想改成用 NetworkManager 設定網路。則按上述說明,將 network/interfaces 中關於 eth0 的設定項目全部刪除,把設定權交給 NetworkManager。
在UbuntuServer版本中,因为只存有命令行模式,所以要想进行网络参数设置,只能通过修改/etc/network/interfaces。具体设置方法如下:
(1) UbuntuServer 修改 IP地址
打开/etc/network/interfaces
sudo vim/etc/network/interfaces
加入以下语句:
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx #IP地址
netmask xxx.xxx.xxx.xxx #子网掩码
gateway xxx.xxx.xxx.xxx #网关
(2) UbuntuServer 修改 DNS
打开/etc/resolv.conf
sudo vim/etc/resolv.conf
改为如下内容:
searchlocaldomain #如果本Server为DNS服务器,可以加上这一句,如果不是,可以不加
nameserver172.16.3.4 #希望修改成的DNS
nameserver172.16.3.3 #希望修改成的DNS
(3) UbuntuServer 最后一步,也是最重要的一步
在rc.local里加入这个重启网络配置的命令:
sudo/etc/init.d/networking restart
【Desktop版本】
在Desktop版本中,除了可以修改/etc/network/interfaces来进行配置以外;还可以直接在network-manager中配置。通过 interfaces修改的方法参照Server版本。network-manager的配置和直观,按照提示一步一步操作即可,有兴趣的朋友,可以自行Google或者Baidu。
但如果修改了interfaces,又配置了network-manager(以下简称nm),你就会发现出现了一些莫名其妙的问题:
1,interfaces和 nm中的网络设置不一样,系统实际的IP是哪个?
2,有时候莫名其妙的,界面右上角的网络连接图标就丢失了。
3,明明在nm中配置了正确的网络设置,为什么就上不了网呢?
其实,我们要知道 interfaces和 nm之间的关系,这些问题就不难解释了。
首先,当系统内没有第三方网络管理工具(比如nm)时,系统默认使用interfaces文件内的参数进行网络配置。(就像Server版本一样)
接着,当系统内安装了 nm之后,nm默认接管了系统的网络配置,使用nm 自己的网络配置参数来进行配置。
但是,如果用户在安装nm之后(Desktop版本默认安装了nm),自己手动修改了interfaces 文件,那nm 就自动停止对系统网络的管理,系统改使用interfaces 文件内的参数进行网络配置。
此时,再去修改nm 内的参数,不影响系统实际的网络配置。若要让nm 内的配置生效,必须重新启用nm 接管系统的网络配置。
现在知道了两者之间的工作关系,再看上面的三个问题:
1,要看nm是否接管,如果没有接管,系统实际的IP设置以interfaces 中的为准。反之,以nm 中的为准。
2,当nm 停止接管的时候,网络连接图标就丢失了。
3,同样是接管的问题。
如果用户希望在Desktop版本中,直接使用interfaces 进行网络配置,那最好删除network-manager 。
如果在出现上述问题之后,希望能继续使用nm 来进行网络配置,则需要进行如下操作:
sudo service network-manager stop # 停止 nm服务
sudo rm/var/lib/NetworkManager/NetworkManager.state # 移除nm 的状态文件
sudo gedit/etc/NetworkManager/nm-system-settings.conf # 打开nm 的配置文件
##里面有一行:managed=true
## 如果你手工改过/etc/network/interfaces,nm会自己把这行改成:managed=false
## 将false 修改成true
sudo service network-manager start