Difference between revisions of "Netctl (简体中文)"

From ArchWiki
Jump to: navigation, search
(Recommended reading)
(update link(s) (avoid redirect))
(24 intermediate revisions by 9 users not shown)
Line 1: Line 1:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:Networking]]
+
[[Category:Networking (简体中文)]]
 +
[[en:Netctl]]
 
[[fr:Netctl]]
 
[[fr:Netctl]]
[[zh-CN:Netctl]]
+
[[es:Netctl]]
{{Article summary start}}
+
[[ja:Netctl]]
{{Article summary text|用netctl和网络配置脚本设置网络的指南。}}
+
{{Related articles start (简体中文)}}
{{Article summary end}}
+
{{Related|Network configuration}}
Netctl 是 Arch Linux 中基于命令行的网络管理器,它是 Arch 的新项目,会替换掉 [[netcfg]]
+
{{Related|Wireless network configuration}}
 +
{{Related|NetworkManager}}
 +
{{Related|Wicd}}
 +
{{Related|Bridge with netctl}}
 +
{{Related articles end}}
 +
{{TranslationStatus (简体中文)|Netctl|2013-11-14|281047}}
 +
Netctl 是基于命令行的网络管理器,支持场景配置。它是 Arch 的项目,取代了原来的 [[netcfg]]
  
 
==安装==
 
