Difference between revisions of "Netctl (Русский)"

From ArchWiki
Jump to: navigation, search
m (Fix category. See Help:Category.)
(flagged broken section links)
(Tag: wiki-scripts)
 
(117 intermediate revisions by 10 users not shown)
Line 1: Line 1:
 
{{Lowercase title}}
 
{{Lowercase title}}
 +
[[Category:Network configuration (Русский)]]
 
[[Category:Networking (Русский)]]
 
[[Category:Networking (Русский)]]
[[fr:Netctl]]
+
[[Category:Русский]]
 +
[[cs:Netctl]]
 +
[[en:Netctl]]
 
[[es:Netctl]]
 
[[es:Netctl]]
[[ru:Netctl]]
+
[[fr:Netctl]]
 +
[[it:Netcfg]]
 +
[[ja:Netctl]]
 
[[zh-CN:Netctl]]
 
[[zh-CN:Netctl]]
{{Article summary start}}
+
{{Unmaintained (Русский)}}
{{Article summary text|Руководство по настройке сети с помощью netctl и скриптам сетевых профилей.}}
+
{{Article summary end}}
+
Netctl is a new Arch project that replaces [[netcfg]]. Netctl is the future (and present) of CLI-based network management on Arch Linux.
+
  
==Установка==
+
''netctl'' — это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это нативный проект Arch Linux для настройки сети.
The {{Pkg|netctl}} package is available in the [[Official Repositories]]. Installing netctl will replace {{pkg|netcfg}}.
+
  
==Required reading==
+
== Установка ==
Considerable effort has gone into the construction of quality man pages.  Users should read the following man pages prior to 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]
+
  
{{Pkg|netctl}} and {{Pkg|netcfg}} are conflicting packages. You will be potentially connectionless after installing {{Pkg|netctl}}, IF your profiles are misconfigured.
+
Установите пакет {{Pkg|netctl}}, доступный в [[Official repositories (Русский)|официальных репозиториях]].
  
==Настройка==
+
Опциональные зависимости перечислены в таблице ниже.
  
