Difference between revisions of "Netctl"

From ArchWiki
Jump to: navigation, search
(Configuration: expand note on interface names)
(стилевые правки)
Line 1: Line 1:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:Network managers]]
+
[[Category:Русский]]
 +
[[Category:Networking (Русский)]]
 +
[[Category:Network managers (Русский)]]
 
[[cs:Netctl]]
 
[[cs:Netctl]]
 +
[[en:Netctl]]
 
[[es:Netctl]]
 
[[es:Netctl]]
 
[[fr:Netctl]]
 
[[fr:Netctl]]
 
[[ja:Netctl]]
 
[[ja:Netctl]]
[[ru:Netctl]]
 
 
[[zh-CN:Netctl]]
 
[[zh-CN:Netctl]]
{{Related articles start}}
 
{{Related|Bridge with netctl}}
 
{{Related|Network configuration}}
 
{{Related|Wireless network configuration}}
 
{{Related|:Category:Network managers}}
 
{{Related articles end}}
 
  
''netctl'' is a CLI-based tool used to configure and manage network connections via profiles. It is a native Arch Linux project that replaces the old ''netcfg'' utility.
+
''netctl'' — это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это один из проектов Arch Linux, призванный заменить устаревшую утилиту ''netcfg''.
  
== Installation ==
+
== Установка ==
  
{{Expansion|Optional dependencies should be mentioned.}}
+
{{Expansion (Русский)|Следует упомянуть о дополнительных зависимостях.}}
  
The {{Pkg|netctl}} package is available in the [[official repositories]]. Installing netctl will replace {{AUR|netcfg}}.  
+
Пакет {{Pkg|netctl}} доступен в [[Official Repositories (Русский)|официальных репозиториях]]. Установка netctl заменит {{AUR|netcfg}} ({{Pkg|netctl}} и {{AUR|netcfg}} — конфликтующие пакеты). Есть вероятность потери сетевого соединения после установки {{Pkg|netctl}}, если ваши профили некорректно настроены с точки зрения netctl.
  
{{Pkg|netctl}} and {{AUR|netcfg}} are conflicting packages. You will be potentially connectionless after installing ''netctl'' if your profiles are misconfigured.
+
{{Note (Русский)|Чтобы убедиться, что не запущены другие службы настройки сети, стоит выполнить {{ic|1=systemctl --type=service}}. Разные сетевые службы будут конфликтовать.}}
  
{{Note|It may be a good idea to use {{ic|1=systemctl --type=service}} to ensure that no other service is running that may want to configure the network. Multiple networking services will conflict.}}
+
== Рекомендуется к прочтению ==
  
== Required reading ==
+
Перед началом использования netctl желательно прочитать следующие страницы:
 +
* [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]
  
It is advisable to read the following man pages before using netctl:
+
== Настройка ==
*[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]
+
  
== Configuration ==
+
Для управления сетевыми соединениями netctl использует профили, файлы которых расположены в {{ic|/etc/netctl/}}. В {{ic|/etc/netctl/examples/}} можно найти примеры типовых конфигураций:
  
''netctl'' uses profiles to manage network connections, profile files are stored in {{ic|/etc/netctl/}}. 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-dhcp
 
* ethernet-static
 
* ethernet-static
Line 41: Line 36:
 
* wireless-wpa-static
 
* wireless-wpa-static
  
To use an example profile, simply copy one of them from {{ic|/etc/netctl/examples/}} to {{ic|/etc/netctl/}} and configure it to your needs:
+
Вы можете использовать любой файл из предоставленных примеров как основу для своей конфигурации, для этого просто скопируйте один из них в {{ic|/etc/netctl/}} и отредактируйте необходимым образом:
  
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/''profile''
+
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/''имя_профиля''
  