==安装==
{{Pkg|netctl}} 软件包已经进入[[Official Repositories#[core]|[core]]]. 安装 netctl 会替换掉无人维护的{{pkg|netcfg}}
+
{{Pkg|netctl}} 软件包已经进入[[Official Repositories (简体中文)|官方软件仓库]].  
 +
 
 +
{{Pkg|netctl}} 和 {{AUR|netcfg}}相互冲突,安装 netctl 会替换掉{{AUR|netcfg}}。如果配置不正确,可能导致连接中断。
 +
 
 +
{{Note|请使用{{ic|1=systemctl --type=service}}确保其它可以配置网络的服务都没有运行,同时使用多个网络配置工具会导致冲突。}}
  
 
==建议阅读==
 
==建议阅读==
开发者为了完善 man 文档投入了大量的精力,建议用户使用前阅读如下文档:
 
*netctl
 
*netctl.profile
 
*netctl.special
 
  
==Configuration==
+
建议用户使用前阅读如下文档:
 +
*[https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.1.txt netctl]
 +
*[https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile]
 +
*[https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.special.7.txt netctl.special]
  
{{ic|netctl}} may be used to introspect and control the state of the systemd services for the network profile manager. Example configuration files are provided for the user to assist them in configuring their network connection. These example profiles are located in {{ic|/etc/netctl/examples/}}. The common configurations include:
+
==配置==
*ethernet-dhcp
+
*ethernet-static
+
*wireless-wpa
+
*wireless-wpa-static
+
  
To use an example profile, simply copy one of them from {{ic|/etc/netctl/examples/<profile>}} to {{ic|/etc/netctl/<profile>}} and configure it to your needs:
+
{{ic|netctl}} 使用配置文件来管理网络连接,这些配置文件保存在 {{ic|/etc/netctl/}} 。软件提供了一些配置文件的示例以供参考。这些示例位于 {{ic|/etc/netctl/examples/}}。配置文件通常包括:
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/my-wireless-wpa
+
* ethernet-dhcp
 +
* ethernet-static
 +
* wireless-wpa
 +
* wireless-wpa-static
  
Once you have created your profile, make an attempt to establish a connection using the newly created profile by running:
+
若要使用上述示例配置文件,只需将其从 {{ic|/etc/netctl/examples/}} 复制到 {{ic|/etc/netctl/}} 然后按照自己的需求进一步配置即可,如:
# netctl start <profile>
+
  
If issuing the above command results in a failure, then use {{ic|journalctl -xn}} and {{ic|netctl status <profile>}} in order to obtain a more in depth explanation of the failure. Make the needed corrections to the failed configuration and retest.
+
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/''profile''
  
Once the profile is started successfully then it can be {{ic|enabled}} using {{ic|netctl enable <profile>}}. This will create the proper symlink for the profile to be used by {{ic|netctl-auto@.service}}.
+
{{Tip|如要配置无线网络,可以使用 {{ic|wifi-menu -o}} 来自动在 {{ic|/etc/netctl/}} 中生成配置文件。}}
 +
{{Warning|使用 {{ic|wifi-menu -o}} 而在 {{ic|/etc/netctl/}} 中生成的文件名中带有 '-' 。这将在自动设置中带来问题,建议重新为配置文件命名。}}
  
{{Note|The systemd service {{ic|netctl-auto@<interface>.service}} will need to be enabled in order to allow automatic wireless connection at boot to become functional.}}
+
在创建好你自己的配置文件之后,可以尝试运行:
  
{{Note|If there is ever a need to alter a currently enabled profile. execute {{ic|netctl reenable <profile>}} to apply the changes.}}
+
# netctl start ''profile''
  
===Migrating from netcfg===
+
来使用新的配置文件创建一个连接。
  
{{ic|netctl}} uses {{ic|/etc/netctl}} to store its profiles, ''not'' {{ic|/etc/network.d}} ({{ic|netcfg}}'s profile storage location).
+
{{Note|其中profile是文件名,不包含完整路径,使用完整的路径将使 {{ic|netctl}} 异常退出。}}
  
In order to migrate from netcfg, at least the following is needed:
+
如果上述命令出错,可使用 {{ic|journalctl -xn}} {{ic|netctl status ''profile''}} 来获得对错误的详细描述,对配置文件做必要的更正后重试。
*Move network profile files to the new directory.
+
*Rename variables therein according to netctl.profile(5) (most have only become CamelCase i.e CONNECTION= becomes Connection=).
+
*Unquote interface variables and other variables that don't strictly need quoting (this is mainly a style thing).
+
*Run {{ic|netctl enable <profile>}} for every profile in the old NETWORKS array. 'last' doesn't work this way, see netctl.special(7).
+
*Use {{ic|netctl list}} / {{ic|netctl start <profile>}} instead of netcfg-menu. wifi-menu remains available.
+
  
===Password encryption (256-bit PSK)===
+
=== 自动化操作 ===
  
Users ''not'' wishing to have their passwords stored in ''plain text'' have the option of generating a 256-bit Encrypted PSK.
+
如果使用单一配置文件(对每个网络接口)或想人工切换配置文件,请看 [[#基本方法|基本方法]] 。使用这种配置方法的多为服务器、工作站和路由器等。
  
If you have not done so already, install {{pkg|wpa_actiond}} from the [[Official Repositories#&#91;core&#93;|&#91;core&#93;]] repository using [[pacman]]
+
如果需要方便的在多个配置文件间切换,请看 [[#自动切换配置|自动切换配置]]。笔记本多用此种方式。
  # pacman -S wpa_actiond
+
  
Next, generate your 256-bit Encrypted PSK using [[WPA_supplicant#Configuration_file|wpa_passphrase]]:
+
==== 基本方法 ====
{{hc|Usage: wpa_passphrase [ssid] [passphrase]|
+
 
2=$ wpa_passphrase archlinux freenode|
+
使用此种方式,可以为每个网络接口固定地启用一个配置文件。首先需手动检查该配置文件可以正常使用,那么可以用下面的命令启用它:
 +
 
 +
# netctl enable ''profile''
 +
 
 +
这将创建并启用一个随计算机启动而自动运行的 [[systemd (简体中文)|systemd]] 服务。对配置文件本身的修改无法自动关联到前述创建的服务文件,修改之后,需用下述命令重新启用该配置。
 +
 
 +
# netctl reenable ''profile''
 +
 
 +
{{Note|只有在计算机启动时(或服务启动时),配置文件可以被成功地启用,连接才可以建立。特别地,对于有线连接,需插好电缆;对于无线连接,需处于信号覆盖范围内。}}
 +
 
 +
{{Tip|若要无视线缆是否插好,强制对有线网络接口启用一个固定IP的配置,可以在配置文件中加入 {{ic|1=SkipNoCarrier=yes}} 。}}
 +
 
 +
==== 自动切换配置 ====
 +
 
 +
{{ic|netctl}} 提供了两个特殊的 [[systemd (简体中文)|systemd]] 服务来自动切换配置:
 +
 
 +
* 有线网络: {{ic|netctl-ifplugd@''interface''.service}}。使用它,将在你插入和拔出电缆时自动切换配置文件。
 +
* 无线网络: {{ic|netctl-auto@''interface''.service}}。使用它,将在你从一个无线网络的覆盖范围进入另一个无线网络的范围时自动切换配置文件。
 +
 
 +
{{Note|'''netcfg''' 使用 {{ic|net-auto-wireless.service}} 和 {{ic|net-auto-wired.service}} 来实现相同的目的。}}
 +
 
 +
首先 [[pacman (简体中文)|安装]] 下列软件包:
 +
* {{Pkg|wpa_actiond}} 用来支持使用 {{ic|netctl-auto@''interface''.service}} 命令。
 +
* {{Pkg|ifplugd}} 用来支持使用 {{ic|netctl-ifplugd@''interface''.service}} 命令。
 +
 
 +
然后将 {{ic|netctl-auto@''interface''.service}} 或 {{ic|netctl-ifplugd@''interface''.service}} 需要启动的所有配置文件编辑好。
 +
 
 +
如果希望某些无线网络配置'''不要'''被 {{ic|netctl-auto@''interface''.service}}自动启用,需要专门在该配置文件中加入 {{ic|1=ExcludeAuto=yes}} 。存在多个可用配置时,可以通过设置 {{ic|1=Priority=}} 来为某些文件设置优先级。 {{ic|netctl-ifplugd@''interface''.service}} 优先启用使用了 [[Wikipedia:DHCP|DHCP]] 的配置文件,如要优先启用一个使用固定IP的配置,可以设置 {{ic|1=AutoWired=yes}} 。详细内容参见 {{ic|netctl.profile(5)}} 。
 +
 
 +
{{Warning|不能通过选项{{ic|1=Security=wpa-config}}来让netctl-auto自动选择一个启用了WPA的配置文件。请使用 {{ic|1=Security=wpa-configsection}} 来代替。}}
 +
 
 +
在设置好你的配置文件并且确认它们可以正常工作后,使用systemctl启动这些服务:
 +
 
 +
# systemctl enable netctl-auto@''interface''.service
 +
# systemctl enable netctl-ifplugd@''interface''.service 
 +
 
 +
{{Warning|
 +
* 如果任何一个配置文件包含错误,例如包含空变量 {{ic|1=Key=}},这个文件将无法在开机时自动启用。
 +
* 本方法与 [[#基本方法|基本方法]] 矛盾。如果你之前已经通过netctl启用了一个配置文件,运行 {{ic|netctl disable ''profile''}} 来防止这个配置在计算机启动时被启用两次。}}
 +
 
 +
从netctl 1.3开始,允许在不停止netctl-auto服务的情况下手工控制一个不受netctl-auto管理的网络接口。这可以通过netctl-auto命令完成。若要获得可用行为的列表,运行:
 +
  # netctl-auto --help
 +
 
 +
===从 netcfg 迁移的方法===
 +
 
 +
{{ic|netctl}} 使用 {{ic|/etc/netctl}} 保存配置,而'''不是''' {{ic|/etc/network.d}} ({{ic|netcfg}}保存配置的位置).
 +
 
 +
从 netcfg 迁移,至少需下列操作:
 +
* 禁用 netcfg 服务: {{ic|# systemctl disable netcfg.service}}。
 +
* 删除 netcfg,然后安装 {{Pkg|netctl}}
 +
* 将老的网络配置移动到新目录
 +
* 根据 netctl.profile(5) 修改配置文件中的变量名称(主要是大小写变化,例如 CONNECTION 变成 Connection).
 +
* 配置固定IP时,{{ic|Address}}变量中IP后面要带有子网掩码(例如示例文件中的 {{ic|1=Address=('192.168.1.23'''/24'''' '192.168.1.87'''/24'''')}} )。
 +
* 如果你依照 {{ic|wireless-wpa-configsection}} 中的例子建立了一个无线网络配置,注意这将覆盖以上括号中的 {{ic|wpa_supplicant}} 选项的设置。要连接到一个隐藏的无线网络,在{{ic|wireless-wpa-configsection}}中加入{{ic|1=scan_ssid=1}} ; {{ic|1=Hidden=yes}} 在这里不起作用。
 +
* 接口变量和其他变量不再需要引号(这仅仅是风格变化).
 +
* 为每一个迁移过来的配置执行{{ic|netctl enable ''profile''}}, '''last'''工作方式有变化,参阅 netctl.special(7).
 +
* 使用 {{ic|netctl list}} / {{ic|netctl start <profile>}} 替换 netcfg-menu. wifi-menu 依然保留。
 +
* 不同于 {{ic|netcfg}},当 {{ic|netctl}} 没有连接到一块已经通电的[[wikipedia:Network interface controller|网卡]]时,它默认不会自己启动一块。要解决这个问题,只需在你的 {{ic|/etc/netctl/''profile''}} 文件中加上 {{ic|1=SkipNoCarrier=yes}} 。
 +
 
 +
===密码加密(256-bit PSK)===
 +
 
 +
{{Note|尽管进行了“加密”,你写进配置文件的密码依然可以让你连接到一个WPA-PSK网络。也即,这个加密过程只用来将密码变得“让人看不懂”,但无法阻止对这个文件有阅读权限的人使用它来连接网络。而且将这个密码再用到其他的地方变得极其不安全,你应当考虑是否有这样做的必要。}}
 +
 
 +
那些'''不想'''让自己的无线网络密钥以“明文”的形式保存的用户可以选择使用256位预先共享密钥(PSK)来代替,它由密钥和SSID经由标准算法计算而成。
 +
 
 +
* 方法 1: 使用 {{ic|wifi-menu -o}} 在目录 {{ic|/etc/netctl/}} 中生成一个配置文件。
 +
* 方法 2: 按照如下方法手工配置。
 +
 
 +
无论采用何种方法,建议运行 {{ic|chmod 600 /etc/netctl/<config_file>}} 来禁止其他用户访问密码。
 +
 
 +
[[WPA_supplicant#Configuration_file|wpa_passphrase]]中的方法生成你的256位PSK:
 +
{{hc|$ wpa_passphrase ''your_essid'' ''passphrase''|2=
 
   network={
 
   network={
   ssid="archlinux"
+
   ssid="''your_essid''"
   #psk="freenode"
+
   #psk="''passphrase''"
 
   psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
 
   psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
 
}
 
}
{{Note|This information will be used in your profile so do not close the terminal}}
 
 
}}
 
}}
  
In a second terminal window copy the example file {{ic|wireless-wpa}} from {{ic|/etc/netctl/examples}} to {{ic|/etc/netctl}}.
+
{{Note|运行后不要关闭终端,这里的结果将在之后的配置中用到。}}
 +
 
 +
在另一个终端窗口中,将示例文件 {{ic|wireless-wpa}} {{ic|/etc/netctl/examples}} 复制到 {{ic|/etc/netctl}}:
 +
 
 
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa
 
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa
  
You will then need to edit {{ic|/etc/netctl/wireless-wpa}} using your favorite text editor and add the ''Encrypted Pre-shared Key'' that was generated earlier using wpa_passphrase, to the {{ic|'''Key'''}} variable of this profile.
+
你需要用常用的文本编辑器编辑 {{ic|/etc/netctl/wireless-wpa}},将你刚才生成的PSK码添加到 {{ic|Key}} 变量。
 +
 
 +
完成后,你的配置文件 {{ic|wireless-wpa}} 应当像下面这样:
  
Once completed your network profile {{ic|wireless-wpa}} containing a 256-bit Encrypted PSK should resemble:
 
 
{{hc|/etc/netctl/wireless-wpa|2=
 
{{hc|/etc/netctl/wireless-wpa|2=
Description='A simple WPA encrypted wireless connection using 256-bit Encrypted PSK'
+
Description='A simple WPA encrypted wireless connection using 256-bit PSK'
 
Interface=wlp2s2
 
Interface=wlp2s2
 
Connection=wireless
 
Connection=wireless
 
Security=wpa
 
Security=wpa
 
IP=dhcp
 
IP=dhcp
ESSID=archlinux
+
ESSID=''your_essid''
 
Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
 
Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
 
}}
 
}}
{{Note|1=Make sure to use the '''special non-quoted rules''' for Key= that are explained at the end of [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)]}}
 
  
==Support==
+
{{Note|
Official announcement thread: https://bbs.archlinux.org/viewtopic.php?id=157670
+
* 注意对变量 {{ic|Key}} 使用 '''special quoting rules''',详细的描述参见[https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)]末尾。
 +
* 如果密码没有起作用,从变量 {{ic|Key}} 中删除 {{ic|\"}} 。}}
 +
 
 +
== 提示与技巧 ==
 +
 
 +
 
 +
=== 替代'netcfg current' ===
 +
 
 +
如果之前使用 {{ic|netcfg current}} ,对于通过 {{ic|netctl-auto}} 建立的连接,可以使用 {{ic|# netctl-auto current}} 来作为代替(自netctl-1.3起有此功能)。
 +
 
 +
若要人工分析连接,使用:  
 +
 
 +
# netctl list | awk '/*/ {print $2}'
 +
 
 +
=== Eduroam ===
 +
 
 +
有些大学使用一个叫做"Eduroam"的系统管理其无线网络。(鉴于未发现此节对与中文用户的作用,不做翻译)For this system, a WPA config-section profile with the following format is often useful:
 +
 
 +
{{hc|/etc/netctl/wlan0-eduroam|<nowiki>
 +
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>"'
 +
)</nowiki>
 +
}}
 +
 
 +
{{Tip|To prevent storing your password as plaintext, you can generate a password hash with {{ic|$ echo -n <password> &#124; iconv -t utf16le &#124; openssl md4}}. Then use it as {{ic|'password&#61;hash:<hash>'}}.}}
 +
 
 +
For TTLS and certified universities this setup works:
 +
 
 +
{{hc|/etc/netctl/wlan0-eduroam|<nowiki>
 +
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"'
 +
)</nowiki>
 +
}}
 +
 
 +
=== Bonding ===
 +
 
 +
引自 [https://www.kernel.org/doc/Documentation/networking/bonding.txt kernel documentation]:
 +
 
 +
:''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, 需要从官方软件源安装 {{Pkg|ifenslave}}。
 +
 
 +
复制 {{ic|/etc/netctl/examples/bonding}} 到 {{ic|/etc/netctl/bonding}} 然后进行编辑。例如:
 +
 
 +
{{hc|/etc/netctl/bonding|2=
 +
Description='Bond Interface'
 +
Interface='bond0'
 +
Connection=bond
 +
BindsToInterfaces=('eth0' 'eth1')
 +
IP=dhcp
 +
IP6=stateless}}
 +
 
 +
现在你可以停用之前的配置文件。然后设置bonding为自动启动,切换到新的配置。例如:
 +
 
 +
# netctl switch-to bonding
 +
 
 +
{{Note|这将使用{{ic|bonding}}驱动的默认策略round-robin。更多信息参见 [https://www.kernel.org/doc/Documentation/networking/bonding.txt 官方文档]。}}
 +
 
 +
{{Tip|查看状态和绑定模式: {{bc|$ cat /proc/net/bonding/bond0}}}}
 +
 
 +
==== 有线 -> 无线故障切换 ====
 +
 
 +
这一部分探讨怎样用bonding来实现当有线以太网无法工作时自动切换至无线网络。我们假设所有的网络接口默认启动dhcdpcd服务。
 +
 
 +
你需要从官方源安装软件包: <s>{{Pkg|ifplugd}}</s>, {{Pkg|ifenslave}} 和 {{Pkg|wpa_supplicant}}.
 +
 
 +
首先设置 {{ic|bonding}} 驱动使用 {{ic|active-backup}}:
 +
 
 +
{{hc|/etc/modprobe.d/bonding.conf|2=
 +
options bonding mode=active-backup
 +
options bonding miimon=100
 +
options bonding primary=eth0
 +
options bonding max_bonds=0
 +
}}
 +
 
 +
{{ic|max_bonds}} 选项避免了 {{ic|Interface bond0 already exists}} 错误。如果使用了MAC过滤,应当添加设置 {{ic|fail_over_mac<nowiki>=</nowiki>active}}。
 +
 
 +
接下来,编写一个netctl配置文件来绑定两个网络接口:
 +
 
 +
{{hc|/etc/netctl/failover|2=
 +
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配置文件{{ic|/etc/wpa_supplicant/wpa_supplicant-wlan0.conf}} 然后运行:
 +
 
 +
# systemctl enable wpa_supplicant@wlan0
 +
 
 +
在有线网络配置中设置{{ic|1=IP='no'}}。IP地址应当只被分配到bond0接口。
 +
 
 +
如果你有一个有线连接和无线连接连接到同一个网络,现在可以将有线网络断开连接,然后重新连接而依然保持网络通畅。在大多数情况下,甚至连流媒体音乐都不会卡顿。
 +
 
 +
=== 移除过时的dhcpcd租期 ===
 +
 
 +
{{Expansion|missing description}}
 +
 
 +
# rm /var/lib/dhcpcd/dhcpcd-wlan0.lease
 +
 
 +
=== DHCP超时问题 ===
 +
 
 +
如果在通过DHCP申请租期时有超时问题,你可以设置超时的时限大于netctl默认的30秒。Create a file in 在{{ic|/etc/netctl/hooks/}}或者{{ic|/etc/netctl/interfaces/}}中创建一个文件,在其中加入 {{ic|1=TimeoutDHCP=40}} 可以使时限设置为40秒。然后为这个文件加上可执行权限。
 +
 
 +
== 参见 ==
  
==Tips and Tricks==
+
* [https://bbs.archlinux.org/viewtopic.php?id=157670 官方陈述页面]
As of April 2013 there is no netctl alternative to 'netcfg current'. If you relied on it for something, like a status bar for a tiling window manager, you can now use:
+
* 在AUR中有一个可用的cinnamon applet: {{AUR|cinnamon-applet-netctl-systray-menu}}
netctl list|grep \*|sed 's/\*//'|sed 's/\ //'
+

Revision as of 15:57, 15 February 2014

翻译状态: 本文是英文页面 Netctl翻译,最后翻译时间:2013-11-14,点击这里可以查看翻译后英文页面的改动。

Netctl 是基于命令行的网络管理器,支持场景配置。它是 Arch 的项目,取代了原来的 netcfg

安装

netctl 软件包已经进入官方软件仓库.

netctlnetcfgAUR相互冲突,安装 netctl 会替换掉netcfgAUR。如果配置不正确,可能导致连接中断。

Note: 请使用systemctl --type=service确保其它可以配置网络的服务都没有运行,同时使用多个网络配置工具会导致冲突。

建议阅读

建议用户使用前阅读如下文档:

配置

netctl 使用配置文件来管理网络连接,这些配置文件保存在 /etc/netctl/ 。软件提供了一些配置文件的示例以供参考。这些示例位于 /etc/netctl/examples/。配置文件通常包括:

  • ethernet-dhcp
  • ethernet-static
  • wireless-wpa
  • wireless-wpa-static

若要使用上述示例配置文件,只需将其从 /etc/netctl/examples/ 复制到 /etc/netctl/ 然后按照自己的需求进一步配置即可,如:

# cp /etc/netctl/examples/wireless-wpa /etc/netctl/profile
Tip: 如要配置无线网络,可以使用 wifi-menu -o 来自动在 /etc/netctl/ 中生成配置文件。
Warning: 使用 wifi-menu -o 而在 /etc/netctl/ 中生成的文件名中带有 '-' 。这将在自动设置中带来问题,建议重新为配置文件命名。

在创建好你自己的配置文件之后,可以尝试运行:

# netctl start profile

来使用新的配置文件创建一个连接。

Note: 其中profile是文件名,不包含完整路径,使用完整的路径将使 netctl 异常退出。

如果上述命令出错,可使用 journalctl -xnnetctl status profile 来获得对错误的详细描述,对配置文件做必要的更正后重试。

自动化操作

如果使用单一配置文件(对每个网络接口)或想人工切换配置文件,请看 基本方法 。使用这种配置方法的多为服务器、工作站和路由器等。

如果需要方便的在多个配置文件间切换,请看 自动切换配置。笔记本多用此种方式。

基本方法

使用此种方式,可以为每个网络接口固定地启用一个配置文件。首先需手动检查该配置文件可以正常使用,那么可以用下面的命令启用它:

# netctl enable profile

这将创建并启用一个随计算机启动而自动运行的 systemd 服务。对配置文件本身的修改无法自动关联到前述创建的服务文件,修改之后,需用下述命令重新启用该配置。

# netctl reenable profile
Note: 只有在计算机启动时(或服务启动时),配置文件可以被成功地启用,连接才可以建立。特别地,对于有线连接,需插好电缆;对于无线连接,需处于信号覆盖范围内。
Tip: 若要无视线缆是否插好,强制对有线网络接口启用一个固定IP的配置,可以在配置文件中加入 SkipNoCarrier=yes

自动切换配置

netctl 提供了两个特殊的 systemd 服务来自动切换配置:

  • 有线网络: netctl-ifplugd@interface.service。使用它,将在你插入和拔出电缆时自动切换配置文件。
  • 无线网络: netctl-auto@interface.service。使用它,将在你从一个无线网络的覆盖范围进入另一个无线网络的范围时自动切换配置文件。
Note: netcfg 使用 net-auto-wireless.servicenet-auto-wired.service 来实现相同的目的。

首先 安装 下列软件包:

  • wpa_actiond 用来支持使用 netctl-auto@interface.service 命令。
  • ifplugd 用来支持使用 netctl-ifplugd@interface.service 命令。

然后将 netctl-auto@interface.servicenetctl-ifplugd@interface.service 需要启动的所有配置文件编辑好。

如果希望某些无线网络配置不要netctl-auto@interface.service自动启用,需要专门在该配置文件中加入 ExcludeAuto=yes 。存在多个可用配置时,可以通过设置 Priority= 来为某些文件设置优先级。 netctl-ifplugd@interface.service 优先启用使用了 DHCP 的配置文件,如要优先启用一个使用固定IP的配置,可以设置 AutoWired=yes 。详细内容参见 netctl.profile(5)

Warning: 不能通过选项Security=wpa-config来让netctl-auto自动选择一个启用了WPA的配置文件。请使用 Security=wpa-configsection 来代替。

在设置好你的配置文件并且确认它们可以正常工作后,使用systemctl启动这些服务:

# systemctl enable netctl-auto@interface.service 
# systemctl enable netctl-ifplugd@interface.service  
Warning:
  • 如果任何一个配置文件包含错误,例如包含空变量 Key=,这个文件将无法在开机时自动启用。
  • 本方法与 基本方法 矛盾。如果你之前已经通过netctl启用了一个配置文件,运行 netctl disable profile 来防止这个配置在计算机启动时被启用两次。

从netctl 1.3开始,允许在不停止netctl-auto服务的情况下手工控制一个不受netctl-auto管理的网络接口。这可以通过netctl-auto命令完成。若要获得可用行为的列表,运行:

 # netctl-auto --help

从 netcfg 迁移的方法

netctl 使用 /etc/netctl 保存配置,而不是 /etc/network.d (netcfg保存配置的位置).

从 netcfg 迁移,至少需下列操作:

  • 禁用 netcfg 服务: # systemctl disable netcfg.service
  • 删除 netcfg,然后安装 netctl
  • 将老的网络配置移动到新目录
  • 根据 netctl.profile(5) 修改配置文件中的变量名称(主要是大小写变化,例如 CONNECTION 变成 Connection).
  • 配置固定IP时,Address变量中IP后面要带有子网掩码(例如示例文件中的 Address=('192.168.1.23/24' '192.168.1.87/24') )。
  • 如果你依照 wireless-wpa-configsection 中的例子建立了一个无线网络配置,注意这将覆盖以上括号中的 wpa_supplicant 选项的设置。要连接到一个隐藏的无线网络,在wireless-wpa-configsection中加入scan_ssid=1 ; Hidden=yes 在这里不起作用。
  • 接口变量和其他变量不再需要引号(这仅仅是风格变化).
  • 为每一个迁移过来的配置执行netctl enable profile, last工作方式有变化,参阅 netctl.special(7).
  • 使用 netctl list / netctl start <profile> 替换 netcfg-menu. wifi-menu 依然保留。
  • 不同于 netcfg,当 netctl 没有连接到一块已经通电的网卡时,它默认不会自己启动一块。要解决这个问题,只需在你的 /etc/netctl/profile 文件中加上 SkipNoCarrier=yes

密码加密(256-bit PSK)

Note: 尽管进行了“加密”,你写进配置文件的密码依然可以让你连接到一个WPA-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
}
Note: 运行后不要关闭终端,这里的结果将在之后的配置中用到。

在另一个终端窗口中,将示例文件 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
Note:
  • 注意对变量 Key 使用 special quoting rules,详细的描述参见netctl.profile(5)末尾。
  • 如果密码没有起作用,从变量 Key 中删除 \"

提示与技巧

替代'netcfg current'

如果之前使用 netcfg current ,对于通过 netctl-auto 建立的连接,可以使用 # netctl-auto current 来作为代替(自netctl-1.3起有此功能)。

若要人工分析连接,使用:

# netctl list | awk '/*/ {print $2}'

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>"'
)
Tip: To prevent storing your password as plaintext, you can generate a password hash with $ echo -n <password> | iconv -t utf16le | openssl md4. Then use it as 'password=hash:<hash>'.

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

引自 kernel documentation:

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
Note: 这将使用bonding驱动的默认策略round-robin。更多信息参见 官方文档
Tip: 查看状态和绑定模式:
$ cat /proc/net/bonding/bond0

有线 -> 无线故障切换

这一部分探讨怎样用bonding来实现当有线以太网无法工作时自动切换至无线网络。我们假设所有的网络接口默认启动dhcdpcd服务。

你需要从官方源安装软件包: ifplugd, ifenslavewpa_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租期

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: missing description (Discuss in Talk:Netctl (简体中文)#)
# rm /var/lib/dhcpcd/dhcpcd-wlan0.lease

DHCP超时问题

如果在通过DHCP申请租期时有超时问题,你可以设置超时的时限大于netctl默认的30秒。Create a file in 在/etc/netctl/hooks/或者/etc/netctl/interfaces/中创建一个文件,在其中加入 TimeoutDHCP=40 可以使时限设置为40秒。然后为这个文件加上可执行权限。

参见