NetworkManager
网络管理器(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