網絡管理器(NetworManager)是檢測網絡、自動連接網絡的程序。無論是無線還是有線連接,它都可以令您輕松管理。對於無線網絡,網絡管理器優先連接已知的網絡並可以自動切換到最可靠的無線網絡。利用網絡管理器的程序可以自由切換在線和離線模式。網絡管理器會相對無線網絡優先選擇有線網絡,支持 VPN。網絡管理器最初由 Redhat 公司開發,現在由 GNOME 管理。
Contents
- 1安裝
- 2前端
- 3配置
- 4測試
- 5常見問題
- 5.1安全Wi-Fi網絡不提示輸入密碼
- 5.2PPTP 通道中無流量
- 5.3網絡管理功能失效
- 5.4定制resolv.conf
- 5.5使用 resolv.conf.head 和 resolv.conf.tail
- 5.6在resolv.conf中保留改動
- 5.7使用dhclient時的DHCP問題
- 5.8主機名問題
- 5.9配置dhclient把主機名推送到DHCP服務器
- 5.10配置NetworkManager使用一個特性的DHCP客戶端
- 5.11缺少默認路由 route
- 5.12沒有探測到 3G 模塊
- 5.13在筆記本上關閉WLAN
- 5.14靜態 IP 設置 變成 DHCP
- 5.15普通用戶無法編輯鏈接
- 5.16刪除隱蔽無線網絡鏈接
- 5.17GNOME VPN失效問題
- 5.18Unable to connect to visible European wireless networks
- 5.19引導時自動連接到VPN不工作
- 5.20dhcpd不斷地拒絕租約
- 5.21Systemd瓶頸
- 5.22網絡(WiFi)經常有規律地斷開
- 6提示與技巧
- 7其它資源
安裝
網絡管理其可以通過networkmanager包安裝。這個包不包括托盤插件nm-applet,此插件是network-manager-applet包的一部分。從1.0版本開始,網絡管理內部獲得了對基本DHCP功能的支持。對於全功能的DHCP或者如果你需要IPV6支持,dhclient 集成了這些功能。
# pacman -Syu networkmanager
systemctl --type=service
然后
停止多余的網絡配置服務。參見
#配置 來激活 NetworkManager 服務。
VPN 支持
NetworkManager 的 VPN 支持基於一個插件系統。如果需要通過 NetworkManager 來使用 VPN, 請安裝以下任一軟件包:
通過 AUR:
PPPoE / DSL 支持
安裝 rp-pppoe 來獲得 PPPoE / DSL 連接支持。
前端
為了配置和輕松使用網絡管理器,大多數用戶會希望安裝一個托盤組件。圖形前端往往顯示在系統托盤(或通知區域),從而允許用戶選擇網絡或者配置 NetworkManager。不同類型的桌面環境下有多種托盤插件。
Gnome環境
Gnome的network-manager-applet幾乎可以運行在所有的桌面環境下。
如果你想儲存驗證信息(Wireless/DSL), 安裝和配置GNOME Keyring
注意,對一個連接激活了Make available to other users
勾選框后,NetworkManager用明文存儲密碼,但是相應的文件只能被root(或者其他用戶通過nm-applet
))訪問。參見#Encrypted Wi-Fi passwords[broken link: invalid section]。
KDE Plasma
KDE 4
Plasma-nm 前端可以通過官方軟件倉庫中的 kdeplasma-applets-plasma-nm[broken link: archived in aur-mirror] 安裝。老的 KNetworkManager 前端已經移到了AUR 軟件包 kdeplasma-applets-networkmanagementAUR 。
如果同時安裝了 KNetworkManager 和 nm-applet,在使用 KDE 時不想使用 nm-applet,將下行加入 /etc/xdg/autostart/nm-applet.desktop
NotShowIn=KDE
詳情參閱 Userbase 頁面。
XFCE
雖然network-manager-applet在Xfce下正常工作,但是為了可以看到通知信息,包括錯誤信息, nm-applet
需要一個 Freedesktop 桌面通知說明(參見 Galapago Project)來顯示他們。要激活通知,請安裝xfce4-notifyd, 此包提供了上述說明的一個實現。
如果沒有這個通知守護進程,nm-applet
就會輸出下面的錯誤到 stdout/stderr:
(nm-applet:24209): libnotify-WARNING **: Failed to connect to proxy ** (nm-applet:24209): WARNING **: get_all_cb: couldn't retrieve system settings properties: (25) Launch helper exited with unknown return code 1. ** (nm-applet:24209): WARNING **: fetch_connections_done: error fetching connections: (25) Launch helper exited with unknown return code 1. ** (nm-applet:24209): WARNING **: Failed to register as an agent: (25) Launch helper exited with unknown return code 1
nm-applet
還會工作得不錯, 不過,沒有通知消息。
如果 nm-applet
在連接到 WiFi 時沒有提示輸入密碼, 僅僅立即斷開連接, 你可能需要安裝 gnome-keyring。
如果托盤插件沒有顯示,安裝xfce4-indicator-pluginAUR包。[3]
Openbox
為了能在Openbox中優雅地工作,Gnome小程序,因為和XFCE同樣的原因,需要xfce4-notifyd通知進程和gnome-icon-theme來在系統托盤中顯示小程序。 GNOME applet 和 xfce4-notifyd 結合可以很好的工作:
如果你想儲存身份驗證信息(Wireless/DSL),請安裝和配置gnome-keyring:
nm-applet
在/etc/xdg/autostart/nm-applet.desktop
中安裝自動啟動文件. 如果你遇到問題(比如,nm-applet
啟動了兩次或者根本沒有啟動), 參考Openbox#autostart 或者[4]來解決.
其它桌面和窗口管理器
所有其他場景下,推薦使用 GNOME 組件。你也需要確保需要gnome-icon-theme被正確安裝並可以顯示小程序。安裝 GNOME hicolor 主題:
要存儲連接密碼,請安裝和配置GNOME Keyring。
想要不使用系統托盤來運行nm-applet
,可以使用 trayer 或 stalonetray。例如,你的PATH中加入像這樣的一個腳本:
nmgui
#!/bin/sh nm-applet 2>&1 > /dev/null & stalonetray 2>&1 > /dev/null killall nm-applet
當你關閉 stalonetray 窗口時,也將會同時關閉 nm-applet
,所以完成網絡設置后不會使用額外的內存。
命令行
下列應用程序可能對於沒有X時配置和管理網絡有幫助。
nmcli
命令行前端nmcli包括在networkmanager中。
對於使用信息,參考man nmcli
。 例子:
- 連接 WiFi 網絡:
nmcli dev wifi connect <name> password <password>
- 通過
wlan1
接口連接 WiFi 網絡:nmcli dev wifi connect <name> password <password> iface wlan1 [profile name]
- 斷開一個接口:
nmcli dev disconnect iface eth0
- 重新連接一個標記為已斷開的接口:
nmcli con up uuid <uuid>
- 獲得 UUID 列表:
nmcli con show
- 查看網絡設備及其狀態列表:
nmcli dev
- 關閉 WiFi:
nmcli r wifi off
nmtui
"nmtui" 是一個基於curses的圖形化前端,包括在networkmanager中。
使用信息參見man nmtui
。
networkmanager-dmenu-gitAUR 是一個通過 dmenu 而不是 nm-applet
來管理 NetworkManager 連接的腳本。它提供了所有必要的特性, 例如連接到已有的 WiFi 或有線網絡, 連接到新的 WiFi 網絡, 在需要的時候詢問密碼, 連接到已有的 VPN, 啟用/停用網絡連接, 運行 nm-connection-editor 的圖形界面。
配置
NetworkManager 需要做這么幾步保證正常運行。確保你/etc/hosts
按照Network configuration#Set the hostname一節的描述配置了/etc/hosts
。
啟用 NetworkManager
NetworkManager通過NetworkManager.service
控制。 NetworkManager 守護進程啟動后,會自動連接到任何可用的已經配置的系統連接。用戶連接或未配置的連接需要通過nmcli
或桌面工具進行配置和連接。
開機啟用 NetworkManager:
# systemctl enable NetworkManager
立即啟動 NetworkManager:
# systemctl start NetworkManager
NetworkManager在/etc/NetworkManager/NetworkManager.conf
有一個全局的配置文件。通常全局的默認配置不需要改動。
設置 PolicyKit 權限
參照General troubleshooting#Session permissions建立一個工作會話. 在工作會話中,你有三種方式授予NetworkManager工作所必須的權限.
方式 1. 登錄后運行PolicyKit認證代理,比如 /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
(polkit-gnome 的一部分). 當你添加和刪除一個網絡鏈接時會提示輸入密碼.
方式 2. 將你的賬戶加入wheel
賬戶組. 管理網絡時你將不需要輸入密碼,但注意你的賬戶同時被賦予了此賬戶組的其他權限,比如運行sudo命令是無需密碼.
方式 3. 將你的賬戶加入network
賬戶組,同時創建以下文件:
/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules
polkit.addRule(function(action, subject) { if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) { return polkit.Result.YES; } });
所有在network
賬戶群中的用戶都能免密碼管理網絡. 但是如果你沒有在 systemd-logind[broken link: invalid section] 中擁有一個活躍會話的話, 在systemd下此方式將失效.
使用 NetworkManager 調度網絡服務
有些服務只有聯網時才有意義,例如 OpenNTPD 和 網絡文件系統掛載(netfs)。dispatcher 可以在連接網絡后啟動這些服務,並在網絡關閉時停止它們。要使用這一功能, 需要啟動NetworkManager-dispatcher.service
。 並且將腳本加到 /etc/NetworkManager/dispatcher.d
目錄。這些腳本必須屬於 root, 否則不會被執行。為了安全起見, 用戶組也設置為 root:
# chown root:root scriptname
而且腳本必須只能是擁有者可寫, 否則不會被執行:
# chmod 755 scriptname
腳本將在連接網絡時按字母表順序運行,並在網絡停止時反向停止。要保證啟動順序,可以在前面加數字,例如 10_portmap
或 30_netfs
這樣就能保證 portmapper 在 NFS 掛載之前啟動。
避免超時
如果一切運行良好, 那么這一節就可以跳過了。 However, there is a general problem related to running dispatcher scripts which take longer to be executed. Initially an internal timeout of three seconds only was used. If the called script did not complete in time, it was killed. Later the timeout was extended to about 20 seconds (see the Bugtracker for more information). If the timeout still creates the problem, a work around may be to modify the dispatcher service file/usr/lib/systemd/system/NetworkManager-dispatcher.service
to remain active after exit:
/etc/systemd/system/NetworkManager-dispatcher.service
.include /usr/lib/systemd/system/NetworkManager-dispatcher.service [Service] RemainAfterExit=yes
運行修改后的 NetworkManager-dispatcher
服務並將其設置為開機啟動。
RemainAfterExit
那一行后會讓 dispatcher 一直運行。不幸的是, dispatcher
必須在再次運行腳本前被關閉。這意味着腳本只能被運行一次。因此, 除非超時確實引起了問題, 否則不要修改服務文件。
啟動 OpenNTPD
安裝 networkmanager-dispatcher-openntpd 軟件包
使用sshfs掛載遠程文件夾
由於該腳本在一個非常受限制的環境中運行, 為了連接上SSH agent, 你必須 export SSH_AUTH_SOCK
。 這里有幾種不同方式, 參照 here 獲取更多詳細信息. 以下示例需要 gnome-keyring , 如果 gnome-keyring 沒解鎖,將需要你輸入密碼. 如果 NetworkManager 設置為登錄后自動連接, 很有可能因為 gnome-keyring 還沒啟動導致失敗(轉入睡眠). 對應的 UUID 可以通過命令nmcli con status
或 nmcli con list
查得。
#!/bin/sh USER='username' REMOTE='user@host:/remote/path' LOCAL='/local/path' interface=$1 status=$2 if [ "$CONNECTION_UUID" = "uuid" ]; then case $status in up) export SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh') su "$USER" -c "sshfs $REMOTE $LOCAL" ;; down) fusermount -u "$LOCAL" ;; esac fi
使用 dispatcher 在網絡連接建立后連接 vpn
此部分示例演示如果自動連接到NetworkManager已定義的vpn-connection.首先創建調度腳本定義vpn連接之后的事務
- 1. 創建調度腳本
/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh VPN_NAME="name of VPN connection defined in NetworkManager" ESSID="Wi-Fi network ESSID (not connection name)" interface=$1 status=$2 case $status in up|vpn-down) if iwgetid | grep -qs ":\"$ESSID\""; then nmcli con up id "$VPN_NAME" fi ;; down) if iwgetid | grep -qs ":\"$ESSID\""; then if nmcli con status id "$VPN_NAME" | grep -qs activated; then nmcli con down id "$VPN_NAME" fi fi ;; esac
如果想在任意 Wi-Fi 網絡都可以自動連接 VPN, 你可以用這樣給 ESSID 賦值: ESSID=$(iwgetid -r)
。記住要給腳本設置相應的權限, 參見 上文[broken link: invalid section]。
如果想任意用戶都能使用 VPN, 即使已經在 nm-applet
中勾選了 Make the VPN connection available to all users 選項, 由於 VPN secrets 保管方式的原因, 連接依然可能會失敗並且 NetworkManager 會報錯 'no valid VPN secrets'。這樣就需要執行步驟2:
-
2. 可以選擇編輯 VPN 連接的配置文件讓 NetworkManager 自己儲存 secrets 而不是把 secrets 保存在
不能被root訪問的 keyring 中: 打開
/etc/NetworkManager/system-connections/name of your VPN connection
, 把password-flags
以及secret-flags
從1
改為0
。
或者直接在 VPN 配置文件中加入 vpn-secrets
並寫入密碼:
[vpn] .... password-flags=0 [vpn-secrets] password=your_password
代理設置
NetworkManager不直接處理代理設置,但是如果你使用GNOME,你可以使用 proxydriver配合NetworkManager。 proxydriverAUR軟件包位於 AUR.
為使proxydriver設置代理,你需要在設置GNOME自動啟動進程( System->Preferences->Startup Applications):
xhost +si:localuser:your_username
參照: Proxy settings
禁用 NetworkManager
由於服務是通過 dbus 自動啟動的, 所以要完全禁用可以用 systemctl 來屏蔽:
systemctl mask NetworkManager systemctl mask NetworkManager-dispatcher
測試
NetworkManager 托盤組件被設計成開機自動啟動,所以對大部分用戶來說,並不需要過多配置。 但是如果你手動停用舊有的網絡設置斷網,你需要測試一下 NetworkManager 是否正常工作。 首先啟動服務:
systemctl start NetworkManager
有些托盤組件會提供給你一個 .desktop 文件以便通過系統菜單運行。 如果沒有,那你就需要通過命令或者注銷重登錄系統來讓托盤組件運行。 一旦托盤組件運行了,它會自動請求網絡連接並通過 DHCP 服務器來進行網絡配置。
在一些 non-xdg-compliant 窗口系統,比如 Awesome 中啟動 GNOME applet:
nm-applet --sm-disable &
如果需要靜態 IP,你需要配置 NetworkManager。一般來說,在托盤圖標上面點擊右鍵, 選擇「編輯連接」即可。
常見問題
常見問題的一些解決辦法。
安全Wi-Fi網絡不提示輸入密碼
當連接到一個安全的WI-Fi網絡時,沒有輸入密碼的提示,而且沒有連接建立。當沒有秘鑰環(keyring)包安裝時,會發生這種情況。一個簡單的解決辦法是安裝gnome-keyring。如果你希望密碼以加密的形式存儲,按照GNOME Keyring來設置gnome-keyring-daemon。
PPTP 通道中無流量
PPTP連接成功登錄,可以看到一個有正確VPN IP的ppp0接口,但是甚至不能ping通遠端IP。這是由於Arch提供的pppd缺少MPPE (Microsoft Point-to-Point Encryption) 支持。 推薦首先嘗試Arch提供的ppp,因為它可能會按照希望的樣子工作。
要解決這個問題,安裝ppp-mppeAUR[broken link: archived in aur-mirror]包應該足夠了。
網絡管理功能失效
有時NetworkManager關閉了,但對應的pid文件卻沒有移除,同時你得到提示 'Network management disabled'. 你可以手工處理:
# rm /var/lib/NetworkManager/NetworkManager.state
定制resolv.conf
參見主頁面resolv.conf。如果你使用dhclient,你可以嘗試networkmanager-dispatch-resolvAUR[broken link: archived in aur-mirror]包。
使用 resolv.conf.head 和 resolv.conf.tail
請閱讀 resolv.conf 並確保 NetworkManager 使用的是 dhcpcd 而不是 dhclient。如果要使用 dhclient,可以試試AUR里面的 networkmanager-dispatch-resolvAUR[broken link: archived in aur-mirror]。
在resolv.conf中保留改動
NetworkManager試圖將DHCP中獲取的DNS信息寫入/etc/resolv.conf
,導致原文件被覆蓋,你可以在文件屬性中設置i參數避免文件被修改
# chattr +i /etc/resolv.conf
如果你要修改此文件,移除i參數:
# chattr -i /etc/resolv.conf
使用dhclient時的DHCP問題
如果你無法通過DHCP獲取IP,嘗試在/etc/dhclient.conf
添加如下配置:
interface "eth0" { send dhcp-client-identifier 01:aa:bb:cc:dd:ee:ff; }
其中aa:bb:cc:dd:ee:ff
是你網卡的MAC地址. MAC地址可以使用iproute2 包中的 ip link show eth0
命令獲得。
主機名問題
主機名是否被轉發到所鏈接的路由器取決與你所使用的NetworkManager插件。通用的“密鑰文件”插件默認不轉發主機名。為了使之轉發主機名,添加下面的內容到/etc/NetworkManager/NetworkManager.conf
:
[keyfile] hostname=your_hostname
[keyfile]
下的選項會應用到默認/etc/NetworkManager/system-connections
路徑的網絡連接。
另一種選擇是配置NetworkManager自動啟動的DHCP客戶端來轉發主機名。NetworkManager默認使用dhclient,並且當前者沒有安裝時使用dhcpcd。使dhclient 轉發主機名需要設置一個非默認選項,dhcpcd默認轉發主機名.
首先,檢查使用的是哪一個DHCP客戶端(以dhclient為例):
# journalctl -b | egrep "dhc"
... Nov 17 21:03:20 zenbook dhclient[2949]: Nov 17 21:03:20 zenbook dhclient[2949]: Bound to *:546 Nov 17 21:03:20 zenbook dhclient[2949]: Listening on Socket/wlan0 Nov 17 21:03:20 zenbook dhclient[2949]: Sending on Socket/wlan0 Nov 17 21:03:20 zenbook dhclient[2949]: XMT: Info-Request on wlan0, interval 1020ms. Nov 17 21:03:20 zenbook dhclient[2949]: RCV: Reply message on wlan0 from fe80::126f:3fff:fe0c:2dc.
配置dhclient把主機名推送到DHCP服務器
復制示例配置文件:
# cp /usr/share/dhclient/dhclient.conf.example /etc/dhclient.conf
看一下這個文件 - 其實我們想保存的只有一行而且dhclient會使用其他選項的默認值 (就像你沒有這個文件時它使用的那樣)。下面是那重要的一行:
/etc/dhclient.conf
send host-name = pick-first-value(gethostname(), "ISC-dhclient");
用你最喜歡的方法強制進行IP地址刷新,然后你應該可以在你的DHCP服務器上看到你的主機名了。
IPv6推送主機名:
# cp /usr/share/dhclient/dhclient.conf.example /etc/dhclient6.conf
/etc/dhclient6.conf
send fqdn.fqdn = pick-first-value(gethostname(), "ISC-dhclient");
配置NetworkManager使用一個特性的DHCP客戶端
如果你想顯示地設置Networkmanager使用的DHCP客戶端,可以在全局配置文件中設置:
/etc/NetworkManager/NetworkManager.conf
dhcp=internal
如果這個選項更沒有設置,按照默認使用的是替代的dhcp=dhclient
。
然后restart NetworkManager.service
。
缺少默認路由 route
在至少一個KDE4系統中,當使用NetworkManager Wireless Setup (簡體中文)鏈接時不會建立缺省路由。 改變無線鏈接的路由配置來移除Use only for resources on this connection"的默認選擇能解決這個問題。
沒有探測到 3G 模塊
如果NetworkManager(從v0.7.999)沒有探測到你的3G模塊,但是你仍然可以使用wvdial連接, 可以嘗試安裝modemmanager,並使用rc.d restart networkmanager
重啟服務,你可能需要重插或重啟你的3G模塊, 這可以讓NetworkManager支持默認數據庫中缺失的硬件模塊
參考USB 3G Modem#Network Manager.
在筆記本上關閉WLAN
有時候在你使用筆記本上的開關禁用WI-Fi然后重新啟用后,NetworkManager無法工作。這常常是rfkill
的問題。請安裝rfkill並使用 $ watch -n1 rfkill list all 檢查驅動rfkill
是否通知到無線適配器的狀態. 如果你開啟適配器后,其標識符仍然顯示blocked,你可以嘗試如下命令手動unblock(X是前一條命令的identifier編號)
# rfkill event unblock X
靜態 IP 設置 變成 DHCP
因為一個尚未結局的bug,當改變默認連接為靜態IP時,nm-applet
可能不能恰當地保存你的IP配置改變,而自動轉變為DHCP模式。
要解決這個問題,你不得不在nm-applet
中改變默認連接名(比如將"Auto eth0"變成“my eth0”),去掉“Available to all users”的勾號,輸入你的配置IP地址,然后點擊“Apply”。這樣就能按照所給的名字保存新的配置
接下來,你可能不希望默認鏈接自動連接網絡。運行 nm-connection-editor
(不要以root身份)。在鏈接編輯窗口,編輯默認配置(eg "Auto eth0") 去掉"Connect automatically"., 點擊Apply,關掉窗口。
普通用戶無法編輯鏈接
參見 #Set_up_PolicyKit_permissions[broken link: invalid section].
刪除隱蔽無線網絡鏈接
因為隱蔽無線網絡不出現在無線列表中,所以不能在GUI中刪除,你可以試用以下命令:
# rm /etc/NetworkManager/system-connections/[SSID]
此命令對任何其他連接有效。
GNOME VPN失效問題
在GNOME系統中用NetworkManager 設立OpenConnect或VPN鏈接,有時會無法跳出對話框,在/var/log/errors.log中會出現如下錯誤提示:
localhost NetworkManager[399]: <error> [1361719690.10506] [nm-vpn-connection.c:1405] get_secrets_cb(): Failed to request VPN secrets #3: (6) No agents were available for this request.
這是由於Gnome NM Applet在/usr/lib/gnome-shell中讀取腳本, 而NetworkManager安裝包將腳本安裝/usr/lib/networkmanager中(這個bug已經存在一段時間了). 臨時解決方法可以文件夾中創建軟連接
- 對於OpenConnect:
ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/
- 對於VPNC (也即 Cisco VPN):
ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/
對其他類型的NM VPN插件可能也需要做類似的事情,不過上述兩種VPN是最常見的。
Unable to connect to visible European wireless networks
WLAN chips are shipped with a default regulatory domain. If your access point does not operate within these limitations, you will not be able to connect to the network. Fixing this is easy:
- Install crda
- Uncomment the correct Country Code in
/etc/conf.d/wireless-regdom
- Reboot the system, because the setting is only read on boot
引導時自動連接到VPN不工作
問題原因在於,當系統(也即以root用戶運行的NetworkManager)嘗試建立一個VPN連接時無法獲取密碼,因為密碼存儲在一個特性用戶的Gnome kerying中。
解決的一個辦法是用明文存儲VPN密碼,如#Use dispatcher to connect to a VPN after a network connection is established[broken link: invalid section]步驟(2.)中所描述。
如果你使用nm-applet
GUI中的新的"auto-connect VPN"選項,你不再需要使用步驟(1.)所描述的分配器來自動連接。
dhcpd不斷地拒絕租約
有人報告dhcpd不斷地拒絕租約,同時大量產生如下日志消息:
dhcpcd[25188]: wlan0: NAK: from 10.1.0.1 dhcpcd[25188]: wlan0: soliciting a DHCP lease dhcpcd[25188]: wlan0: offered 10.2.0.159 from 10.2.0.1 dhcpcd[25188]: wlan0: ignoring offer of 10.1.0.197 from 10.1.0.1 dhcpcd[25188]: wlan0: NAK: from 10.1.0.1 dhcpcd[25188]: wlan0: soliciting a DHCP lease dhcpcd[25188]: wlan0: offered 10.2.0.159 from 10.2.0.1 dhcpcd[25188]: wlan0: ignoring offer of 10.1.0.197 from 10.1.0.1
解決這個問題似乎可以通過切換到 dhclient而不是dhcpcd(對於 NetworkManager, 在/etc/NetworkManager/NetworkManager.conf
中設置dhcp
選項為 dhclient
).
Systemd瓶頸
經過一段時間,日志文件(/var/log/journal
)可能會變得非常龐大。當使用NetworkManager時,這可能對引導新更能產生大的影響,參考:Systemd#Boot time increasing over time。
網絡(WiFi)經常有規律地斷開
有些WIFI驅動如果在連接/關聯的同時掃描基站會有問題。症狀包括VPN斷開/重連和丟包,頁面無法加載但之后刷新沒有問題。
運行journalctl -f
可以表明這種情況是否正在發生,和下面相似的信息會在日志文件中以有規律的間隔出現:
NetworkManager[410]: <info> (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))
有一個補丁版的NetworkManager應該可以阻止這種掃描:networkmanager-noscanAUR。
提示與技巧
加密的Wi-Fi密碼
NetworkManager默認在連接文件/etc/NetworkManager/system-connections/
中以明文存儲密碼。要打印存儲的密碼,使用下列命令:
# grep -H '^psk=' /etc/NetworkManager/system-connections/*
密碼可以被文件系統上的root用戶以及可以通過GUI(例如nm-applet
)訪問設置的普通用戶訪問。
以加密形式而不是明文存儲密碼更好,可以通過在秘鑰環中存儲它們來實現,NetworkManager之后會向秘鑰環詢問密碼。建議使用的秘鑰環守護進程是GNOME Keyring或者(僅適用於KDE)KDE Wallet。 要想讓之后的東西工作,秘鑰環守護進程需要啟動,並且秘鑰環需要解鎖。
更進一步,NetworkManager需要配置為不為所有的用戶存儲密碼。使用GNOMEnm-applet
,運行nm-connection-editor
來獲取一個終端,選擇網絡連接,點擊Edit
,選擇 Wifi-Security
選項卡單后點擊密碼右側的圖標,勾選Store the password for this user
。使用KDE的kdeplasma-applets-plasma-nm[broken link: archived in aur-mirror],點擊小程序,點擊右上方Settings
圖標,雙擊一個網絡連接,在 General settings
選項卡中,去掉all users may connect to this network
。如果這個選項被勾選了,及時秘鑰環守護進程在運行,密碼也將會以明文存儲。
如果這個選項之前被選擇了,然后你去掉了它,你可能需要先使用reset
選項來使密碼從文件中消失。或者,先刪掉連接,然后重新建立。
秘鑰環的缺點是連接要為每一個用戶設置。
通過Wi-Fi共享網絡連接
使用nm,你只要點擊幾下就可以共享你的internet連接(例如,3G或者有線)。你需要一個支持的Wi-Fi卡(基於Atheros AR9xx或者至少AR5xx的網卡可能是最好的選擇)。
Ad-hoc
- 安裝dnsmasq包來能夠實際共享連接。
- 配置
dnsmasq.conf
可能會干擾NetworkManager (對此不確定,不過我覺得是這樣)。 - 點擊小程序,選擇"Create new wireless network"。
- 按照指南 (如果使用WEP, 確保使用5到13字符長度的密碼,其他的長度可能會失敗)。
- 下次你需要的時候,設置依然在存儲着。
Real AP
2012年底,NetworkManager添加了對infrastructure mode(安卓手機需要這個模式,因為他們故意不支持ad-hoc模式)的支持。
參見 Fedora's wiki.
通過Ethernet共享連接
場景: 你的設備有通過wi-fi的internet連接,你想通過ethernet和其他設備共享internet連接。
要求:
- 安裝dnsmasq以能夠真正地共享連接。
- 你的連有internet的設備和其他的設備通過合適的ethernet線纜連接(通常這意味着一個交叉線(cross over cable)或者之間有一個交換機(switch))
步驟:
- 從終端運行
nm-connection-editor
- 添加一個新的ethernet連接
- 給它起一個合適的名字。比如"共享連接"
- 轉到"IPv4 設置"(IPv4 settings)
- 對於"方法:"(method) 選擇 "與其他電腦共享"(Shared to other computers)
- 保存
現在,你在NetworkManager的有線連接下應該有了一個新"共享連接"的選項。
在cron任務(jobs)或腳本中檢查網絡是否連接
有些cron任務需要可用的網絡連接才能成功。你可能希望在網絡不可用時避免運行這些任務。為此,添加一個網絡的if 測試,該測試詢問NetworkManager的nm-tool 並檢查網狀態。下面展示的測試當任何接口可用時成功,當所有借口都不可用時失敗。對於可能連接有線,無線或者關閉網絡的筆記本來說這很方便。
if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then #Whatever you want to do if the network is online else #Whatever you want to do if the network is offline - note, this and the else above are optional fi
例如,這對於一個運行fpupdate來更新F-Prot病毒掃描簽名的cron.hourly
腳本很有幫助。另外,經過小的修改,使用nm-tool輸出的不同部分可以區分不同的網絡;例如,因為活躍的無線網絡連接有一個星號(asterisk'*')表示,你可以grep網絡名,然后grep星號。
登陸后自動解鎖秘鑰環
GNOME
- 右擊面板中的
nm-applet
圖標,並選擇編輯連接(Edit Connections),打開無線(wireless)選項卡 - 選擇你想要使用的連接並單擊編輯
- 勾選"自動連接"(“Connect Automatically”)框和"對所有用戶可用"(“Available to all users”)框
登出並重新登錄,完成。
- 在
/etc/pam.d/gdm
(或者/etc/pam.d
里你相應的守護進程中),如果"auth"和"session"塊不存在,在后面添加如下內容:
auth optional pam_gnome_keyring.so session optional pam_gnome_keyring.so auto_start
- 在
/etc/pam.d/passwd
中, 使用這一行替代'password'塊:
password optional pam_gnome_keyring.so
- 下次登錄時,你會被詢問你是否希望密碼在登錄時自動解鎖。
SLiM 登錄管理器
參見 SLiM#SLiM and Gnome Keyring[broken link: invalid section].
有密碼認證的KDE and OpenConnect VPN
kdeplasma-applets-plasma-nm[broken link: archived in aur-mirror]現在支持配置OpenConnect VPN連接的用戶名和密碼。打開你的VPN連接,接受證書,連接域會出現。如果沒有,看下面的指令,現在輸入正確的用戶名和密碼。
==== 問題解決 ====‘
雖然你可能在連接時輸入兩個值,kdeplasma-applets-plasma-nm[broken link: archived in aur-mirror] 0.9.3.2-1及以上版本能夠直接從KWallet中獲取OpenConnect用戶名和密碼。
打開"KDE Wallet Manager"在"Network Management|Maps"下面查找你的OpenConnect VPN連接。點擊"Show values"並在這個表的鍵值"VpnSecrets"下輸入你的憑據(相應替代'username'和'password'):
form:main:username%SEP%username%SEP%form:main:password%SEP%password
下次你連接時,用戶名和密碼會出現在"VPN secrets"對話框中。
忽略特定設備
有時,可能希望Networkmanager忽略特定的設備,並且不為他們配置地址和路由。通過在/etc/NetworkManager/NetworkManager.conf
中使用下述配置,你可以快速輕松地按照MAC或者接口名忽略設備。
[keyfile] unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0
填入上述內容后,重啟NetworkManager,然后你應該能夠在NetworkManager不改變你已經完成的設置的情況下配置接口。
啟用DNS緩存
使用dnsmasq來啟用允許DNS緩存的插件參見 dnsmasq#NetworkManager
啟用IPv6隱私擴展
其它資源
- Wireless network configuration -- 無線配置(wiki)
- NetworkManager - 網絡管理器的官方主頁
- NetworkManager for Administrators Part 1