{{Note|You will most probably '''need''' to edit the interface name in the profile. As of v197, udev no longer assigns network interface names according to the {{ic|wlan''X''}} and {{ic|eth''X''}} naming scheme. Please do not assume that your wireless interface is named {{ic|wlan0}}, or that your wired interface is named {{ic|eth0}}, as used in examples on this page. You can use the command {{ic|ip link}} to discover the names of your interfaces. See [[Network configuration#Device names]] for details.}}
+
{{Note (Русский)|Скорее всего, вам будет '''необходимо''' изменить имя сетевого интерфейса в профиле. Начиная с версии 197, [[udev (Русский)|udev]] больше не присваивает интерфейсам имена стандартного вида {{ic|wlanX}} и {{ic|ethX}}. Теперь устройствам присваиваются имена вида {{ic|enXXXXX}} (адаптеры Ethernet), {{ic|wlXXXXX}} (беспроводные адаптеры), которые могу изменяться в зависимости от места их физического подключения. Используйте команду {{ic|ip link}} чтобы узнать имена сетевых интерфейсов в вашей системе.}}
  
{{Tip|For wireless settings, you can use {{ic|wifi-menu -o}} to generate the profile file in {{ic|/etc/netctl/}}.}}
+
{{Tip (Русский)|Для автоматического создания профиля беспроводного соединения в {{ic|/etc/netctl/}} воспользуйтесь командой {{ic|wifi-menu -o}}.}}
  
Once you have created your profile, make an attempt to establish a connection using the newly created profile by running:
+
Как только вы создали профиль, попробуйте установить соединение:
  
  # netctl start ''profile''
+
  # netctl start ''имя_профиля''
  
{{Note|''profile'' is the file name, not including the full path. Providing the full path will make ''netctl'' exit with an error code.}}
+
{{Note (Русский)|Здесь ''имя_профиля'' — это имя файла профиля. Указание полного пути к файлу является ошибкой.}}
  
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.
+
Если в результате выполнения команды было выведено сообщение об ошибке, выполните {{ic|journalctl -xn}} и {{ic|netctl status ''имя_профиля''}} для выяснения ее причины. Произведите необходимую корректировку конфигурации и повторите попытку.
  
=== Automatic operation ===
+
=== Автоматизация ===
  
If you use only one profile (per interface) or want to switch profiles manually, the [[#Basic method|Basic method]] will do. Most common examples are servers, workstations, routers etc.
+
Если используется только один профиль на один интерфейс или вы хотите переключать профили вручную, то подойдет [[#Основной метод|основной метод]] — пользователям серверов, рабочих станций, роутеров и т. п.
  
If you need to switch multiple profiles frequently, use [[#Automatic switching of profiles|Automatic switching of profiles]]. Most common examples are laptops.
+
Если требуется часто переключаться между несколькими профилями, используйте [[#Автоматическое переключение профилей|автоматическое переключение профилей]] — будет полезно пользователям ноутбуков.
  
==== Basic method ====
+
==== Основной метод ====
  
With this method, you can statically start only one profile per interface. First manually check that the profile can be started  successfully, then it can be enabled using
+
Этот метод создаст и активирует службу [[systemd (Русский)|systemd]], который будет запускаться при загрузке системы. Изменения в файле профиля не будут отражаться в файле конфигурации службы автоматически, поэтому, после внесения изменений в файл, необходимо вновь активировать профиль командой:
  
  # netctl enable ''profile''
+
  # netctl enable ''имя_профиля''
  
This will create and enable a [[systemd]] service that will start when the computer boots. Changes to the profile file will not propagate to the service file automatically. After such changes, it is necessary to reenable the profile:
+
{{Note (Русский)|Соединение будет установлено только в том случае, если профиль может быть успешно запущен во время загрузки системы (во время запуска службы). Это значит, что во время загрузки сетевой кабель должен быть подключен, а беспроводная сеть доступна.}}
  
# netctl reenable ''profile''
+
{{Tip (Русский)|Вы можете запускать профиль Ethetnet со статическим IP независимо от того, подключен кабель или нет. Для этого добавьте {{ic|1=SkipNoCarrier=yes}} в файл конфигурации профиля.}}
  
{{Note|The connection is only established if the profile can be started succesfully at boot time (or when the service starts). That specifically means, in case of wired connection the cable must be plugged-in, in case of wireless connection the network must be in range.}}
+
==== Автоматическое переключение профилей ====
  
{{Tip|To enable static IP profile on wired interface no matter if the cable is connected or not, use {{ic|1=SkipNoCarrier=yes}} in your profile.}}
+
Для автоматического переключения профилей netctl предоставляет две специальных службы [[systemd (Русский)|systemd]]:
  
==== Automatic switching of profiles ====
+
* Для проводных соединений: {{ic|netctl-ifplugd@''interface''.service}}. Сервис автоматически изменяет профиль при подключении и отключении кабеля.
 +
* Для беспроводных соединений: {{ic|netctl-auto@''interface''.service}}. Сервис автоматически изменяет профиль при переходе из диапазона одной сети в диапазон другой.
  
''netctl'' provides two special [[systemd]] services for automatic switching of profiles:
+
Сначала [[pacman (Русский)#Установка определенных пакетов|установите]] необходимые пакеты:
  
* For wired interfaces: {{ic|netctl-ifplugd@''interface''.service}}. Using this netctl profiles change as you plug the cable in and out.
+
* Пакет {{Pkg|wpa_actiond}} требуется для использования {{ic|netctl-auto@''interface''.service}}
* For wireless interfaces: {{ic|netctl-auto@''interface''.service}}. Using this netctl profiles change as you move from range of one network into range of other network.
+
* Пакет {{Pkg|ifplugd}} требуется для использования {{ic|netctl-ifplugd@''interface''.service}}
  
{{Note|''netcfg'' used {{ic|net-auto-wireless.service}} and {{ic|net-auto-wired.service}} for this purpose.}}
+
{{Note (Русский)|netcfg использовал {{ic|net-auto-wireless.service}} и {{ic|net-auto-wired.service}} для этих целей.}}
  
First [[pacman|install]] required packages:
+
Теперь настройте профили, которые должны будут запускаться с помощью {{ic|netctl-auto@''interface''.service}} и {{ic|netctl-ifplugd@''interface''.service}}.
* Package {{Pkg|ifplugd}} is required to use {{ic|netctl-ifplugd@''interface''.service}}.
+
* Package {{Pkg|wpa_actiond}} is required to use {{ic|netctl-auto@''interface''.service}}.
+
  
Now configure all profiles that {{ic|netctl-auto@''interface''.service}} or {{ic|netctl-ifplugd@''interface''.service}} can start.
+
Если вы хотите, чтобы какой-то из беспроводных профилей '''не''' запускался автоматически службой {{ic|netctl-auto@''interface''.service}}, то вам следует явно указать это в файле профиля, добавив в него {{ic|1=ExcludeAuto=yes}}.
  
If you want some wireless profile '''not''' to be started automatically by {{ic|netctl-auto@''interface''.service}}, you have to explicitly add {{ic|1=ExcludeAuto=yes}} to that profile. You can use {{ic|1=Priority=}} in the ''WPAConfigSection'' (see ''/etc/netctl/examples/wireless-wpa-configsection'') to set priority of some profile when multiple profiles are available. {{ic|netctl-ifplugd@''interface''.service}} will prefer profiles, which use [[Wikipedia:DHCP|DHCP]]. To prefer a profile with a static IP, you can use {{ic|1=AutoWired=yes}}. See {{ic|netctl.profile(5)}} for details.
+
В случае нескольких беспроводных профилей, вы также можете установить приоритет запуска каждого, указав его в параметре {{ic|1=Priority=[0-9]}} секции {{ic|WPAConfigSection}} (см. пример в {{ic|/etc/netctl/examples/wireless-wpa-configsection}}. По-умолчанию, {{ic|netctl-ifplugd@''interface''.service}} первым предпочтет профиль, который использует [[Wikipedia:ru:DHCP|DHCP]]. Для того, чтобы сначала был запущен профиль, использующий статический IP, можно использовать опцию {{ic|1=AutoWired=yes}}. Подробную информацию смотрите в {{ic|netctl.profile(5)}}.
  
{{Warning|Automatic selection of a WPA-enabled profile by ''netctl-auto'' is not possible with option {{ic|1=Security=wpa-config}}, please use {{ic|1=Security=wpa-configsection}} instead.}}
+
{{Warning (Русский)|С опцией {{ic|1=Security=wpa-config}} невозможно автоматическое подключение к WPA профилю средствами netctl-auto. Вместо этого используйте {{ic|1=Security=wpa-configsection}}.}}
  
Once your profiles are set and verified to be working, simply enable these services using ''systemctl'':
+
После того, как все профили настроены, активируйте нужные вам службы:
  
 
  # systemctl enable netctl-auto@''interface''.service  
 
  # systemctl enable netctl-auto@''interface''.service  
  # systemctl enable netctl-ifplugd@''interface''.service
+
  # systemctl enable netctl-ifplugd@''interface''.service
  
{{Warning|
+
{{Warning (Русский)|
* If any of the profiles contain errors, such as an empty or misquoted {{ic|1=Key=}} variable, the unit will fail to load with the message {{ic|"Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf'}}, even when that profile is not being used.
+
* Если один из профилей содержит ошибки, например пустую переменную {{ic|1=Key=}}, юнит systemd не сможет запуститься при загрузке даже если профиль с ошибкой не был активирован.
* This method conflicts with the [[#Basic method|Basic method]]. If you have previously enabled a profile through ''netctl'', run {{ic|netctl disable ''profile''}} to prevent the profile from starting twice at boot.
+
* Этот метод несовместим с [[#Основной метод|основным методом]]. Если вы ранее активировали профиль через netctl запустите {{ic|netctl disable ''имя_профиля''}}, чтобы предотвратить запуск профиля дважды при загрузке.}}
}}
+
 
 +
Начиная с версии netctl 1.3, стало возможным вручную управлять сетевым интерфейсом, контролируемым службой netctl-auto без необходимости остановки службы. Это реализовано с помощью одноименной утилиты netctl-auto. Чтобы просмотреть список доступных команд, наберите:
 +
# netctl-auto --help
 +
 
 +
=== Переход с netcfg ===
 +
 
 +
netctl хранит профили в {{ic|/etc/netctl/}}, а не в {{ic|/etc/network.d/}}, как это делал netcfg.
  
Since netctl 1.3, it possible to manually control an interface otherwise managed by netctl-auto without having to stop the netctl-auto service. This is done using the netctl-auto command. To have a list of available actions just run:
+
Чтобы перейти с netcfg, необходимо выполнить, как минимум, следующие шаги:
  # netctl-auto --help
+
  
=== Migrating from netcfg ===
+
* Отключите службы netcfg: {{ic|systemctl disable netcfg.service}}.
 +
* Удалите netcfg и [[pacman (Русский)#Установка определенных пакетов|установите]] netctl.
 +
* Переместите файлы сетевых профилей в новую директорию.
 +
* Переименуйте переменные в соответствии с {{ic|netctl.profile(5)}} (в основном, необходимо привести переменные к регистру [[Wikipedia:ru:CamelCase|UpperCamelCase]]. Например {{ic|CONNECTION}} нужно переименовать в {{ic|Connection}}).
 +
* Убедитесь, что в переменной {{ic|Address}} профиля со статическим IP прописана маска подсети после IP адреса (например: {{ic|1=Address=('192.168.1.23'''/24'''' '192.168.1.87'''/24'''')}})
 +
* Если вы настраивали беспроводное соединение по образцу {{ic|wireless-wpa-configsection}}, обратите внимание, что это перезапишет опции {{ic|wpa_supplicant}}, определенные выше скобок. Для подключения к скрытой беспроводной сети добавьте {{ic|1=scan_ssid=1}} к опциям в {{ic|wireless-wpa-configsection}}; {{ic|1=Hidden=yes}} больше не действует.
 +
* На ваше усмотрение можно убрать кавычки вокруг переменных, для которых кавычки не обязательны.
 +
* Выполните {{ic|netctl enable ''имя_профиля''}} для каждого профиля в старом массиве {{ic|NETWORKS}}. Специальная опция {{ic|last}} больше не нужна, смотрите описание netctl.service в [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.special.7.txt netctl.special(7)].
 +
* Вместо ''netcfg-menu'' используйте {{ic|netctl list}} и {{ic|netctl start ''имя_профиля''}}. ''wifi-menu'' остался доступным.
 +
* В отличие от netcfg, по-умолчанию netctl не устанавливает логическое соединение на интерфейсе, если [[Wikipedia:ru:Сетевая_плата|сетевая плата]], не подключена к другой работающей плате. Чтобы это исправить, добавьте {{ic|1=SkipNoCarrier=yes}} в конец вашего файла {{ic|/etc/netctl/''имя_профиля''}}.
  
''netctl'' uses {{ic|/etc/netctl/}} to store its profiles, '''not''' {{ic|/etc/network.d/}} (used by ''netcfg'').
+
=== Хеширование пароля (256-битный Pre-Shared Key) ===
  
In order to migrate from ''netcfg'', at least the following is needed:
+
{{Note (Русский)|Этот метод позволяет зашифровать пароль в файле конфигурации беспроводной сети так, чтобы скрыть его от прочтения посторонними. Однако, это не защищает от использования вашего файла с зашифрованной версией пароля посторонним пользователем с правами на его чтение для подключения к сети.}}
* Disable the netcfg service: {{ic|systemctl disable netcfg.service}}.
+
* Uninstall ''netcfg'' and install ''netctl''.
+
* Move network profile files to the new directory.
+
* Rename variables therein according to {{ic|netctl.profile(5)}} (Most variable names have only {{ic|UpperCamelCase}} i.e {{ic|CONNECTION}} becomes {{ic|Connection}}).
+
* For static IP configuration make sure the {{ic|Address}} variables have a netmask after the IP (e.g. {{ic|1=Address=('192.168.1.23'''/24'''' '192.168.1.87'''/24'''')}} in the example profile).
+
* If you setup a wireless profile according in the {{ic|wireless-wpa-configsection}} example, note that this overrides {{ic|wpa_supplicant}} options defined above the brackets. For a connection to a hidden wireless network, add {{ic|1=scan_ssid=1}} to the options in the {{ic|wireless-wpa-configsection}}; {{ic|1=Hidden=yes}} does not work there.  
+
* Unquote interface variables and other variables that do not strictly need quoting (this is mainly a style thing).
+
* Run {{ic|netctl enable ''profile''}} for every profile in the old {{ic|NETWORKS}} array. ''last'' does not work this way, see {{ic|netctl.special(7)}}.
+
* Use {{ic|netctl list}} and/or {{ic|netctl start ''profile''}} instead of ''netcfg-menu''. ''wifi-menu'' remains available.
+
* Unlike ''netcfg'', by default ''netctl'' fails to bring up a [[wikipedia:Network interface controller|NIC]] when it is not connected to another powered up NIC. To solve this problem, add {{ic|1=SkipNoCarrier=yes}} at the end of your {{ic|/etc/netctl/''profile''}}.
+
  
=== Passphrase obfuscation (256-bit PSK) ===
+
У пользователей, не желающих, чтобы их пароль хранился в открытом виде, есть возможность использовать 256-битный хеш, вычисляемый на основе пароля и SSID сети стандартными алгоритмами. Реализовать хеширование пароля можно двумя способами:
  
{{Note|Although "encrypted", the key that you put in the profile configuration is enough to connect to a WPA-PSK network. Therefore this process is only useful for hiding the human-readable version of the passphrase. This will not prevent anyone with read access to this file from connecting to the network. You should ask yourself if there is any use in this at all, since using the same passphrase for anything else is a very poor security measure.}}
+
* Для генерации нужных настроек в {{ic|/etc/netctl/}} использовать {{ic|wifi-menu -o}}.
 +
* Ручная настройка, описанная ниже.
  
Users '''not''' wishing to have the passphrase to their wireless network stored in ''plain text'' have the option of storing the corresponding 256-bit pre-shared key (PSK) instead, which is calculated from the passphrase and the SSID using standard algorithms.
+
Какой бы метод вы не выбрали, для ограничения доступа к паролю следует установить нужные права на файл профиля:
  
* Method 1: Use {{ic|wifi-menu -o}} to generate a config file in {{ic|/etc/netctl/}}
+
# chmod 600 /etc/netctl/''имя_профиля''
* Method 2: Manual settings as follows.
+
  
For both methods it is suggested to {{ic|chmod 600 /etc/netctl/<config_file>}} to prevent user access to the password.
+
Вычислите хеш с помощью [[WPA Supplicant (Русский)#Процесс|wpa_passphrase]]:
  
Calculate your 256-bit PSK using [[WPA_supplicant#Configuration_file|wpa_passphrase]]:
 
 
{{hc|$ wpa_passphrase ''your_essid'' ''passphrase''|2=
 
{{hc|$ wpa_passphrase ''your_essid'' ''passphrase''|2=
 
   network={
 
   network={
Line 145: Line 142:
 
}}
 
}}
  
{{Note|This information will be used in your profile, so do not close the terminal.}}
+
{{Note (Русский)|Не закрывайте терминал, эта информация будет нужна далее.}}
  
In a second terminal window, copy the example file {{ic|wireless-wpa}} from {{ic|/etc/netctl/examples}} to {{ic|/etc/netctl}}:
+
Во втором окне терминала скопируйте файл-образец 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 ''pre-shared key'', that was generated earlier using wpa_passphrase, to the {{ic|Key}} variable of this profile.
+
Теперь следует отредактировать {{ic|/etc/netctl/wireless-wpa}}, добавив в переменную {{ic|Key}} ключ, сгенерированный ранее с помощью ''wpa_passphrase''.
  
Once completed your network profile {{ic|wireless-wpa}} containing a 256-bit PSK should resemble:
+
В итоге профиль wireless-wpa будет выглядеть следующим образом:
  
 
{{hc|/etc/netctl/wireless-wpa|2=
 
{{hc|/etc/netctl/wireless-wpa|2=
Line 165: Line 162:
 
}}
 
}}
  
{{Note|
+
{{Note (Русский)|
* Make sure to use the '''special quoting rules''' for the {{ic|Key}} variable as explained at the end of [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)].
+
* Убедитесь, что корректно использованы специальные правила расстановки кавычек (special quoting rules) для переменной {{ic|Key}}, которые описаны в конце [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)].
* If the passphrase fails, try removing the {{ic|\"}} in the {{ic|Key}} variable.}}
+
* Если пароль не проходит проверку, попробуйте удалить {{ic|\"}} из переменной {{ic|Key}}.}}
  
== Tips and tricks ==
+
== Советы и рекомендации ==
  
=== Using an Experimental GUI ===
+
=== Экспериментальный графический интерфейс ===
  
If you want a graphical user interface to manage netctl and your connections and you are not afraid of highly experimental unofficial packages you can install {{AUR|netgui}} from [[AUR]]. Note, however, that netgui is still in beta status and you should be familiar with the general netctl syntax to debug possible issues.
+
Вы можете попробовать работать с netctl используя экспериментальный графический интерфейс, доступный {{AUR|netgui}} из [[AUR (Русский)|AUR]]. Учтите, что netgui все еще находится в разработке и вам следует также быть знакомым со структурой и содержимым конфигурационных файлов netctl чтобы иметь возможность самостоятельно устранять возможные неполадки.
  
=== Set default dhcp client for all profiles ===
+
=== Установка DHCP-клиента для всех профилей ===
  
If you want to set a default dhcp client for all profiles on an interface, create an ''executable'' file {{ic|/etc/netctl/interfaces/<interface>}} with the following line:
+
Если вы хотите установить DHCP-клиент, используемый по-умолчанию для всех профилей сетевого интерфейса, создайте исполняемый файл {{ic|/etc/netctl/interfaces/''interface_name''}} с такой строкой:
  
  DHCPClient='dhclient'
+
  DHCPClient=&apos;''your_dhcp_client''&apos;
  
=== Replace 'netcfg current' ===
+
Где ''your_dhcp_client'' – название вашей программы-клиента, например ''dhclient'' или ''dhcpcd''.
  
If you used {{ic|netcfg current}} in the past, you can use {{ic|# netctl-auto current}} as a replacement for connections started with {{ic|netctl-auto}} (feature since netctl-1.3).
+
=== Замена 'netcfg current' ===
  
To manually parse the connections, you can also use:
+
Если в недавнем прошлом вы использовали {{ic|netcfg current}}, то теперь можете использовать {{ic|# netctl-auto current}} в качестве замены для профилей, начинающихся с {{ic|netctl-auto}} (доступно с версии netctl 1.3).
 +
 
 +
Чтобы получить имена всех доступных профилей, используйте команду
  
 
  # netctl list | awk '/*/ {print $2}'
 
  # netctl list | awk '/*/ {print $2}'
Line 191: Line 190:
 
=== Eduroam ===
 
=== Eduroam ===
  
Some universities use a system called "Eduroam" to manage their wireless networks. For this system, a WPA config-section profile with the following format is often useful:
+
Некоторые университеты используют систему [[Wikipedia:ru:Eduroam|Eduroam]] для управления беспроводной сетью. Для подключения к такой сети может быть полезен следующий файл конфигурации:
  
{{hc|/etc/netctl/wlan0-eduroam|<nowiki>
+
{{hc|/etc/netctl/wlp8s0-eduroam|<nowiki>
 
Description='Eduroam-profile for <user>'
 
Description='Eduroam-profile for <user>'
Interface=wlan0
+
Interface=wlp8s0
 
Connection=wireless
 
Connection=wireless
 
Security=wpa-configsection
 
Security=wpa-configsection
Line 201: Line 200:
 
WPAConfigSection=(
 
WPAConfigSection=(
 
  'ssid="eduroam"'
 
  'ssid="eduroam"'
  'proto=RSN WPA'
+
  'proto=RSN'
 
  'key_mgmt=WPA-EAP'
 
  'key_mgmt=WPA-EAP'
 +
'pairwise=CCMP'
 
  'auth_alg=OPEN'
 
  'auth_alg=OPEN'
 
  'eap=PEAP'
 
  'eap=PEAP'
Line 210: Line 210:
 
}}
 
}}
  
{{Tip|To prevent storing your password as plaintext, you can generate a password hash with {{ic|$ tr -d '[:space:]' &#124; iconv -t utf16le &#124; openssl md4}}. Type your password, enter, then ctrl+d. Store the hashed password as {{ic|'password&#61;hash:<hash>'}}.}}
+
{{Tip (Русский)|Чтобы избежать хранения пароля в открытом виде, вы можете сгенерировать на его основе хеш с помощью команды {{ic|$ tr -d '[:space:]' &#124; iconv -t utf16le &#124; openssl md4}}. Введите ваш пароль, нажмите enter, затем ctrl+d. Сохраните хеш как {{ic|'password&#61;hash:''your_hash'''}}.}}
  
For TTLS and certified universities this setup works:
+
Этот пример может быть полезен в случае использования сертификатов и TTLS:
  
{{hc|/etc/netctl/wlan0-eduroam|<nowiki>
+
{{hc|/etc/netctl/wlp8s0-eduroam|<nowiki>
 
Description='Eduroam university'
 
Description='Eduroam university'
Interface=wlan0
+
Interface=wlp8s0
 
Connection=wireless
 
Connection=wireless
 
Security=wpa-configsection
 
Security=wpa-configsection
Line 235: Line 235:
 
}}
 
}}
  
=== Bonding ===
 
  
From [https://www.kernel.org/doc/Documentation/networking/bonding.txt kernel documentation]:
+
=== Объединение сетевых интерфейсов (бондинг) ===
 +
 
 +
Из [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации ядра Linux]:
  
 
:''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.''
 
:''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.''
  
==== Load balancing ====
+
перевод:
 +
 
 +
:''Объединение сетевых интерфейсов в Linux можно осуществить с помощью драйвера бондинга, он предоставляет методы для сопряжения нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (для отказоустойчивости) или в режиме балансировки нагрузки.''
 +
 
 +
==== Балансировка нагрузки ====
  
To use bonding with netctl, additional package from official repositories is required: {{Pkg|ifenslave}}.
+
Для использования бондинга с netctl потребуется пакет {{Pkg|ifenslave}}.
  
Copy {{ic|/etc/netctl/examples/bonding}} to {{ic|/etc/netctl/bonding}} and edit it, for example:  
+
Скопируйте {{ic|/etc/netctl/examples/bonding}} в {{ic|/etc/netctl/bonding}} и отредактируйте его. Например:  
  
 
{{hc|/etc/netctl/bonding|2=
 
{{hc|/etc/netctl/bonding|2=
Line 251: Line 256:
 
Interface='bond0'
 
Interface='bond0'
 
Connection=bond
 
Connection=bond
BindsToInterfaces=('eth0' 'eth1')
+
BindsToInterfaces=('enp7s0' 'wlp8s0')
 
IP=dhcp
 
IP=dhcp
 
IP6=stateless}}
 
IP6=stateless}}
  
Now you can disable your old configuration and set ''bonding'' to be started automatically. Switch to the new profile, for example:
+
Теперь можно отменить старые настройки и установить запуск бондинга по умолчанию. Переключитесь на новый профиль:
  
 
  # netctl switch-to bonding
 
  # netctl switch-to bonding
  
{{Note|This uses the round-robin policy, which is the default for the {{ic|bonding}} driver. See [https://www.kernel.org/doc/Documentation/networking/bonding.txt official documentation] for details.}}
+
{{Note (Русский)|По-умолчанию для двайвера бондинга используется политика цикличности (''the round-robin policy''). Что это значит, можно узнать в [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации].}}
  
{{Tip|To check the status and bonding mode: {{bc|$ cat /proc/net/bonding/bond0}}}}
+
{{Tip (Русский)|Чтобы проверить статус режима бондинга, выполните: {{bc|$ cat /proc/net/bonding/bond0}}.}}
  
==== Wired to wireless failover ====
+
==== Подключение к беспроводной сети при отказе проводной ====
  
This example describes how to use ''bonding'' to fallback to wireless when the wired ethernet goes down. It is assumed that ''dhcpcd'' service is running for all interfaces as by default.
+
Этот пример демонстрирует, как можно использовать бондинг, чтобы прозрачно переключиться на беспроводную сеть при разрыве проводного соединения. Предполагается, что dhcpcd запущен для работы на всех интерфейсах компьютера.
  
You will need additional packages from the official repositories: <s>{{Pkg|ifplugd}}</s>, {{Pkg|ifenslave}} and {{Pkg|wpa_supplicant}}.
+
Потребуются дополнительные пакеты из официальных репозиториев: {{Pkg|ifplugd}}, {{Pkg|ifenslave}} и {{Pkg|wpa_supplicant}}.
  
First configure the {{ic|bonding}} driver to use {{ic|active-backup}}:
+
Сначала следует настроить драйвер бондинга для работы с {{ic|active-backup}}:
  
 
{{hc|/etc/modprobe.d/bonding.conf|2=
 
{{hc|/etc/modprobe.d/bonding.conf|2=
 
options bonding mode=active-backup
 
options bonding mode=active-backup
 
options bonding miimon=100
 
options bonding miimon=100
options bonding primary=eth0
+
options bonding primary=enp7s0
 
options bonding max_bonds=0
 
options bonding max_bonds=0
 
}}
 
}}
  
The {{ic|max_bonds}} option avoids the {{ic|Interface bond0 already exists}} error. {{ic|fail_over_mac<nowiki>=</nowiki>active}} setting may be added if MAC filtering is used.  
+
Опция {{ic|max_bonds}} предотвращает ошибку {{ic|Interface bond0 already exists}}.
  
Next, configure a netctl profile to enslave the two hardware interfaces:
+
Далее следует настроить профиль netctl для сопряжения двух ведомых апаратных интерфейсов с ведущим bond0:
  
 
{{hc|/etc/netctl/failover|2=
 
{{hc|/etc/netctl/failover|2=
Line 286: Line 291:
 
Interface='bond0'
 
Interface='bond0'
 
Connection=bond
 
Connection=bond
BindsToInterfaces=('eth0' 'wlan0')
+
BindsToInterfaces=('enp7s0' 'wlp8s0')
IP='dhcp'
+
IP='no'
 
SkipNoCarrier='no'
 
SkipNoCarrier='no'
 
}}
 
}}
  
Enable the profile on startup.
+
Активируйте профиль [[systemd|systemd (Русский)]]:
  
 
  # netctl enable failover
 
  # netctl enable failover
  
Configure ''wpa_supplicant'' to associate with known networks. This can be done with a netctl profile (remember to use {{ic|1=IP='no'}}) and a ''wpa_supplicant'' service running constantly, or on-demand with ''wpa_cli''. Ways to do this are covered on the [[wpa_supplicant]] page. To run ''wpa_supplicant'' constantly create ''wpa_supplicant'' config file {{ic|/etc/wpa_supplicant/wpa_supplicant-wlan0.conf}} and then run:
+
Настройте ''wpa_supplicant'' для подключения к беспроводной сети. Это можно сделать с помощью профиля netctl (не забудьте использовать опцию {{ic|1=IP='no'}}), настроить wpa_supplicant в режиме постоянной работы, либо работы по-требованию с помощью ''wpa_cli''. Способы того, как это сделать описаны на странице [[WPA Supplicant (Русский)]]. Чтобы запустить wpa_supplicant в режиме непрерывной работы создайте файл конфигурации {{ic|/etc/wpa_supplicant/wpa_supplicant-wlp8s0.conf}} и затем выполните:
 +
# systemctl enable wpa_supplicant@wlp8s0
  
# systemctl enable wpa_supplicant@wlan0
+
Задайте {{ic|1=IP='no'}} в профиле проводной сети. IP-адрес должен быть присвоен только интерфейсу {{ic|bond0}}.
  
Set {{ic|1=IP='no'}} in wired network profile. IP address should be assigned to ''bond0'' interface only.
+
Если у вас и беспроводное и проводное подключение принадлежат одной и той же сети, скорее всего, вы сможете отключать/перезапускать проводное подключение без разрыва соединения. В большинстве случаев, даже поточная передача музыки не будет прервана.
  
If you have a wired and wireless connection to the same network, you can probably now disconnect and reconnect the wired connection without losing connectivity. In most cases, even streaming music will not skip!
+
=== Использование любого сетевого интерфейса ===
  
=== Using any interface ===
+
В некоторых случаях может быть желательно, чтобы профиль мог использовать любой доступный сетевой интерфейс. Например, вы администрируете несколько компьютеров различной конфигурации, и для каждого используете одинаковый образ системного диска, чтобы избежать переустановки системы на каждом конкретном компьютере (особенно это удобно, если компьютеры не имеют своих устройств ввода/вывода). Если вы используете стандартную схему именования сетевых интерфейсов, и у компьютера только единственный сетевой адаптер, вы можете смело предположить, что eth0 — правильное имя интерфейса. Однако, если вы используете новую [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames схему именования] udev, устройствам будут присвоены имена, зависящие от их физического подключения на плате (например, enp1s0). Это значит, что профиль netctl содержащий точное название интерфейса, может работать на одном комьютере, и не работать на другом, в котором сетевое устройство названо иначе.
In some cases it may be desirable to allow a profile to use any interface on the system. A common example use case is using a common disk image across many machines with differing hardware (this is especially useful if they are headless). If you use the kernel's naming scheme, and your machine has only one ethernet interface, you can probably guess that eth0 is the right interface. If you use udev's [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ Predictable Network Interface Names], however, names will be assigned based on the specific hardware itself (e.g. enp1s0), rather than simply the order that the hardware was detected (e.g. eth0, eth1). This means that a netctl profile may work on one machine and not another, because they each have different interface names.
+
 
 +
Быстрое и «грязное» решение заключается в использовании каталога {{ic|/etc/netctl/interfaces/}}. Выберите псевдоним (alias) для сетевого интерфейса ({{ic|en-any}} в этом примере), и создайте следующий файл:
  
A quick and dirty solution is to make use of the {{ic|/etc/netctl/interfaces/}} directory. Choose a name for your interface alias ({{ic|en-any}} in this example), and write the following to a file with that name (making sure it is executable).
 
 
{{hc|/etc/netctl/interfaces/en-any|<nowiki>
 
{{hc|/etc/netctl/interfaces/en-any|<nowiki>
 
#!/bin/bash
 
#!/bin/bash
Line 315: Line 321:
 
echo "en-any: using interface $Interface";
 
echo "en-any: using interface $Interface";
 
</nowiki>}}
 
</nowiki>}}
Then create a profile that uses the interface. Pay special attention to the {{ic|Interfaces}} directive. The rest are only provided as examples.
+
 
 +
Не забудьте дать файлу права на выполнение.
 +
 
 +
Теперь создайте профиль, который будет использовать этот интерфейс. Укажите псевдоним интерфейса в параметре {{ic|Interface}}. Пример:
 +
 
 
{{hc|/etc/netctl/wired|<nowiki>
 
{{hc|/etc/netctl/wired|<nowiki>
 
Description='Wired'
 
Description='Wired'
Line 326: Line 336:
 
</nowiki>}}
 
</nowiki>}}
  
When the {{ic|wired}} profile is started, any machine using the two files above will automatically bring up and configure the first ethernet interface found on the system, regardless of what name udev assigned to it. Note that this is not the most robust way to go about configuring interfaces. If you use multiple interfaces, netctl may try to assign the same interface to them, and will likely cause a disruption in connectivity. If you do not mind a more complicated solution, {{ic|netctl-auto}} is likely to be more reliable.
+
Теперь, когда профиль {{ic|wired}} будет запущен, любой компьютер использующий эти файлы конфигурации автоматически установит соединение, используя сетевой интерфейс, найденный первым при загрузке системы, в не зависимости от того, какое ему имя даст udev. Учтите, что это не самый надежный способ: если в компьютере несколько интерфейсов, netctl может попытаться присвоить им одинаковое имя, что приведет к неработоспособности соединения. Использование ''netctl-auto'' может стать несколько более надежным решением.
  
== Troubleshooting ==
+
== Решение проблем ==
  
=== Job for netctl@wlan(...).service failed ===
+
=== Job for netctl@XXX.service failed ===
Some people have an issue when they connect to a network with netctl, e.g.
+
 
{{hc|# netctl start wlan0-ssid|<nowiki>
+
Иногда возникают проблемы с подключением к беспроводной сети с использованием netctl, сопровождаемые следующим сообщением:
Job for netctl@wlan0\x2ssid.service failed. See 'systemctl status netctl@wlan0\x2ssid.service' and 'journalctl -xn' for details.
+
{{hc|# netctl start wlp8s0-ssid|<nowiki>
 +
Job for netctl@wlp8s0\x2ssid.service failed. See 'systemctl status netctl@wlp8s0\x2ssid.service' and 'journalctl -xn' for details.
 
</nowiki>}}
 
</nowiki>}}
When then looking at journalctl -xn, either of the following are shown:
 
  
If your device (wlan0 in this case) is up:
+
При этом, если сетевой интерфейс (в нашем примере wlp8s0) уже был запущен, в выводе {{ic|journalctl -xn}} наблюдается следующее:
  network[2322]: The interface of network profile 'wlan0-ssid' is already up
+
 
If it is down:
+
  network[2322]: The interface of network profile 'wlp8s0-ssid' is already up
  dhcpcd[261]: wlan0: ipv4_sendrawpacket: Network is down
+
 
 +
А если сетевой интерфейс был остановлен, то:
 +
 
 +
  dhcpcd[261]: wlp8s0: ipv4_sendrawpacket: Network is down
 +
 
 +
Один из способов это исправить — использовать другой DHCP-клиент, и позволить профилю использовать его. Пример с dhclient:
  
One way to solve this is to use a different dhcp-client, and getting your netctl profile to use it.
 
 
  # pacman -S dhclient
 
  # pacman -S dhclient
  # vim /etc/netctl/wlan0-ssid
+
  # nano /etc/netctl/wlp8s0-ssid
  
{{hc|/etc/netctl/wlan0-ssid|<nowiki>
+
{{hc|/etc/netctl/wlp8s0-ssid|<nowiki>
 
...
 
...
 
DHCPClient='dhclient'
 
DHCPClient='dhclient'
 
</nowiki>}}
 
</nowiki>}}
  
Save it and try to connect with the profile:
+
Добавление опции {{ic|1=ForceConnect=yes}} также может помочь:
  # netctl start wlan0-ssid
+
 
Now it should work!
+
{{hc|/etc/netctl/wlp8s0-ssid|<nowiki>
 +
...
 +
ForceConnect=yes
 +
</nowiki>}}
 +
 
 +
Проверка:
 +
 
 +
  # netctl start wlp8s0-ssid
 +
 
 +
Теперь все должно заработать.
  
 
=== dhcpcd: ipv4_addroute: File exists ===
 
=== dhcpcd: ipv4_addroute: File exists ===
  
On some systems dhcpcd in combination with netctl causes timeout issues on resume, particularly when having swichted networks in the meantime. netctl will report that you are successfully connected but you still receive timeout issues. In this case, the old default route still exists and is not being renewed. A workaround to avoid this misbehaviour is to switch to [[#Set default dhcp client for all profiles|dhclient]] as the default dhcp client. More information on the issue can be found [https://bbs.archlinux.org/viewtopic.php?pid=1399842#p1399842 here].
+
Иногда использование ''dhcpcd'' с netctl вызывает проблемы с переподключением: netctl сообщает об успешном подключении, но вы все еще получаете ошибки тайм-аута при соединении. В этом случае, прежний маршрут по-умолчанию (default route) все еще остается в системе и не обновляется. Решение состоит в том, чтобы использовать [[#Установка DHCP-клиента для всех профилей|dhclient]] в качестве DHCP-клиента. Больше информации о проблеме вы сможете найти [https://bbs.archlinux.org/viewtopic.php?pid=1399842#p1399842 здесь (англ.)].
  
=== DHCP timeout issues ===
+
=== Таймаут при DHCP-подключении ===
  
If you are having timeout issues when requesting leases via DHCP you can set the timeout value higher than netctl's 30 seconds by default. Create a file in {{ic|/etc/netctl/hooks/}} or {{ic|/etc/netctl/interfaces/}}, add {{ic|1=TimeoutDHCP=40}} to it for a timeout of 40 seconds and make the file executable.
+
Если вы получаете сообщения о тайм-ауте при попытке подключения через DHCP, вы можете увеличить время таймаута, используя значение выше 30 секунд, установленных в netctl по-умолчанию. Создайте файл в каталоге {{ic|/etc/netctl/hooks/}} или {{ic|/etc/netctl/interfaces/}}, добавьте в него строку {{ic|1=TimeoutDHCP=40}}, где 40 — время тайм-аута. Не забудьте выдать файлу права на запуск.
  
=== Connection timeout issues ===
+
=== Тайм-аут соединения ===
  
If you are having timeout issues that are unrelated to DHCP (on a static ethernet connection for example), and are experiencing errors similar to the following when starting your profile:
+
При проблемах с тайм-аутом, не связанных с DHCP (например, если у вас статический IP), если наблюдаемые ошибки похожи на следующие при запуске профиля:
{{hc|# journalctl _SYSTEMD_UNIT&#61;netctl@''profile''.service|
+
 
 +
{{hc|# journalctl _SYSTEMD_UNIT&#61;netctl@''имя_профиля''.service|
 
Starting network profile &#39;''profile''&#39;...
 
Starting network profile &#39;''profile''&#39;...
No connection found on interface 'eth0' (timeout)
+
No connection found on interface 'enp4s0' (timeout)
 
Failed to bring the network up for profile &#39;''profile''&#39;
 
Failed to bring the network up for profile &#39;''profile''&#39;
 
}}
 
}}
Then you should increase carrier and up timeouts by adding {{ic|1=TimeoutUp=}} and {{ic|1=TimeoutCarrier=}} to your profile file:
+
 
{{hc|/etc/netctl/''profile''|<nowiki>
+
Попробуйте увеличить значения тайм-аутов соединения в вашем файле профиля:
 +
{{hc|/etc/netctl/''имя_профиля''|<nowiki>
 
...
 
...
 
TimeoutUp=300
 
TimeoutUp=300
 
TimeoutCarrier=300</nowiki>
 
TimeoutCarrier=300</nowiki>
 
}}
 
}}
Do not forget to reenable your profile:
+
Не забудьте заново активировать ваш профиль:
  
  # netctl reenable ''profile''
+
  # netctl reenable ''имя_профиля''
  
== See also ==
+
== Смотрите также ==
  
* [https://bbs.archlinux.org/viewtopic.php?id=157670 Official announcement thread]
+
* [https://bbs.archlinux.org/viewtopic.php?id=157670 Анонс и официальная страница обсуждения]
* There is a cinnamon applet available in the AUR: {{AUR|cinnamon-applet-netctl-systray-menu}}
+
* Апплет для Cinnamon в {{AUR|cinnamon-applet-netctl-systray-menu}}

Revision as of 20:06, 17 July 2014

netctl — это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это один из проектов Arch Linux, призванный заменить устаревшую утилиту netcfg.

Установка

Tango-view-fullscreen.pngЭта статья или раздел нуждается в расширенииTango-view-fullscreen.png

Причина: Следует упомянуть о дополнительных зависимостях. (обсуждение: Talk:Netctl#)

Пакет netctl доступен в официальных репозиториях. Установка netctl заменит netcfgAUR (netctl и netcfgAUR — конфликтующие пакеты). Есть вероятность потери сетевого соединения после установки netctl, если ваши профили некорректно настроены с точки зрения netctl.

Примечание: Чтобы убедиться, что не запущены другие службы настройки сети, стоит выполнить systemctl --type=service. Разные сетевые службы будут конфликтовать.

Рекомендуется к прочтению

Перед началом использования netctl желательно прочитать следующие страницы:

Настройка

Для управления сетевыми соединениями netctl использует профили, файлы которых расположены в /etc/netctl/. В /etc/netctl/examples/ можно найти примеры типовых конфигураций:

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

Вы можете использовать любой файл из предоставленных примеров как основу для своей конфигурации, для этого просто скопируйте один из них в /etc/netctl/ и отредактируйте необходимым образом:

# cp /etc/netctl/examples/wireless-wpa /etc/netctl/имя_профиля
Примечание: Скорее всего, вам будет необходимо изменить имя сетевого интерфейса в профиле. Начиная с версии 197, udev больше не присваивает интерфейсам имена стандартного вида wlanX и ethX. Теперь устройствам присваиваются имена вида enXXXXX (адаптеры Ethernet), wlXXXXX (беспроводные адаптеры), которые могу изменяться в зависимости от места их физического подключения. Используйте команду ip link чтобы узнать имена сетевых интерфейсов в вашей системе.
Совет: Для автоматического создания профиля беспроводного соединения в /etc/netctl/ воспользуйтесь командой wifi-menu -o.

Как только вы создали профиль, попробуйте установить соединение:

# netctl start имя_профиля
Примечание: Здесь имя_профиля — это имя файла профиля. Указание полного пути к файлу является ошибкой.

Если в результате выполнения команды было выведено сообщение об ошибке, выполните journalctl -xn и netctl status имя_профиля для выяснения ее причины. Произведите необходимую корректировку конфигурации и повторите попытку.

Автоматизация

Если используется только один профиль на один интерфейс или вы хотите переключать профили вручную, то подойдет основной метод — пользователям серверов, рабочих станций, роутеров и т. п.

Если требуется часто переключаться между несколькими профилями, используйте автоматическое переключение профилей — будет полезно пользователям ноутбуков.

Основной метод

Этот метод создаст и активирует службу systemd, который будет запускаться при загрузке системы. Изменения в файле профиля не будут отражаться в файле конфигурации службы автоматически, поэтому, после внесения изменений в файл, необходимо вновь активировать профиль командой:

# netctl enable имя_профиля
Примечание: Соединение будет установлено только в том случае, если профиль может быть успешно запущен во время загрузки системы (во время запуска службы). Это значит, что во время загрузки сетевой кабель должен быть подключен, а беспроводная сеть доступна.
Совет: Вы можете запускать профиль Ethetnet со статическим IP независимо от того, подключен кабель или нет. Для этого добавьте SkipNoCarrier=yes в файл конфигурации профиля.

Автоматическое переключение профилей

Для автоматического переключения профилей netctl предоставляет две специальных службы systemd:

  • Для проводных соединений: netctl-ifplugd@interface.service. Сервис автоматически изменяет профиль при подключении и отключении кабеля.
  • Для беспроводных соединений: netctl-auto@interface.service. Сервис автоматически изменяет профиль при переходе из диапазона одной сети в диапазон другой.

Сначала установите необходимые пакеты:

  • Пакет wpa_actiond требуется для использования netctl-auto@interface.service
  • Пакет ifplugd требуется для использования netctl-ifplugd@interface.service
Примечание: netcfg использовал net-auto-wireless.service и net-auto-wired.service для этих целей.

Теперь настройте профили, которые должны будут запускаться с помощью netctl-auto@interface.service и netctl-ifplugd@interface.service.

Если вы хотите, чтобы какой-то из беспроводных профилей не запускался автоматически службой netctl-auto@interface.service, то вам следует явно указать это в файле профиля, добавив в него ExcludeAuto=yes.

В случае нескольких беспроводных профилей, вы также можете установить приоритет запуска каждого, указав его в параметре Priority=[0-9] секции WPAConfigSection (см. пример в /etc/netctl/examples/wireless-wpa-configsection. По-умолчанию, netctl-ifplugd@interface.service первым предпочтет профиль, который использует DHCP. Для того, чтобы сначала был запущен профиль, использующий статический IP, можно использовать опцию AutoWired=yes. Подробную информацию смотрите в netctl.profile(5).

Важно: С опцией Security=wpa-config невозможно автоматическое подключение к WPA профилю средствами netctl-auto. Вместо этого используйте Security=wpa-configsection.

После того, как все профили настроены, активируйте нужные вам службы:

# systemctl enable netctl-auto@interface.service 
# systemctl enable netctl-ifplugd@interface.service
Важно:
  • Если один из профилей содержит ошибки, например пустую переменную Key=, юнит systemd не сможет запуститься при загрузке даже если профиль с ошибкой не был активирован.
  • Этот метод несовместим с основным методом. Если вы ранее активировали профиль через netctl запустите netctl disable имя_профиля, чтобы предотвратить запуск профиля дважды при загрузке.

Начиная с версии netctl 1.3, стало возможным вручную управлять сетевым интерфейсом, контролируемым службой 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) (в основном, необходимо привести переменные к регистру UpperCamelCase. Например CONNECTION нужно переименовать в Connection).
  • Убедитесь, что в переменной Address профиля со статическим IP прописана маска подсети после IP адреса (например: Address=('192.168.1.23/24' '192.168.1.87/24'))
  • Если вы настраивали беспроводное соединение по образцу wireless-wpa-configsection, обратите внимание, что это перезапишет опции wpa_supplicant, определенные выше скобок. Для подключения к скрытой беспроводной сети добавьте scan_ssid=1 к опциям в wireless-wpa-configsection; Hidden=yes больше не действует.
  • На ваше усмотрение можно убрать кавычки вокруг переменных, для которых кавычки не обязательны.
  • Выполните netctl enable имя_профиля для каждого профиля в старом массиве NETWORKS. Специальная опция last больше не нужна, смотрите описание netctl.service в netctl.special(7).
  • Вместо netcfg-menu используйте netctl list и netctl start имя_профиля. wifi-menu остался доступным.
  • В отличие от netcfg, по-умолчанию netctl не устанавливает логическое соединение на интерфейсе, если сетевая плата, не подключена к другой работающей плате. Чтобы это исправить, добавьте SkipNoCarrier=yes в конец вашего файла /etc/netctl/имя_профиля.

Хеширование пароля (256-битный Pre-Shared Key)

Примечание: Этот метод позволяет зашифровать пароль в файле конфигурации беспроводной сети так, чтобы скрыть его от прочтения посторонними. Однако, это не защищает от использования вашего файла с зашифрованной версией пароля посторонним пользователем с правами на его чтение для подключения к сети.

У пользователей, не желающих, чтобы их пароль хранился в открытом виде, есть возможность использовать 256-битный хеш, вычисляемый на основе пароля и SSID сети стандартными алгоритмами. Реализовать хеширование пароля можно двумя способами:

  • Для генерации нужных настроек в /etc/netctl/ использовать wifi-menu -o.
  • Ручная настройка, описанная ниже.

Какой бы метод вы не выбрали, для ограничения доступа к паролю следует установить нужные права на файл профиля:

# chmod 600 /etc/netctl/имя_профиля

Вычислите хеш с помощью wpa_passphrase:

$ 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, добавив в переменную Key ключ, сгенерированный ранее с помощью wpa_passphrase.

В итоге профиль 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
Примечание:
  • Убедитесь, что корректно использованы специальные правила расстановки кавычек (special quoting rules) для переменной Key, которые описаны в конце netctl.profile(5).
  • Если пароль не проходит проверку, попробуйте удалить \" из переменной Key.

Советы и рекомендации

Экспериментальный графический интерфейс

Вы можете попробовать работать с netctl используя экспериментальный графический интерфейс, доступный netguiAUR из AUR. Учтите, что netgui все еще находится в разработке и вам следует также быть знакомым со структурой и содержимым конфигурационных файлов netctl чтобы иметь возможность самостоятельно устранять возможные неполадки.

Установка DHCP-клиента для всех профилей

Если вы хотите установить DHCP-клиент, используемый по-умолчанию для всех профилей сетевого интерфейса, создайте исполняемый файл /etc/netctl/interfaces/interface_name с такой строкой:

DHCPClient='your_dhcp_client'

Где your_dhcp_client – название вашей программы-клиента, например dhclient или dhcpcd.

Замена 'netcfg current'

Если в недавнем прошлом вы использовали netcfg current, то теперь можете использовать # netctl-auto current в качестве замены для профилей, начинающихся с netctl-auto (доступно с версии netctl 1.3).

Чтобы получить имена всех доступных профилей, используйте команду

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

Eduroam

Некоторые университеты используют систему Eduroam для управления беспроводной сетью. Для подключения к такой сети может быть полезен следующий файл конфигурации:

/etc/netctl/wlp8s0-eduroam
Description='Eduroam-profile for <user>'
Interface=wlp8s0
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>"'
)
Совет: Чтобы избежать хранения пароля в открытом виде, вы можете сгенерировать на его основе хеш с помощью команды $ tr -d '[:space:]' | iconv -t utf16le | openssl md4. Введите ваш пароль, нажмите enter, затем ctrl+d. Сохраните хеш как 'password=hash:your_hash'.

Этот пример может быть полезен в случае использования сертификатов и TTLS:

/etc/netctl/wlp8s0-eduroam
Description='Eduroam university'
Interface=wlp8s0 
Connection=wireless
Security=wpa-configsection
IP=dhcp
ESSID=eduroam
WPAConfigSection=(
    'ssid="eduroam"'
    'proto=RSN WPA'
    'key_mgmt=WPA-EAP'
    'eap=TTLS'
    'anonymous_identity="anonymous@domain_university"'
    'identity="XXX@domain_university"'
    'password="XXX"'
    'ca_path="/etc/ssl/certs/"'
    'ca_path2="/etc/ssl/certs/"'
    'phase2="auth=PAP"'
)


Объединение сетевых интерфейсов (бондинг)

Из документации ядра Linux:

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 можно осуществить с помощью драйвера бондинга, он предоставляет методы для сопряжения нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (для отказоустойчивости) или в режиме балансировки нагрузки.

Балансировка нагрузки

Для использования бондинга с netctl потребуется пакет ifenslave.

Скопируйте /etc/netctl/examples/bonding в /etc/netctl/bonding и отредактируйте его. Например:

/etc/netctl/bonding
Description='Bond Interface'
Interface='bond0'
Connection=bond
BindsToInterfaces=('enp7s0' 'wlp8s0')
IP=dhcp
IP6=stateless

Теперь можно отменить старые настройки и установить запуск бондинга по умолчанию. Переключитесь на новый профиль:

# netctl switch-to bonding
Примечание: По-умолчанию для двайвера бондинга используется политика цикличности (the round-robin policy). Что это значит, можно узнать в документации.
Совет: Чтобы проверить статус режима бондинга, выполните:
$ cat /proc/net/bonding/bond0
.

Подключение к беспроводной сети при отказе проводной

Этот пример демонстрирует, как можно использовать бондинг, чтобы прозрачно переключиться на беспроводную сеть при разрыве проводного соединения. Предполагается, что dhcpcd запущен для работы на всех интерфейсах компьютера.

Потребуются дополнительные пакеты из официальных репозиториев: ifplugd, ifenslave и wpa_supplicant.

Сначала следует настроить драйвер бондинга для работы с active-backup:

/etc/modprobe.d/bonding.conf
options bonding mode=active-backup
options bonding miimon=100
options bonding primary=enp7s0
options bonding max_bonds=0

Опция max_bonds предотвращает ошибку Interface bond0 already exists.

Далее следует настроить профиль netctl для сопряжения двух ведомых апаратных интерфейсов с ведущим bond0:

/etc/netctl/failover
Description='A wired connection with failover to wireless'
Interface='bond0'
Connection=bond
BindsToInterfaces=('enp7s0' 'wlp8s0')
IP='no'
SkipNoCarrier='no'

Активируйте профиль systemd (Русский):

# netctl enable failover

Настройте wpa_supplicant для подключения к беспроводной сети. Это можно сделать с помощью профиля netctl (не забудьте использовать опцию IP='no'), настроить wpa_supplicant в режиме постоянной работы, либо работы по-требованию с помощью wpa_cli. Способы того, как это сделать описаны на странице WPA Supplicant (Русский). Чтобы запустить wpa_supplicant в режиме непрерывной работы создайте файл конфигурации /etc/wpa_supplicant/wpa_supplicant-wlp8s0.conf и затем выполните:

# systemctl enable wpa_supplicant@wlp8s0

Задайте IP='no' в профиле проводной сети. IP-адрес должен быть присвоен только интерфейсу bond0.

Если у вас и беспроводное и проводное подключение принадлежат одной и той же сети, скорее всего, вы сможете отключать/перезапускать проводное подключение без разрыва соединения. В большинстве случаев, даже поточная передача музыки не будет прервана.

Использование любого сетевого интерфейса

В некоторых случаях может быть желательно, чтобы профиль мог использовать любой доступный сетевой интерфейс. Например, вы администрируете несколько компьютеров различной конфигурации, и для каждого используете одинаковый образ системного диска, чтобы избежать переустановки системы на каждом конкретном компьютере (особенно это удобно, если компьютеры не имеют своих устройств ввода/вывода). Если вы используете стандартную схему именования сетевых интерфейсов, и у компьютера только единственный сетевой адаптер, вы можете смело предположить, что eth0 — правильное имя интерфейса. Однако, если вы используете новую схему именования udev, устройствам будут присвоены имена, зависящие от их физического подключения на плате (например, enp1s0). Это значит, что профиль netctl содержащий точное название интерфейса, может работать на одном комьютере, и не работать на другом, в котором сетевое устройство названо иначе.

Быстрое и «грязное» решение заключается в использовании каталога /etc/netctl/interfaces/. Выберите псевдоним (alias) для сетевого интерфейса (en-any в этом примере), и создайте следующий файл:

/etc/netctl/interfaces/en-any
#!/bin/bash
for interface in /sys/class/net/en*; do
        break;
done
Interface=$(basename $interface)
echo "en-any: using interface $Interface";

Не забудьте дать файлу права на выполнение.

Теперь создайте профиль, который будет использовать этот интерфейс. Укажите псевдоним интерфейса в параметре Interface. Пример:

/etc/netctl/wired
Description='Wired'
Interface=en-any
Connection=ethernet
IP=static
Address=('192.168.1.15/24')
Gateway='192.168.1.1'
DNS=('192.168.1.1')

Теперь, когда профиль wired будет запущен, любой компьютер использующий эти файлы конфигурации автоматически установит соединение, используя сетевой интерфейс, найденный первым при загрузке системы, в не зависимости от того, какое ему имя даст udev. Учтите, что это не самый надежный способ: если в компьютере несколько интерфейсов, netctl может попытаться присвоить им одинаковое имя, что приведет к неработоспособности соединения. Использование netctl-auto может стать несколько более надежным решением.

Решение проблем

Job for netctl@XXX.service failed

Иногда возникают проблемы с подключением к беспроводной сети с использованием netctl, сопровождаемые следующим сообщением:

# netctl start wlp8s0-ssid
Job for netctl@wlp8s0\x2ssid.service failed. See 'systemctl status netctl@wlp8s0\x2ssid.service' and 'journalctl -xn' for details.

При этом, если сетевой интерфейс (в нашем примере wlp8s0) уже был запущен, в выводе journalctl -xn наблюдается следующее:

network[2322]: The interface of network profile 'wlp8s0-ssid' is already up

А если сетевой интерфейс был остановлен, то:

dhcpcd[261]: wlp8s0: ipv4_sendrawpacket: Network is down

Один из способов это исправить — использовать другой DHCP-клиент, и позволить профилю использовать его. Пример с dhclient:

# pacman -S dhclient
# nano /etc/netctl/wlp8s0-ssid
/etc/netctl/wlp8s0-ssid
...
DHCPClient='dhclient'

Добавление опции ForceConnect=yes также может помочь:

/etc/netctl/wlp8s0-ssid
...
ForceConnect=yes

Проверка:

# netctl start wlp8s0-ssid

Теперь все должно заработать.

dhcpcd: ipv4_addroute: File exists

Иногда использование dhcpcd с netctl вызывает проблемы с переподключением: netctl сообщает об успешном подключении, но вы все еще получаете ошибки тайм-аута при соединении. В этом случае, прежний маршрут по-умолчанию (default route) все еще остается в системе и не обновляется. Решение состоит в том, чтобы использовать dhclient в качестве DHCP-клиента. Больше информации о проблеме вы сможете найти здесь (англ.).

Таймаут при DHCP-подключении

Если вы получаете сообщения о тайм-ауте при попытке подключения через DHCP, вы можете увеличить время таймаута, используя значение выше 30 секунд, установленных в netctl по-умолчанию. Создайте файл в каталоге /etc/netctl/hooks/ или /etc/netctl/interfaces/, добавьте в него строку TimeoutDHCP=40, где 40 — время тайм-аута. Не забудьте выдать файлу права на запуск.

Тайм-аут соединения

При проблемах с тайм-аутом, не связанных с DHCP (например, если у вас статический IP), если наблюдаемые ошибки похожи на следующие при запуске профиля:

# journalctl _SYSTEMD_UNIT=netctl@имя_профиля.service
Starting network profile 'profile'...
No connection found on interface 'enp4s0' (timeout)
Failed to bring the network up for profile 'profile'

Попробуйте увеличить значения тайм-аутов соединения в вашем файле профиля:

/etc/netctl/имя_профиля
...
TimeoutUp=300
TimeoutCarrier=300

Не забудьте заново активировать ваш профиль:

# netctl reenable имя_профиля

Смотрите также