NetworkManager (简体中文)网络管理器(NetworManager)是检测网络、自动连接网络的程序。无论是无线还是有线连接,它都可以令您轻松管理。对于无线网络,网络管理器优先连接已知的网络并可以自动切换到最可靠的无线网络。利用网络管理器的程序可以自由切换在线和离线模式。网络管理器会相对无线网络优先选择有线网络,支持 VPN。网络管理器最初由 Redhat 公司开发,现在由 GNOME 管理。 Contents[hide]
安装网络管理其可以通过networkmanager包安装。这个包不包括托盘插件nm-applet,此插件是network-manager-applet包的一部分。从1.0版本开始,网络管理内部获得了对基本DHCP功能的支持。对于全功能的DHCP或者如果你需要IPV6支持,dhclient 集成了这些功能。 # pacman -Syu networkmanager VPN 支持NetworkManager 的 VPN 支持基于一个插件系统。如果需要通过 NetworkManager 来使用 VPN, 请安装以下任一软件包: 通过 AUR: PPPoE / DSL 支持安装 rp-pppoe 来获得 PPPoE / DSL 连接支持。 前端为了配置和轻松使用网络管理器,大多数用户会希望安装一个托盘组件。图形前端往往显示在系统托盘(或通知区域),从而允许用户选择网络或者配置 NetworkManager。不同类型的桌面环境下有多种托盘插件。 Gnome环境Gnome的network-manager-applet几乎可以运行在所有的桌面环境下。 如果你想储存验证信息(Wireless/DSL), 安装和配置GNOME Keyring 注意,对一个连接激活了 KDE PlasmaKDE 4Plasma-nm 前端可以通过官方软件仓库中的 kdeplasma-applets-plasma-nm[broken link: archived in aur-mirror] 安装。老的 KNetworkManager 前端已经移到了AUR 软件包 kdeplasma-applets-networkmanagementAUR 。 如果同时安装了 KNetworkManager 和 nm-applet,在使用 KDE 时不想使用 nm-applet,将下行加入 NotShowIn=KDE 详情参阅 Userbase 页面。 XFCE虽然network-manager-applet在Xfce下正常工作,但是为了可以看到通知信息,包括错误信息, 如果没有这个通知守护进程, (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
如果 如果托盘插件没有显示,安装xfce4-indicator-pluginAUR包。[3] Openbox为了能在Openbox中优雅地工作,Gnome小程序,因为和XFCE同样的原因,需要xfce4-notifyd通知进程和gnome-icon-theme来在系统托盘中显示小程序。 GNOME applet 和 xfce4-notifyd 结合可以很好的工作: 如果你想储存身份验证信息(Wireless/DSL),请安装和配置gnome-keyring:
其它桌面和窗口管理器所有其他场景下,推荐使用 GNOME 组件。你也需要确保需要gnome-icon-theme被正确安装并可以显示小程序。安装 GNOME hicolor 主题: 要存储连接密码,请安装和配置GNOME Keyring。 想要不使用系统托盘来运行 nmgui #!/bin/sh nm-applet 2>&1 > /dev/null & stalonetray 2>&1 > /dev/null killall nm-applet 当你关闭 stalonetray 窗口时,也将会同时关闭 命令行下列应用程序可能对于没有X时配置和管理网络有帮助。 nmcli命令行前端nmcli包括在networkmanager中。 对于使用信息,参考
nmtui"nmtui" 是一个基于curses的图形化前端,包括在networkmanager中。 使用信息参见 networkmanager-dmenu-gitAUR 是一个通过 dmenu 而不是 配置NetworkManager 需要做这么几步保证正常运行。确保你 启用 NetworkManagerNetworkManager通过 开机启用 NetworkManager: # systemctl enable NetworkManager 立即启动 NetworkManager: # systemctl start NetworkManager NetworkManager在 设置 PolicyKit 权限参照General troubleshooting#Session permissions建立一个工作会话. 在工作会话中,你有三种方式授予NetworkManager工作所必须的权限. 方式 1. 登录后运行PolicyKit认证代理,比如 方式 2. 将你的账户加入 方式 3. 将你的账户加入 /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; } }); 所有在 使用 NetworkManager 调度网络服务有些服务只有联网时才有意义,例如 OpenNTPD 和 网络文件系统挂载(netfs)。dispatcher 可以在连接网络后启动这些服务,并在网络关闭时停止它们。要使用这一功能, 需要启动 # chown root:root scriptname 而且脚本必须只能是拥有者可写, 否则不会被执行: # chmod 755 scriptname 脚本将在连接网络时按字母表顺序运行,并在网络停止时反向停止。要保证启动顺序,可以在前面加数字,例如 避免超时如果一切运行良好, 那么这一节就可以跳过了。 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 theBugtracker for more information). If the timeout still creates the problem, a work around may be to modify the dispatcher service file /etc/systemd/system/NetworkManager-dispatcher.service .include /usr/lib/systemd/system/NetworkManager-dispatcher.service [Service] RemainAfterExit=yes 运行修改后的 启动 OpenNTPD安装 networkmanager-dispatcher-openntpd 软件包 使用sshfs挂载远程文件夹由于该脚本在一个非常受限制的环境中运行, 为了连接上SSH agent, 你必须 export #!/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连接之后的事务
/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 赋值: 如果想任意用户都能使用 VPN, 即使已经在
或者直接在 VPN 配置文件中加入 [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信息写入 # chattr +i /etc/resolv.conf 如果你要修改此文件,移除i参数: # chattr -i /etc/resolv.conf 使用dhclient时的DHCP问题如果你无法通过DHCP获取IP,尝试在 interface "eth0" { send dhcp-client-identifier 01:aa:bb:cc:dd:ee:ff; } 其中 主机名问题主机名是否被转发到所链接的路由器取决与你所使用的NetworkManager插件。通用的“密钥文件”插件默认不转发主机名。为了使之转发主机名,添加下面的内容到 [keyfile] hostname=your_hostname
另一种选择是配置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
/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 如果这个选项更没有设置,按照默认使用的是替代的 然后restart 缺少默认路由 route在至少一个KDE4系统中,当使用NetworkManager Wireless Setup (简体中文)链接时不会建立缺省路由。 改变无线链接的路由配置来移除Use only for resources on this connection"的默认选择能解决这个问题。 没有探测到 3G 模块如果NetworkManager(从v0.7.999)没有探测到你的3G模块,但是你仍然可以使用wvdial连接, 可以尝试安装modemmanager,并使用 参考USB 3G Modem#Network Manager. 在笔记本上关闭WLAN有时候在你使用笔记本上的开关禁用WI-Fi然后重新启用后,NetworkManager无法工作。这常常是 # rfkill event unblock X 静态 IP 设置 变成 DHCP因为一个尚未结局的bug,当改变默认连接为静态IP时, 要解决这个问题,你不得不在 接下来,你可能不希望默认链接自动连接网络。运行 普通用户无法编辑链接参见 #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已经存在一段时间了). 临时解决方法可以文件夹中创建软连接
对其他类型的NM VPN插件可能也需要做类似的事情,不过上述两种VPN是最常见的。 Unable to connect to visible European wireless networksWLAN 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:
引导时自动连接到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.)中所描述。 如果你使用 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, 在 Systemd瓶颈经过一段时间,日志文件( 网络(WiFi)经常有规律地断开有些WIFI驱动如果在连接/关联的同时扫描基站会有问题。症状包括VPN断开/重连和丢包,页面无法加载但之后刷新没有问题。 运行 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在连接文件 # grep -H '^psk=' /etc/NetworkManager/system-connections/* 密码可以被文件系统上的root用户以及可以通过GUI(例如 以加密形式而不是明文存储密码更好,可以通过在秘钥环中存储它们来实现,NetworkManager之后会向秘钥环询问密码。建议使用的秘钥环守护进程是GNOME Keyring或者(仅适用于KDE)KDE Wallet。 要想让之后的东西工作,秘钥环守护进程需要启动,并且秘钥环需要解锁。 更进一步,NetworkManager需要配置为不为所有的用户存储密码。使用GNOME 如果这个选项之前被选择了,然后你去掉了它,你可能需要先使用 秘钥环的缺点是连接要为每一个用户设置。 通过Wi-Fi共享网络连接使用nm,你只要点击几下就可以共享你的internet连接(例如,3G或者有线)。你需要一个支持的Wi-Fi卡(基于Atheros AR9xx或者至少AR5xx的网卡可能是最好的选择)。 Ad-hoc
Real AP2012年底,NetworkManager添加了对infrastructure mode(安卓手机需要这个模式,因为他们故意不支持ad-hoc模式)的支持。 参见 Fedora's wiki. 通过Ethernet共享连接场景: 你的设备有通过wi-fi的internet连接,你想通过ethernet和其他设备共享internet连接。 要求:
步骤:
现在,你在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病毒扫描签名的 登陆后自动解锁秘钥环GNOME
登出并重新登录,完成。
auth optional pam_gnome_keyring.so session optional pam_gnome_keyring.so auto_start
password optional pam_gnome_keyring.so
SLiM 登录管理器参见 SLiM#SLiM and Gnome Keyring[broken link: invalid section]. 有密码认证的KDE and OpenConnect VPNkdeplasma-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忽略特定的设备,并且不为他们配置地址和路由。通过在 [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隐私扩展其它资源
|
|