{{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:
+
{| class="wikitable"
*ethernet-dhcp
+
! Функция
*ethernet-static
+
! Пакет
*wireless-wpa
+
! Программа netctl <br /> (если есть)
*wireless-wpa-static
+
|-
 +
| Автоматическое соединение с беспроводными сетями || {{Pkg|wpa_actiond}} || {{ic|netctl-auto}}
 +
|-
 +
| Автоматическое проводное содинение || {{Pkg|ifplugd}} || {{ic|netctl-ifplugd}}
 +
|-
 +
| WPA || {{Pkg|wpa_supplicant}} ||
 +
|-
 +
| DHCP || {{Pkg|dhcpcd}} или {{Pkg|dhclient}} ||
 +
|-
 +
| Wifi-меню || {{Pkg|dialog}} ||
 +
|-
 +
| PPPoE || {{Pkg|ppp}} ||
 +
|-
 +
|}
  
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:
+
{{Warning (Русский)|Вы можете потерять соединение после установки ''netctl'', если у вас запущена какая-нибудь другая служба, которая может конфликтовать с ''netctl''. Используйте команду {{ic|1=systemctl --type=service}} чтобы убедиться, что не запущены другие службы настройки сети.}}
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/
+
  
Once you have created your profile, make an attempt to establish a connection using the newly created profile by running:
+
== Использование ==
# 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.
+
Перед началом использования 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]
  
===Automatic Operation===
+
== Настройка ==
====Один профиль====
+
If you are using only one profile, once that profile is started successfully, it can be {{ic|enabled}} using
+
# netctl enable <profile>
+
This will create and enable a [[systemd]] service that will start when the computer boots.
+
  
====Несколько профилей====
+
Для управления сетевыми соединениями ''netctl'' использует профили, файлы которых расположены в {{ic|/etc/netctl}}. В {{ic|/etc/netctl/examples}} можно найти примеры типовых настроек:
Whereas with {{ic|netcfg}} there was {{ic|net-auto-wireless.service}} and {{ic|net-auto-wired.service}}, {{ic|netctl}} uses {{ic|netctl-auto@<interface>.service}} for wireless profiles, and {{ic|netctl-ifplugd@<interface>.service}} for wired profiles. In order to make the {{ic|netctl-auto@<interface>.service}} work for wireless interfaces, the package {{pkg|wpa_actiond}} is required to be installed. In order to make the {{ic|netctl-ifplugd@<interface>.service}} work for wired interfaces, the package {{pkg|ifplugd}} is required to be installed.  Configure {{ic|/etc/ifplugd/ifplugd.conf}} accordingly.
+
  
Once your profiles are set and verified to be working, simply enable these services with
+
* ethernet-dhcp
# systemctl enable netctl-auto@<interface>.service
+
* ethernet-static
# systemctl enable netctl-ifplugd@<interface>.service 
+
* wireless-wpa
 +
* wireless-wpa-static
  
If you have previously enabled a profile through {{ic|netctl}}, run
+
Вы можете использовать любой файл из предоставленных примеров как основу для своей конфигурации, для этого просто скопируйте файл в {{ic|/etc/netctl}} и отредактируйте необходимым образом:
# netctl disable <profile>
+
to prevent the profile from starting twice at boot, and possibly causing issues with wpa_supplicant.
+
  
{{Note|If there is ever a need to alter a currently enabled profile, execute {{ic|netctl reenable <profile>}} to apply the changes.}}
+
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/''имя_профиля''
  
===Переход с Netcfg===
+
{{Warning (Русский)|Начиная с версии 197, [[udev (Русский)|udev]] больше не присваивает интерфейсам имена стандартного вида {{ic|wlan''X''}} и {{ic|eth''X''}}, несмотря на то, что такие имена используются в примерах на этой странице. Смотрите [[Network configuration (Русский)#Имена устройств]] для получения подробной информации.}}
{{Warning|{{ic|netctl}} conflicts with {{ic|netcfg}} so disable existing {{ic|netcfg@<profile>}} service before installing {{ic|netctl}}.}}
+
  
{{ic|netctl}} uses {{ic|/etc/netctl}} to store its profiles, ''not'' {{ic|/etc/network.d}} ({{ic|netcfg}}'s profile storage location).
+
{{Tip (Русский)|Для автоматического создания профиля беспроводного соединения в {{ic|/etc/netctl}} воспользуйтесь командой {{ic|wifi-menu -o}} (запускать с правами суперпользователя).}}
  
In order to migrate from netcfg, at least the following is needed:
+
Как только вы создали профиль, попробуйте установить соединение:
*Move network profile files to the new directory.
+
*Rename variables therein according to netctl.profile(5) (Most variable names have only UpperCamelCase i.e CONNECTION= becomes Connection=).
+
*For static IP configuration make sure the Address= variables have a netmask after the IP (e.g. Address=('192.168.1.23<b>/24</b>' '192.168.1.87<b>/24</b>') 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|scan_ssid<nowiki>=1</nowiki>}} to the options in the {{ic|wireless-wpa-configsection}}; {{ic|Hidden<nowiki>=</nowiki>yes}} does not work there.
+
*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)===
+
# netctl start ''имя_профиля''
  
Users ''not'' wishing to have their passwords stored in ''plain text'' have the option of generating a 256-bit Encrypted PSK.
+
{{Note (Русский)|Здесь ''имя_профиля'' — это имя файла профиля. Указание полного пути к файлу является ошибкой.}}
  
If you have not done so already, [[pacman|install]] {{pkg|wpa_actiond}} from the [[Official Repositories]].
+
Если было выведено сообщение об ошибке, выполните {{ic|journalctl -xn}} и {{ic|netctl status ''имя_профиля''}} для выяснения ее причины. Исправьте настройки профиля и повторите попытку.
  
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|
+
Если используется только один профиль на один интерфейс или вы хотите переключать профили вручную, то подойдет [[#Основной метод|основной метод]] — пользователям серверов, рабочих станций, роутеров и т. п.
 +
 
 +
Если требуется часто переключаться между несколькими профилями, используйте [[#Автоматическое переключение профилей|автоматическое переключение профилей]] — будет полезно пользователям ноутбуков.
 +
 
 +
==== Основной метод ====
 +
 
 +
При использовании этого метода создается служба [[systemd (Русский)|systemd]], которая будет запускаться при загрузке системы. Изменения в файле профиля не будут отражаться в файле конфигурации службы автоматически, поэтому, после внесения изменений в файл, необходимо вновь включить профиль командой:
 +
 
 +
# netctl enable ''имя_профиля''
 +
 
 +
{{Note (Русский)|Соединение будет установлено только в том случае, если профиль может быть успешно запущен во время загрузки системы (во время запуска службы). Это значит, что во время загрузки сетевой кабель должен быть подключен, а беспроводная сеть доступна.}}
 +
 
 +
{{Tip (Русский)|Вы можете запускать профиль Ethetnet со статическим IP независимо от того, подключен кабель или нет. Для этого добавьте {{ic|1=SkipNoCarrier=yes}} в файл конфигурации профиля.}}
 +
 
 +
==== Автоматическое переключение профилей ====
 +
 
 +
Для автоматического переключения профилей netctl предоставляет две специальных службы [[systemd (Русский)|systemd]]:
 +
 
 +
* Для проводных соединений: {{ic|netctl-ifplugd@''interface''.service}}. Сервис автоматически изменяет профиль при подключении и отключении кабеля.
 +
* Для беспроводных соединений: {{ic|netctl-auto@''interface''.service}}. Сервис автоматически изменяет профиль при переходе из диапазона одной сети в диапазон другой.
 +
 
 +
Сначала [[pacman (Русский)#Установка определенных пакетов|установите]] необходимые пакеты:
 +
 
 +
* Пакет {{Pkg|wpa_actiond}} требуется для использования {{ic|netctl-auto@''interface''.service}}
 +
* Пакет {{Pkg|ifplugd}} требуется для использования {{ic|netctl-ifplugd@''interface''.service}}
 +
 
 +
Теперь создайте в каталоге {{ic|/etc/netctl}} все профили, которые должны будут запускаться с помощью {{ic|netctl-auto@''interface''.service}} и {{ic|netctl-ifplugd@''interface''.service}}.
 +
 
 +
Если вы хотите, чтобы какой-то из беспроводных профилей '''не''' запускался автоматически службой {{ic|netctl-auto@''interface''.service}}, то вам следует явно указать это в файле профиля, добавив в него {{ic|1=ExcludeAuto=yes}}.
 +
 
 +
В случае нескольких беспроводных профилей, вы также можете установить приоритет запуска каждого, указав его в параметре {{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 (Русский)|С опцией {{ic|1=Security=wpa-config}} невозможно автоматическое подключение к WPA профилю средствами netctl-auto. Вместо этого используйте {{ic|1=Security=wpa-configsection}}.}}
 +
 
 +
После того, как все профили настроены, включите нужные вам службы:
 +
 
 +
# systemctl enable netctl-auto@''interface''.service
 +
# systemctl enable netctl-ifplugd@''interface''.service
 +
 
 +
{{Warning (Русский)|
 +
* Если один из профилей содержит ошибки, например пустую переменную {{ic|1=Key=}}, юнит systemd не сможет запуститься, отобразив при загрузке сообщение {{ic|"Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf'}}, даже если профиль с ошибкой не был включен.
 +
* Этот метод несовместим с [[#Основной метод|основным методом]]. Если вы ранее включали профиль через netctl запустите {{ic|netctl disable ''имя_профиля''}}, чтобы предотвратить запуск профиля дважды при загрузке.}}
 +
 
 +
Начиная с версии netctl 1.3, стало возможным вручную управлять сетевым интерфейсом, контролируемым службой netctl-auto без необходимости остановки службы. Это реализовано с помощью одноименной утилиты netctl-auto. Чтобы просмотреть список доступных команд, наберите:
 +
# netctl-auto --help
 +
 
 +
=== Переход с netcfg ===
 +
 
 +
netctl хранит профили в {{ic|/etc/netctl/}}, а не в {{ic|/etc/network.d/}}, как это делал netcfg.
 +
 
 +
Чтобы перейти с 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/''имя_профиля''}}.
 +
 
 +
=== Хеширование пароля (256-битный Pre-Shared Key) ===
 +
 
 +
{{Note (Русский)|Этот метод позволяет зашифровать пароль в файле конфигурации беспроводной сети так, чтобы скрыть его от прочтения посторонними. Однако, это не защищает от использования вашего файла с зашифрованной версией пароля посторонним пользователем с правами на его чтение для подключения к сети.}}
 +
 
 +
У пользователей, не желающих, чтобы их пароль хранился в открытом виде, есть возможность использовать 256-битный хеш, вычисляемый на основе пароля и SSID сети стандартными алгоритмами. Реализовать хеширование пароля можно двумя способами:
 +
 
 +
* Для генерации нужных настроек в {{ic|/etc/netctl/}} использовать {{ic|wifi-menu -o}}.
 +
* Ручная настройка, описанная ниже.
 +
 
 +
Какой бы метод вы не выбрали, для ограничения доступа к паролю следует установить нужные права на файл профиля:
 +
 
 +
# chmod 600 /etc/netctl/''имя_профиля''
 +
 
 +
Вычислите хеш с помощью [[WPA supplicant (Русский)#Вручную|wpa_passphrase]]:
 +
 
 +
{{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 (Русский)|Не закрывайте терминал, эта информация будет нужна далее.}}
 +
 
 +
Во втором окне терминала скопируйте файл-образец 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}}, добавив в переменную {{ic|Key}} ключ, сгенерированный ранее с помощью ''wpa_passphrase''.
 +
 
 +
В итоге профиль 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 {{ic|1=Key=}} that are explained at the end of [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)].}}
 
  
==Поддержка==
+
{{Note (Русский)|
Official announcement thread: https://bbs.archlinux.org/viewtopic.php?id=157670
+
* Убедитесь, что корректно использованы специальные правила расстановки кавычек (special quoting rules) для переменной {{ic|Key}}, которые описаны в конце [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)].
 +
* Если пароль не проходит проверку, попробуйте удалить {{ic|\"}} из переменной {{ic|Key}}.}}
 +
 
 +
== Советы и рекомендации ==
 +
 
 +
=== Экспериментальный графический интерфейс ===
 +
 
 +
Вы можете попробовать работать с ''netctl'', используя экспериментальный графический интерфейс, доступный в пакете {{AUR|netgui}}{{Broken package link (Русский)|{{aur-mirror (Русский)|netgui}}}}. Учтите, что ''netgui'' все еще находится в разработке, и вам следует также быть знакомым со структурой и содержимым конфигурационных файлов ''netctl'', чтобы иметь возможность самостоятельно устранять возможные неполадки. Другая графическая оболочка, {{AUR|netctl-gui}}, предоставляет основанный на [[Qt (Русский)|Qt]] графический интерфейс, демон DBus и виджет для [[KDE (Русский)|KDE]].
 +
 
 +
=== Установка DHCP-клиента для всех профилей ===
 +
 
 +
Если вы хотите установить DHCP-клиент, используемый по умолчанию для всех профилей сетевого интерфейса, создайте исполняемый файл {{ic|/etc/netctl/interfaces/''interface_name''}} с такой строкой:
 +
 
 +
DHCPClient=&apos;''your_dhcp_client''&apos;
 +
 
 +
Где ''your_dhcp_client'' – название вашей программы-клиента, например ''dhclient'' или ''dhcpcd''.
 +
 
 +
=== Замена 'netcfg current' ===
 +
 
 +
Если в недавнем прошлом вы использовали {{ic|netcfg current}}, то теперь можете использовать {{ic|# netctl-auto current}} в качестве замены для профилей, начинающихся с {{ic|netctl-auto}} (доступно с версии netctl 1.3).
 +
 
 +
Чтобы получить имена всех доступных профилей, используйте команду
 +
 
 +
# netctl list | awk '/*/ {print $2}'
 +
 
 +
=== Eduroam ===
 +
 
 +
Смотрите [[WPA2 Enterprise#netctl]].
 +
 
 +
=== Объединение сетевых интерфейсов (бондинг) ===
 +
 
 +
Из [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.''
 +
 
 +
перевод:
 +
 
 +
:''Объединение сетевых интерфейсов в Linux можно осуществить с помощью драйвера бондинга, он предоставляет методы для сопряжения нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (для отказоустойчивости) или в режиме балансировки нагрузки.''
 +
 
 +
==== Балансировка нагрузки ====
 +
 
 +
Для использования бондинга с netctl потребуется пакет {{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}}
 +
 
 +
Теперь можно отменить старые настройки и установить запуск бондинга по умолчанию. Переключитесь на новый профиль:
 +
 
 +
# netctl switch-to bonding
 +
 
 +
{{Note (Русский)|По умолчанию для двайвера бондинга используется политика цикличности (''the round-robin policy''). Что это значит, можно узнать в [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации].}}
 +
 
 +
{{Tip (Русский)|Чтобы проверить статус режима бондинга, выполните: {{bc|$ cat /proc/net/bonding/bond0}}}}
 +
 
 +
==== Подключение к беспроводной сети при отказе проводной ====
 +
 
 +
В этом разделе представлен способ использования ''бондинга'' для автоматического переключения на запасную беспроводную сеть в случае потери основного проводного соединения. Это полезно, если беспроводной и проводной сетевой интерфейс подключаются к одной и той же сети. Для этого ваша беспроводная точка доступа (маршрутизатор) должна быть настроена в режиме моста.
 +
 
 +
Вам понадобятся дополнительные пакеты из официальных репозиториев: {{Pkg|ifenslave}} и {{Pkg|wpa_supplicant}}.
 +
 
 +
Первым делом включите модуль бондинга для загрузки при старте системы, как показано на странице [[Kernel modules (Русский)#Loading]]{{Broken section link}}:
 +
 
 +
{{hc|/etc/modules-load.d/bonding.conf|2=
 +
bonding
 +
}}
 +
 
 +
Затем настройте драйвер {{ic|bonding}} для работы в режиме {{ic|active-backup}}, а в опции {{ic|primary}} укажите имя сетевого интерфейса, который должен быть нормально активен (как правило, для этого используется проводной интерфейс; узнать имя ваших сетевых интерфейсов вы можете с помощью команды {{ic|ip link}}).
 +
 
 +
{{hc|/etc/modprobe.d/bonding.conf|2=
 +
options bonding mode=active-backup miimon=100 primary=eth0 max_bonds=0
 +
}}
 +
 
 +
Опция {{ic|miimon}} нужна для определения потери соединения. Опция {{ic|max_bonds}} позволяет избежать появления ошибки {{ic|Interface bond0 already exists}}. Более подробую информацию вы можете найти в [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации ядра Linux].
 +
 
 +
Теперь создайте профиль netctl, который будет объединять оба ваших интерфейса в один мастер-интерфейс ({{ic|bond0}}). Вы можете объединить таким образом любое количество имеющихся сетевых интерфейсов.
 +
 
 +
{{hc|/etc/netctl/failover|2=
 +
Description='A wired connection with failover to wireless'
 +
Interface='bond0'
 +
Connection=bond
 +
BindsToInterfaces=('eth0' 'wlan0')
 +
IP='dhcp'
 +
}}
 +
 
 +
Если вы настраивали профили для интерфейсов {{ic|eth0}} и {{ic|wlan0}}, отключите их перед тем, как включать профиль {{ic|failover}}:
 +
 
 +
# netctl enable failover
 +
 
 +
Теперь вам необходимо настроить ''wpa_supplicant'' для соединения с беспроводной сетью:
 +
 
 +
{{hc|/etc/wpa_supplicant/wpa_supplicant-wlan0.conf|2=
 +
ctrl_interface=/run/wpa_supplicant
 +
update_config=1
 +
}}
 +
 
 +
Также добавьте в файл блок(и) {{ic|network}} для указания настроек отдельных беспроводных сетей, к которым будет подключаться ''wpa_supplicant'':
 +
 
 +
network={
 +
    ssid="SSID"
 +
    psk=PSK
 +
}
 +
 
 +
Для генерирования зашифрованного закрытого ключа используйте ''wpa_passphrase'', как показано на странице [[WPA supplicant (Русский)#Сопряжение при помощи wpa_passphrase]]{{Broken section link}}.
 +
 
 +
Теперь включите службу {{ic|wpa_supplicant}} на сетевом интерфейсе, для которого вы произвели настройку:
 +
 
 +
# systemctl enable wpa_supplicant@wlan0
 +
 
 +
После перезагрузки соединение будет установлено.
 +
 
 +
{{Note (Русский)|Если при загрузке системы вы получили ошибку
 +
 
 +
bonding: wlan0 is up - this may be due to an out of date ifenslave
 +
 
 +
это значит, что ''wpa_supplicant'' запустился перед профилем ''netctl''. Это происходит потому, что [[systemd (Русский)]] выполняет запуск программ параллельно. ''ifenslave'' требует, чтобы все интерфейсы были выключены перед тем, как выполнять их сопряжение с мастер-интерфейсом.
 +
 
 +
Для решения проблемы необходимо установить зависимость службы {{ic|wpa_supplicant@wlan0}} от {{ic|netctl@failover profile}}, так, чтобы они запускались последовательно. Создайте файл зависимости, как показано на странице [[systemd (Русский)#Обработка зависимостей]]:
 +
 
 +
{{hc|/etc/systemd/system/wpa_supplicant@wlan0.service.d/customdependency.conf|2=
 +
[Unit]
 +
After=netctl@failover.service
 +
}}
 +
 
 +
После чего перезагрузите систему. Вы можете проверить, работает ли бондинг, используя команду
 +
 
 +
# journalctl -u netctl@failover.service
 +
 
 +
Для проверки состояния отдельных интерфейсов, наберите:
 +
 
 +
# ip link
 +
 
 +
Вы должны увидеть что-то наподобие:
 +
 
 +
1: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
 +
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
 +
2: wlan0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DORMANT group default qlen 1000
 +
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
 +
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
 +
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
 +
}}
 +
 
 +
Теперь вы можете проверить, работает ли переключение на резервный интерфейс, запустив загрузку большого файла по сети (или, например, начав просмотр потокового видео) и отсоединив разъем проводного интерфейса. Передача данных должна непрерывно продолжаться. После подключения разъема проводного интерфейса должен произойти обратный переход. При возникновении проблем, используйте команды
 +
 
 +
# journalctl -u netctl@failover.service
 +
 
 +
и
 +
 
 +
# journalctl -u wpa_supplicant@wlan0.service
 +
 
 +
для отладки.
 +
 
 +
=== Использование любого сетевого интерфейса ===
 +
 
 +
В некоторых случаях может быть желательно, чтобы профиль мог использовать любой доступный сетевой интерфейс. Например, вы администрируете несколько компьютеров различной конфигурации, и для каждого используете одинаковый образ системного диска, чтобы избежать переустановки системы на каждом конкретном компьютере (особенно это удобно, если компьютеры не имеют своих устройств ввода/вывода). Если вы используете стандартную схему именования сетевых интерфейсов, и у компьютера только единственный сетевой адаптер, вы можете смело предположить, что eth0 — правильное имя интерфейса. Однако, если вы используете новую [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames схему именования] udev, устройствам будут присвоены имена, зависящие от их физического подключения на плате (например, enp1s0). Это значит, что профиль netctl содержащий точное название интерфейса, может работать на одном комьютере, и не работать на другом, в котором сетевое устройство названо иначе.
 +
 
 +
Быстрое и «грязное» решение заключается в использовании каталога {{ic|/etc/netctl/interfaces/}}. Выберите псевдоним (alias) для сетевого интерфейса ({{ic|en-any}} в этом примере), и создайте следующий файл:
 +
 
 +
{{hc|/etc/netctl/interfaces/en-any|<nowiki>
 +
#!/bin/bash
 +
for interface in /sys/class/net/en*; do
 +
        break;
 +
done
 +
Interface=$(basename $interface)
 +
echo "en-any: using interface $Interface";
 +
</nowiki>}}
 +
 
 +
Не забудьте дать файлу права на выполнение.
 +
 
 +
Теперь создайте профиль, который будет использовать этот интерфейс. Укажите псевдоним интерфейса в параметре {{ic|Interface}}. Пример:
 +
 
 +
{{hc|/etc/netctl/wired|<nowiki>
 +
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')
 +
</nowiki>}}
 +
 
 +
Теперь, когда профиль {{ic|wired}} будет запущен, любой компьютер использующий эти файлы конфигурации автоматически установит соединение, используя сетевой интерфейс, найденный первым при загрузке системы, в не зависимости от того, какое ему имя даст udev. Учтите, что это не самый надежный способ: если в компьютере несколько интерфейсов, netctl может попытаться присвоить им одинаковое имя, что приведет к неработоспособности соединения. Использование ''netctl-auto'' может стать несколько более надежным решением.
 +
 
 +
=== Использование хуков ===
 +
 
 +
netctl поддерживает общие хук-скрипты в {{ic|/etc/netctl/hooks/}}, и хуки для каждого сетевого интерфейса в {{ic|/etc/netctl/interfaces/}}. Вы можете указывать все опции netctl аналогично с обычными файлами профиля в эти скрипты, включая {{ic|ExecUpPost}} и {{ic|ExecDownPre}}. Когда состояние соединения изменяется, netctl загружает (через ''source'') все исполняемые скрипты в {{ic|hooks}}, затем прочитывает файл профиля и наконец загружает (''source'') исполняемый скрипт в каталога {{ic|interfaces}}, имя которого совпадает с именем сетевого интерфейса, который используется в профиле. Таким образом, опции в скрипте интерфейса могут переопределять значения опций в файле профиля, а он, в свою очередь, может переопределять значения скриптов в {{ic|hooks}}. Переменные {{ic|$INTERFACE}}, {{ic|$SSID}}, {{ic|$ACTION}} и {{ic|$Profile}} доступны для использования в хук-скриптах. Для получения более подробной информации смотрите [[man page (Русский)|man-страницу]] {{ic|netctl.profile(5)}}.
 +
 
 +
{{Expansion (Русский)|Было бы неплохо обобщить пример до более общего хука, который бы выполнял разные действия в зависимости от значения {{ic|$ACTION}}.}}
 +
 
 +
Пример скрипта, который запускает команду после того, как соединение установлено (для всех профилей):
 +
 
 +
{{hc|/etc/netctl/hooks/postconnect|<nowiki>
 +
#!/bin/sh
 +
 
 +
ExecUpPost="systemctl start crashplan.service; systemctl start dropbox@<username>.service"
 +
</nowiki>}}
 +
 
 +
=== Проблемы с соединением после пробуждения ===
 +
 
 +
В некоторых случаях соединение может не восстанавливаться самостоятельно после того, как компьютер некоторое время находился в режиме сна. Если для переподключения требуется перезапуск сетевого интерфейса, вы можете создать файл службы [[systemd (Русский)|systemd]], который будет выполнять необходимые действия для перезапуска сетевого интерфейса после пробуждения. Ниже приведен пример такого файла, который использует службу {{ic|netctl-auto}} для перезапуска интерфейса {{ic|wlan0}}:
 +
 
 +
{{hc|/etc/systemd/system/netctl-wlan0-resume.service|<nowiki>
 +
[Unit]
 +
Description=Restart netctl-auto on resume.
 +
After=suspend.target
 +
 
 +
[Service]
 +
Type=oneshot
 +
RemainAfterExit=no
 +
ExecStart=/usr/bin/systemctl restart netctl-auto@wlan0
 +
ExecStart=/usr/bin/echo netctl-wlan0-resume: Successfully restarted netctl-auto@wlan0
 +
 
 +
[Install]
 +
WantedBy=suspend.target
 +
</nowiki>}}
 +
 
 +
Измените команду в опции {{ic|ExecStart}} в соответствии с вашими нуждами.
 +
 
 +
После создания файла [[systemd (Русский)#Использование юнитов|включите]] службу (в данном примере, {{ic|netctl-wlan0-resume}}).
 +
== Решение проблем ==
 +
 
 +
=== Job for netctl@XXX.service failed ===
 +
 
 +
Иногда возникают проблемы с подключением к беспроводной сети с использованием ''netctl'', сопровождаемые следующим сообщением:
 +
{{hc|# netctl start wlan0-ssid|<nowiki>
 +
Job for netctl@wlan0\x2ssid.service failed. See 'systemctl status netctl@wlan0\x2ssid.service' and 'journalctl -xn' for details.
 +
</nowiki>}}
 +
 
 +
При этом, в выводе {{ic|journalctl -xn}} наблюдается следующее:
 +
 
 +
1. Если сетевой интерфейс (в нашем примере {{ic|wlan0}}) уже был запущен
 +
 
 +
network[2322]: The interface of network profile 'wlan0-ssid' is already up
 +
 
 +
Остановка интерфейса должна помочь:
 +
 
 +
# ip link set wlan0 down
 +
 
 +
Теперь попробуйте снова:
 +
# netctl start wlan0-ssid
 +
 
 +
{{Accuracy (Русский)|Следующий совет не является решением проблемы: использование другого DHCP-клиента всего-лишь плохой и необоснованный обходной путь.}}
 +
 
 +
2. Если сетевой интерфейс был остановлен, то:
 +
 
 +
dhcpcd[261]: wlan0: ipv4_sendrawpacket: Network is down
 +
 
 +
Один из способов это исправить — использовать другой DHCP-клиент, например {{Pkg|dhclient}}. После установки пакета настройте клиент:
 +
 
 +
{{hc|/etc/netctl/wlan0-ssid|<nowiki>
 +
...
 +
DHCPClient='dhclient'
 +
</nowiki>}}
 +
 
 +
Добавление опции {{ic|ForceConnect}} также может помочь:
 +
 
 +
{{hc|/etc/netctl/wlan0-ssid|<nowiki>
 +
...
 +
ForceConnect=yes
 +
</nowiki>}}
 +
 
 +
Сохраните файл и попробуйте соединиться используя профиль:
 +
 
 +
# netctl start wlan0-ssid
 +
 
 +
=== dhcpcd: ipv4_addroute: File exists ===
 +
 
 +
Иногда использование ''dhcpcd'' с netctl вызывает проблемы с переподключением: netctl сообщает об успешном подключении, но вы все еще получаете ошибки тайм-аута при соединении. В этом случае, прежний маршрут по умолчанию (default route) все еще остается в системе и не обновляется. Решение состоит в том, чтобы использовать [[#Установка DHCP-клиента для всех профилей|dhclient]] в качестве DHCP-клиента. Больше информации о проблеме вы сможете найти [https://bbs.archlinux.org/viewtopic.php?pid=1399842#p1399842 здесь (англ.)].
 +
 
 +
=== Таймаут при DHCP-подключении ===
 +
 
 +
Если вы получаете сообщения о тайм-ауте при попытке подключения через DHCP, вы можете увеличить время таймаута, используя значение выше 30 секунд, установленных в netctl по умолчанию. Создайте файл в каталоге {{ic|/etc/netctl/hooks/}} или {{ic|/etc/netctl/interfaces/}}, добавьте в него строку {{ic|1=TimeoutDHCP=40}}, где 40 — время тайм-аута. Не забудьте выдать файлу права на запуск.
 +
 
 +
=== Тайм-аут соединения ===
 +
 
 +
При проблемах с тайм-аутом, не связанных с DHCP (например, если у вас статический IP), если наблюдаемые ошибки похожи на следующие при запуске профиля:
 +
 
 +
{{hc|# journalctl _SYSTEMD_UNIT&#61;netctl@''имя_профиля''.service|
 +
Starting network profile &#39;''profile''&#39;...
 +
No connection found on interface 'wlan0' (timeout)
 +
Failed to bring the network up for profile &#39;''profile''&#39;
 +
}}
 +
 
 +
Попробуйте увеличить значения тайм-аутов соединения в вашем файле профиля:
 +
{{hc|/etc/netctl/''имя_профиля''|<nowiki>
 +
...
 +
TimeoutUp=300
 +
TimeoutCarrier=300</nowiki>
 +
}}
 +
Не забудьте заново активировать ваш профиль:
 +
 
 +
# netctl reenable ''имя_профиля''
 +
 
 +
== Смотрите также ==
  
==Советы==
+
* [https://bbs.archlinux.org/viewtopic.php?id=157670 Анонс и официальная страница обсуждения]
As of April 2013 there is no netctl alternative to {{ic|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-netctl-systray-menu}}{{Broken package link (Русский)|{{aur-mirror (Русский)|cinnamon-applet-netctl-systray-menu}}}} - aпплет для Cinnamon
# netctl list | sed -n 's/^\* //p'
+
or, when {{ic|netctl-auto}} was used to connect:
+
# wpa_cli -i <interface> status | sed -n 's/^id_str=//p'
+

Latest revision as of 10:02, 7 August 2016

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

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

Установка

Установите пакет netctl, доступный в официальных репозиториях.

Опциональные зависимости перечислены в таблице ниже.

Функция Пакет Программа netctl
(если есть)
Автоматическое соединение с беспроводными сетями wpa_actiond netctl-auto
Автоматическое проводное содинение ifplugd netctl-ifplugd
WPA wpa_supplicant
DHCP dhcpcd или dhclient
Wifi-меню dialog
PPPoE ppp
Важно: Вы можете потерять соединение после установки 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, несмотря на то, что такие имена используются в примерах на этой странице. Смотрите Network configuration (Русский)#Имена устройств для получения подробной информации.
Совет: Для автоматического создания профиля беспроводного соединения в /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

Теперь создайте в каталоге /etc/netctl все профили, которые должны будут запускаться с помощью 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 не сможет запуститься, отобразив при загрузке сообщение "Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf', даже если профиль с ошибкой не был включен.
  • Этот метод несовместим с основным методом. Если вы ранее включали профиль через 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-mirror]. Учтите, что netgui все еще находится в разработке, и вам следует также быть знакомым со структурой и содержимым конфигурационных файлов netctl, чтобы иметь возможность самостоятельно устранять возможные неполадки. Другая графическая оболочка, netctl-guiAUR, предоставляет основанный на Qt графический интерфейс, демон DBus и виджет для KDE.

Установка 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

Смотрите WPA2 Enterprise#netctl.

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

Из документации ядра 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=('eth0' 'eth1')
IP=dhcp
IP6=stateless

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

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

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

В этом разделе представлен способ использования бондинга для автоматического переключения на запасную беспроводную сеть в случае потери основного проводного соединения. Это полезно, если беспроводной и проводной сетевой интерфейс подключаются к одной и той же сети. Для этого ваша беспроводная точка доступа (маршрутизатор) должна быть настроена в режиме моста.

Вам понадобятся дополнительные пакеты из официальных репозиториев: ifenslave и wpa_supplicant.

Первым делом включите модуль бондинга для загрузки при старте системы, как показано на странице Kernel modules (Русский)#Loading[broken link: invalid section]:

/etc/modules-load.d/bonding.conf
bonding

Затем настройте драйвер bonding для работы в режиме active-backup, а в опции primary укажите имя сетевого интерфейса, который должен быть нормально активен (как правило, для этого используется проводной интерфейс; узнать имя ваших сетевых интерфейсов вы можете с помощью команды ip link).

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

Опция miimon нужна для определения потери соединения. Опция max_bonds позволяет избежать появления ошибки Interface bond0 already exists. Более подробую информацию вы можете найти в документации ядра Linux.

Теперь создайте профиль netctl, который будет объединять оба ваших интерфейса в один мастер-интерфейс (bond0). Вы можете объединить таким образом любое количество имеющихся сетевых интерфейсов.

/etc/netctl/failover
Description='A wired connection with failover to wireless'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'wlan0')
IP='dhcp'

Если вы настраивали профили для интерфейсов eth0 и wlan0, отключите их перед тем, как включать профиль failover:

# netctl enable failover

Теперь вам необходимо настроить wpa_supplicant для соединения с беспроводной сетью:

/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

Также добавьте в файл блок(и) network для указания настроек отдельных беспроводных сетей, к которым будет подключаться wpa_supplicant:

network={
    ssid="SSID"
    psk=PSK
}

Для генерирования зашифрованного закрытого ключа используйте wpa_passphrase, как показано на странице WPA supplicant (Русский)#Сопряжение при помощи wpa_passphrase[broken link: invalid section].

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

# systemctl enable wpa_supplicant@wlan0

После перезагрузки соединение будет установлено.

Примечание: Если при загрузке системы вы получили ошибку
bonding: wlan0 is up - this may be due to an out of date ifenslave

это значит, что wpa_supplicant запустился перед профилем netctl. Это происходит потому, что systemd (Русский) выполняет запуск программ параллельно. ifenslave требует, чтобы все интерфейсы были выключены перед тем, как выполнять их сопряжение с мастер-интерфейсом.

Для решения проблемы необходимо установить зависимость службы wpa_supplicant@wlan0 от netctl@failover profile, так, чтобы они запускались последовательно. Создайте файл зависимости, как показано на странице systemd (Русский)#Обработка зависимостей:

/etc/systemd/system/wpa_supplicant@wlan0.service.d/customdependency.conf
[Unit]
After=netctl@failover.service

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

# journalctl -u netctl@failover.service

Для проверки состояния отдельных интерфейсов, наберите:

# ip link

Вы должны увидеть что-то наподобие:

1: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
2: wlan0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DORMANT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

Теперь вы можете проверить, работает ли переключение на резервный интерфейс, запустив загрузку большого файла по сети (или, например, начав просмотр потокового видео) и отсоединив разъем проводного интерфейса. Передача данных должна непрерывно продолжаться. После подключения разъема проводного интерфейса должен произойти обратный переход. При возникновении проблем, используйте команды

# journalctl -u netctl@failover.service

и

# journalctl -u wpa_supplicant@wlan0.service

для отладки.

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

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

Использование хуков

netctl поддерживает общие хук-скрипты в /etc/netctl/hooks/, и хуки для каждого сетевого интерфейса в /etc/netctl/interfaces/. Вы можете указывать все опции netctl аналогично с обычными файлами профиля в эти скрипты, включая ExecUpPost и ExecDownPre. Когда состояние соединения изменяется, netctl загружает (через source) все исполняемые скрипты в hooks, затем прочитывает файл профиля и наконец загружает (source) исполняемый скрипт в каталога interfaces, имя которого совпадает с именем сетевого интерфейса, который используется в профиле. Таким образом, опции в скрипте интерфейса могут переопределять значения опций в файле профиля, а он, в свою очередь, может переопределять значения скриптов в hooks. Переменные $INTERFACE, $SSID, $ACTION и $Profile доступны для использования в хук-скриптах. Для получения более подробной информации смотрите man-страницу netctl.profile(5).

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

Причина: Было бы неплохо обобщить пример до более общего хука, который бы выполнял разные действия в зависимости от значения $ACTION. (обсуждение: Talk:Netctl (Русский)#)

Пример скрипта, который запускает команду после того, как соединение установлено (для всех профилей):

/etc/netctl/hooks/postconnect
#!/bin/sh

ExecUpPost="systemctl start crashplan.service; systemctl start dropbox@<username>.service"

Проблемы с соединением после пробуждения

В некоторых случаях соединение может не восстанавливаться самостоятельно после того, как компьютер некоторое время находился в режиме сна. Если для переподключения требуется перезапуск сетевого интерфейса, вы можете создать файл службы systemd, который будет выполнять необходимые действия для перезапуска сетевого интерфейса после пробуждения. Ниже приведен пример такого файла, который использует службу netctl-auto для перезапуска интерфейса wlan0:

/etc/systemd/system/netctl-wlan0-resume.service
[Unit]
Description=Restart netctl-auto on resume.
After=suspend.target

[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/systemctl restart netctl-auto@wlan0
ExecStart=/usr/bin/echo netctl-wlan0-resume: Successfully restarted netctl-auto@wlan0

[Install]
WantedBy=suspend.target

Измените команду в опции ExecStart в соответствии с вашими нуждами.

После создания файла включите службу (в данном примере, netctl-wlan0-resume).

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

Job for netctl@XXX.service failed

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

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

При этом, в выводе journalctl -xn наблюдается следующее:

1. Если сетевой интерфейс (в нашем примере wlan0) уже был запущен

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

Остановка интерфейса должна помочь:

# ip link set wlan0 down

Теперь попробуйте снова:

# netctl start wlan0-ssid

Tango-emblem-important.pngПравильность информации, представленной в этой статье или разделе, оспариваетсяTango-emblem-important.png

Причина: Следующий совет не является решением проблемы: использование другого DHCP-клиента всего-лишь плохой и необоснованный обходной путь. (обсуждение: Talk:Netctl (Русский)#)

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

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

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

/etc/netctl/wlan0-ssid
...
DHCPClient='dhclient'

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

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

Сохраните файл и попробуйте соединиться используя профиль:

# netctl start wlan0-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 'wlan0' (timeout)
Failed to bring the network up for profile 'profile'

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

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

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

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

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