netctl (简体中文)
Netctl 是基于命令行的网络管理器,支持场景配置。它是 Arch Linux 网络管理方面的原生项目。
Contents
安装
从官方软件仓库安装netctl 软件包。 下表列出了 netctl 的可选依赖包
Feature | Dependency | netctl program (if relevant) |
---|---|---|
Automatic wireless connections | wpa_actiond | netctl-auto
|
Automatic wired connections | ifplugd | netctl-ifplugd
|
WPA | wpa_supplicant | |
DHCP | dhcpcd or dhclient | |
Wifi menus | dialog | |
PPPoE | ppp |
使用
建议用户使用前阅读如下文档:
配置
netctl
使用配置文件来管理网络连接,并按需自动或手动启动不同的操作模式
编辑配置
netctl的配置文件保存在 /etc/netctl/
。一些配置文件的示例位于 /etc/netctl/examples/
。通用的配置项包括:
- ethernet-dhcp
- ethernet-static
- wireless-wpa
- wireless-wpa-static
若要使用上述示例配置文件,只需将其从 /etc/netctl/examples/
复制到 /etc/netctl/
。参见下述 配置示例。编辑配置文件所需的首要参数是网络端口(interface),详阅 网络配置 设备名称。
在创建好你自己的配置文件之后,可以尝试运行(仅需写出文件名,不包含完整路径):
# netctl start profile
如果上述命令出错,可使用 journalctl -xn
和 netctl status profile
来获得对错误的详细描述。
自动化操作
如果使用单一配置文件(对每个网络接口)或想人工切换配置文件,请看 基本方法 。使用这种配置方法的多为服务器、工作站和路由器等。
如果需要经常在多个配置文件间切换,请看 自动切换配置。常用于笔记本电脑。
基本方法
使用此种方式,可以为每个网络接口固定地启用一个配置文件。首先需手动检查该配置文件可以正常使用,那么可以用下面的命令启用它:
# netctl enable profile
这将创建并启用一个随计算机启动而自动运行的 systemd 服务。对配置文件本身的修改无法自动关联到前述创建的服务文件,修改之后,需用下述命令重新启用该配置。
# netctl reenable profile
自动切换配置
netctl
提供了两个特殊的 systemd 服务来自动切换配置:
- 有线网络:
netctl-ifplugd@interface.service
。使用它,将在你插入和拔出电缆时自动切换配置文件。 - 无线网络:
netctl-auto@interface.service
。使用它,将在你从一个无线网络的覆盖范围进入另一个无线网络的范围时自动切换配置文件。
首先 安装 下列软件包:
- wpa_actiond 用来支持使用
netctl-auto@interface.service
命令。 - ifplugd 用来支持使用
netctl-ifplugd@interface.service
命令。
然后将 netctl-auto@interface.service
或 netctl-ifplugd@interface.service
需要启动的所有配置文件编辑好。
如果希望某些无线网络配置不要被 netctl-auto@interface.service
自动启用,需要专门在该配置文件中加入 ExcludeAuto=yes
。存在多个可用配置时,可以通过设置 Priority=
来为某些文件设置优先级。 netctl-ifplugd@interface.service
优先启用使用了 DHCP 的配置文件,如要优先启用一个使用固定IP的配置,可以设置 AutoWired=yes
。详细内容参见 netctl.profile(5)
。
在设置好你的配置文件并且确认它们可以正常工作后,使用systemctl启动这些服务:
# systemctl enable netctl-auto@interface.service # systemctl enable netctl-ifplugd@interface.service
从netctl 1.3开始,允许在不停止netctl-auto服务的情况下手工控制一个不受netctl-auto管理的网络接口。这可以通过netctl-auto命令完成。若要获得可用行为的列表,运行:
# netctl-auto --help
配置文件示例
有线连接
无线连接(WPA-PSK)
密码加密(256-bit PSK)
那些不想让自己的无线网络密钥以“明文”的形式保存的用户可以选择使用256位预先共享密钥(PSK)来代替,它由密钥和SSID经由标准算法计算而成。
- 方法 1: 使用
wifi-menu -o
在目录/etc/netctl/
中生成一个配置文件。 - 方法 2: 按照如下方法手工配置。
无论采用何种方法,建议运行 chmod 600 /etc/netctl/<config_file>
来禁止其他用户访问密码。
用wpa_passphrase中的方法生成你的256位PSK:
$ wpa_passphrase your_essid passphrase
network={ ssid="your_essid" #psk="passphrase" psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a }
在另一个终端窗口中,将示例文件 wireless-wpa
从 /etc/netctl/examples
复制到 /etc/netctl
:
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa
你需要用常用的文本编辑器编辑 /etc/netctl/wireless-wpa
,将你刚才生成的PSK码添加到 Key
变量。
完成后,你的配置文件 wireless-wpa
应当像下面这样:
/etc/netctl/wireless-wpa
Description='A simple WPA encrypted wireless connection using 256-bit PSK' Interface=wlp2s2 Connection=wireless Security=wpa IP=dhcp ESSID=your_essid Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
提示与技巧
Eduroam
有些大学使用一个叫做"Eduroam"的系统管理其无线网络。(鉴于未发现此节对与中文用户的作用,不做翻译)For this system, a WPA config-section profile with the following format is often useful:
/etc/netctl/wlan0-eduroam
Description='Eduroam-profile for <user>' Interface=wlan0 Connection=wireless Security=wpa-configsection IP=dhcp WPAConfigSection=( 'ssid="eduroam"' 'proto=RSN' 'key_mgmt=WPA-EAP' 'pairwise=CCMP' 'auth_alg=OPEN' 'eap=PEAP' 'identity="<user>"' 'password="<password>"' )
For TTLS and certified universities this setup works:
/etc/netctl/wlan0-eduroam
Description='Eduroam university' Interface=wlan0 Connection=wireless Security=wpa-configsection IP=dhcp ESSID=eduroam WPAConfigSection=( 'ssid="eduroam"' 'key_mgmt=WPA-EAP' 'eap=TTLS' 'group=TKIP' 'anonymous_identity="anonymous@domain_university"' 'identity="XXX@domain_university"' 'password="XXX"' 'ca_cert="Path/to/the/certificate"' 'phase2="auth=PAP"' )
Bonding
- The Linux bonding driver provides a method for aggregating multiple network interfaces into a single logical "bonded" interface. The behavior of the bonded interfaces depends on the mode. Generally speaking, modes provide either hot standby or load balancing services. Additionally, link integrity monitoring may be performed.
(Linux bonding驱动提供了一个途径来把多个网络接口“绑定”成一个逻辑上的接口。绑定后的接口的行为取决于绑定的模式,一般来说,提供“随时收发”和“均衡负载”两种模式。另外,可以提供对连接的总体情况的监测功能。)
均衡负载
要用netctl配合bonding, 需要从官方软件源安装 ifenslave。
复制 /etc/netctl/examples/bonding
到 /etc/netctl/bonding
然后进行编辑。例如:
/etc/netctl/bonding
Description='Bond Interface' Interface='bond0' Connection=bond BindsToInterfaces=('eth0' 'eth1') IP=dhcp IP6=stateless
现在你可以停用之前的配置文件。然后设置bonding为自动启动,切换到新的配置。例如:
# netctl switch-to bonding
有线 -> 无线故障切换
这一部分探讨怎样用bonding来实现当有线以太网无法工作时自动切换至无线网络。我们假设所有的网络接口默认启动dhcdpcd服务。
你需要从官方源安装软件包: ifplugd, ifenslave 和 wpa_supplicant.
首先设置 bonding
驱动使用 active-backup
:
/etc/modprobe.d/bonding.conf
options bonding mode=active-backup options bonding miimon=100 options bonding primary=eth0 options bonding max_bonds=0
max_bonds
选项避免了 Interface bond0 already exists
错误。如果使用了MAC过滤,应当添加设置 fail_over_mac=active
。
接下来,编写一个netctl配置文件来绑定两个网络接口:
/etc/netctl/failover
Description='A wired connection with failover to wireless' Interface='bond0' Connection=bond BindsToInterfaces=('eth0' 'wlan0') IP='dhcp' SkipNoCarrier='no'
设置该配置文件自启动:
# netctl enable failover
将 wpa_supplicant 配置为关联一个已知网络,可以通过 netctl profile (记得设置 IP='no'), 和一个长期运行的 wpa_supplicant 服务或者 wpa_cli 命令实现。具体方法请访问 wpa_supplicant 页面。想要长期运行 wpa_supplicant 服务,创建一个wpa_supplicant配置文件/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
然后运行:
# systemctl enable wpa_supplicant@wlan0
在有线网络配置中设置IP='no'
。IP地址应当只被分配到bond0接口。
如果你有一个有线连接和无线连接连接到同一个网络,现在可以将有线网络断开连接,然后重新连接而依然保持网络通畅。在大多数情况下,甚至连流媒体音乐都不会卡顿。
移除过时的dhcpcd租期
# rm /var/lib/dhcpcd/dhcpcd-wlan0.lease
DHCP超时问题
如果在通过DHCP申请租期时有超时问题,你可以设置超时的时限大于netctl默认的30秒。Create a file in 在/etc/netctl/hooks/
或者/etc/netctl/interfaces/
中创建一个文件,在其中加入 TimeoutDHCP=40
可以使时限设置为40秒。然后为这个文件加上可执行权限。
参见
- 官方陈述页面
- 在AUR中有一个可用的cinnamon applet: cinnamon-applet-netctl-systray-menuAUR