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

From ArchWiki
Jump to: navigation, search
(Один профиль)
m (Change categories)
 
(83 intermediate revisions by 12 users not shown)
Line 1: Line 1:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:Networking (Русский)]]
+
[[Category:Network managers (Русский)]]
 +
[[Category:Arch projects (Русский)]]
 +
[[Category:Commands (Русский)]]
 +
[[Category:Русский]]
 +
[[cs:Netctl]]
 +
[[en:Netctl]]
 +
[[es:Netctl]]
 
[[fr:Netctl]]
 
[[fr:Netctl]]
[[es:Netctl]]
+
[[it:Netcfg]]
[[ru:Netctl]]
+
[[ja:Netctl]]
[[zh-CN:Netctl]]
+
[[zh-hans:Netctl]]
{{Article summary start}}
+
{{Unmaintained (Русский)}}
{{Article summary text|Руководство по настройке сети с помощью netctl и скриптам сетевых профилей.}}
+
 
{{Article summary end}}
+
''netctl'' — это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это нативный проект Arch Linux для настройки сети.
Netctl это новый Arch проект, который заменяет [[netcfg]]. Netctl это будущее настоящее) управления сетями из командной строки Arch Linux.
+
 
 +
== Установка ==
 +
 
 +
Установите пакет {{Pkg|netctl}}, доступный в [[Official repositories (Русский)|официальных репозиториях]].
 +
 
 +
Опциональные зависимости перечислены в таблице ниже.
 +
 
 +
{| class="wikitable"
 +
! Функция
 +
! Пакет
 +
! Программа netctl <br /> (если есть)
 +
|-
 +
| Автоматическое соединение с беспроводными сетями || {{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}} ||
 +
|-
 +
|}
 +
 
 +
{{Warning (Русский)|Вы можете потерять соединение после установки ''netctl'', если у вас запущена какая-нибудь другая служба, которая может конфликтовать с ''netctl''. Используйте команду {{ic|1=systemctl --type=service}} чтобы убедиться, что не запущены другие службы настройки сети.}}
 +
 
 +
== Использование ==
 +
 
 +
Перед началом использования 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]
 +
 
 +
== Настройка ==
 +
 
 +
Для управления сетевыми соединениями ''netctl'' использует профили, файлы которых расположены в {{ic|/etc/netctl}}. В {{ic|/etc/netctl/examples}} можно найти примеры типовых настроек:
 +
 
 +
* ethernet-dhcp
 +
* ethernet-static
 +
* wireless-wpa
 +
* wireless-wpa-static
 +
 
 +
Вы можете использовать любой файл из предоставленных примеров как основу для своей конфигурации, для этого просто скопируйте файл в {{ic|/etc/netctl}} и отредактируйте необходимым образом:
 +
 
 +
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/''имя_профиля''
 +
 
 +
{{Warning (Русский)|Начиная с версии 197, [[udev (Русский)|udev]] больше не присваивает интерфейсам имена стандартного вида {{ic|wlan''X''}} и {{ic|eth''X''}}, несмотря на то, что такие имена используются в примерах на этой странице. Смотрите [[Network configuration (Русский)#Имена устройств]] для получения подробной информации.}}
 +
 
 +
{{Tip (Русский)|Для автоматического создания профиля беспроводного соединения в {{ic|/etc/netctl}} воспользуйтесь командой {{ic|wifi-menu -o}} (запускать с правами суперпользователя).}}
 +
 
 +
Как только вы создали профиль, попробуйте установить соединение:
 +
 
 +
# netctl start ''имя_профиля''
 +
 
 +
{{Note (Русский)|Здесь ''имя_профиля'' — это имя файла профиля. Указание полного пути к файлу является ошибкой.}}
 +
 
 +
Если было выведено сообщение об ошибке, выполните {{ic|journalctl -xn}} и {{ic|netctl status ''имя_профиля''}} для выяснения ее причины. Исправьте настройки профиля и повторите попытку.
 +
 
 +
=== Автоматизация ===
 +
 
 +
Если используется только один профиль на один интерфейс или вы хотите переключать профили вручную, то подойдет [[#Основной метод|основной метод]] — пользователям серверов, рабочих станций, роутеров и т. п.
 +
 
 +
Если требуется часто переключаться между несколькими профилями, используйте [[#Автоматическое переключение профилей|автоматическое переключение профилей]] — будет полезно пользователям ноутбуков.
 +
 
 +
==== Основной метод ====
 +
 
 +
При использовании этого метода создается служба [[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|netctl}} доступен в [[Official Repositories]]. Установка netctl заменит {{pkg|netcfg}}.
 
  
==Обязательно к прочтению==
+
* Пакет {{Pkg|wpa_actiond}} требуется для использования {{ic|netctl-auto@''interface''.service}}
Для netctl доступны качественные man-страницы. Пользователям следует прочитать следующие man-страницы, прежде чем начать использовать netctl:
+
* Пакет {{Pkg|ifplugd}} требуется для использования {{ic|netctl-ifplugd@''interface''.service}}
*[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}} и {{Pkg|netcfg}} - конфликтующие пакеты. Есть вероятность потери соединения после установки {{Pkg|netctl}}, ЕСЛИ ваши профили некорректно настроены.
+
Теперь создайте в каталоге {{ic|/etc/netctl}} все профили, которые должны будут запускаться с помощью {{ic|netctl-auto@''interface''.service}} и {{ic|netctl-ifplugd@''interface''.service}}.
  
==Настройка==
+
Если вы хотите, чтобы какой-то из беспроводных профилей '''не''' запускался автоматически службой {{ic|netctl-auto@''interface''.service}}, то вам следует явно указать это в файле профиля, добавив в него {{ic|1=ExcludeAuto=yes}}.
  
{{ic|netctl}} можно использовать для анализа и контроля за состоянием сервисов Systemd для менеджера сетевого профиля. Пользователи могут обратиться к примерам файлов конфигурации сетевых подключений. Примеры профилей расположены в {{ic|/etc/netctl/examples/}}. В общую конфигурацию включены:
+
В случае нескольких беспроводных профилей, вы также можете установить приоритет запуска каждого, указав его в параметре {{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)}}.
  
*ethernet-dhcp
+
{{Warning (Русский)|С опцией {{ic|1=Security=wpa-config}} невозможно автоматическое подключение к WPA профилю средствами netctl-auto. Вместо этого используйте {{ic|1=Security=wpa-configsection}}.}}
*ethernet-static
 
*wireless-wpa
 
*wireless-wpa-static
 
  
Чтобы использовать пример конфигурации просто скопируйте один из них из {{ic|/etc/netctl/examples/}} в {{ic|/etc/netctl/}} и отредактируйте необходимым образом:
+
После того, как все профили настроены, включите нужные вам службы:
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/
 
  
Как только вы создали профиль, сделайте попытку установить соединение используя вновь созданный профиль, выполнив:
+
# systemctl enable netctl-auto@''interface''.service
  # netctl start <profile>
+
  # systemctl enable netctl-ifplugd@''interface''.service
  
Если результат выполнения команды говорит о неудаче, выполните {{ic|journalctl -xn}} и {{ic|netctl status <profile>}} для более глубокого анализа причин неудачи. Выполните необходимую корректировку конфигурации и повторите попытку.
+
{{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
Если используется только один профиль, вы можете сделать его подключение автоматическим. После успешного запуска профиля выполните:
 
  # netctl enable <profile>
 
Эта команда создаст и активирует сервис [[systemd]], который будет автоматически запускать профиль при загрузке компьютера.
 
  
{{Note|Соединение с dhcp-сервером устанавливается только если интерфейс подсоединен и запущен во время загрузки (или когда запускается сервис). Чтобы настроить автоматическое подключение, установленное на проводном соединении, смотрите [[#Несколько профилей]].}}
+
=== Переход с netcfg ===
  
====Несколько профилей====
+
netctl хранит профили в {{ic|/etc/netctl/}}, а не в {{ic|/etc/network.d/}}, как это делал netcfg.
В то время как {{ic|netcfg}} использовал {{ic|net-auto-wireless.service}} и {{ic|net-auto-wired.service}}, {{ic|netctl}} использует {{ic|netctl-auto@<interface>.service}} для беспроводных соединений и {{ic|netctl-ifplugd@<interface>.service}} для проводных соединений. Для того, чтобы {{ic|netctl-auto@<interface>.service}} работал с беспроводными соединениями необходимо установить пакет {{pkg|wpa_actiond}}. Для того, чтобы {{ic|netctl-ifplugd@<interface>.service}} работал с проводными соединениями необходимо установить пакет {{pkg|ifplugd}}. Настройте {{ic|/etc/ifplugd/ifplugd.conf}} соответствующим образом.
 
  
После того как ваши профили установлены и, судя по всему, работают, просто активируйте соответствующие сервисы, выполнив:
+
Чтобы перейти с netcfg, необходимо выполнить, как минимум, следующие шаги:
# systemctl enable netctl-auto@<interface>.service
 
# systemctl enable netctl-ifplugd@<interface>.service 
 
  
Если у вас уже есть профиль, активированный через {{ic|netctl}}, выполните
+
* Отключите службы netcfg: {{ic|systemctl disable netcfg.service}}.
# netctl disable <profile>
+
* Удалите netcfg и [[pacman (Русский)#Установка определенных пакетов|установите]] netctl.
чтобы предотвратить двойное включение профиля при загрузке и возможные неполадки с wpa_supplicant.
+
* Переместите файлы сетевых профилей в новую директорию.
 +
* Переименуйте переменные в соответствии с {{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/''имя_профиля''}}.
  
{{Note|Если необходимо изменить уже существующий профиль, выполните {{ic|netctl reenable <profile>}}, чтобы применить изменения.}}
+
=== Хеширование пароля (256-битный Pre-Shared Key) ===
  
===Переход с Netcfg===
+
{{Note (Русский)|Этот метод позволяет зашифровать пароль в файле конфигурации беспроводной сети так, чтобы скрыть его от прочтения посторонними. Однако, это не защищает от использования вашего файла с зашифрованной версией пароля посторонним пользователем с правами на его чтение для подключения к сети.}}
{{Warning|{{ic|netctl}} конфликтует с {{ic|netcfg}}, поэтому отключите существующие {{ic|netcfg@<profile>}} сервисы перед установкой {{ic|netctl}}.}}
 
  
Профили {{ic|netctl}} находятся в {{ic|/etc/netctl}}, а ''не'' в каталоге {{ic|/etc/network.d}}, который использовал {{ic|netcfg}}.
+
У пользователей, не желающих, чтобы их пароль хранился в открытом виде, есть возможность использовать 256-битный хеш, вычисляемый на основе пароля и SSID сети стандартными алгоритмами. Реализовать хеширование пароля можно двумя способами:
  
Чтобы перейти с netcfg, необходимо выполнить по крайней мере следующие шаги:
+
* Для генерации нужных настроек в {{ic|/etc/netctl/}} использовать {{ic|wifi-menu -o}}.
*Переместите файлы профилей сетевых подключений в новую директорию.
+
* Ручная настройка, описанная ниже.
*Переименуйте переменные в них в соответствии с netctl.profile(5) (Большинство имен переменных всего лишь изменят стиль на UpperCamelCase, например CONNECTION= становится Connection=)
 
*Для соединений со статическим IP удостоверьтесь в том, что переменная Address= имеет маску подсети после IP (например Address=('192.168.1.23<b>/24</b>' '192.168.1.87<b>/24</b>') в примере профиля)
 
*Если вы установили беспроводное соединение в соответствии с примером {{ic|wireless-wpa-configsection}}, учтите, что значения в секции {{ic|1=WPAConfigSection=}} переопределят соответствующие опции {{ic|wpa_supplicant}} в {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}. Для подключения к скрытой беспроводной сети добавьте {{ic|scan_ssid<nowiki>=1</nowiki>}} к  параметрам в {{ic|wireless-wpa-configsection}}; {{ic|Hidden<nowiki>=</nowiki>yes}} не работает здесь.
 
*Удалите кавычки у значений переменных, для которых они не обязательны (в основном это дело вкуса).
 
*Выполните {{ic|netctl enable <profile>}} для каждого профиля в старом массиве NETWORK. Он не работает в этом случае, смотрите netctl.special(7).
 
*Используйте {{ic|netctl list}} / {{ic|netctl start <profile>}} вместо netcfg-menu. wifi-menu остается доступным.
 
  
===Шифрование пароля (256-битный Pre-Shared Key)===
+
Какой бы метод вы не выбрали, для ограничения доступа к паролю следует установить нужные права на файл профиля:
  
У пользователей, ''не'' желающих, чтобы их пароль хранился в ''простом тексте'', есть возможность использовать 256-bit Encrypted PSK.
+
# chmod 600 /etc/netctl/''имя_профиля''
  
Если это еще не сделано, [[pacman|установите]] {{pkg|wpa_actiond}} из [[Official Repositories]].
+
Вычислите хеш с помощью [[WPA supplicant (Русский)#Вручную|wpa_passphrase]]:
  
Далее, сгенерируйте ваш 256-bit Encrypted PSK используя [[WPA_supplicant#Configuration_file|wpa_passphrase]]:
+
{{hc|$ wpa_passphrase ''your_essid'' ''passphrase''|2=
{{hc|Usage: wpa_passphrase [ssid] [passphrase]|
 
2=$ wpa_passphrase archlinux freenode|
 
 
   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}}
 
 
}}
 
}}
  
Во втором окне терминала скопируйте файл примера {{ic|wireless-wpa}} из {{ic|/etc/netctl/examples}} в {{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
  
Далее вам будет необходимо отредактировать {{ic|/etc/netctl/wireless-wpa}}, используя ваш любимый текстовый редактор, и добавить ''Encrypted Pre-shared Key'', который был сгенерирован ранее с использованием wpa_passphrase, в переменную {{ic|'''Key'''}} этого профиля.
+
Теперь следует отредактировать {{ic|/etc/netctl/wireless-wpa}}, добавив в переменную {{ic|Key}} ключ, сгенерированный ранее с помощью ''wpa_passphrase''.
 +
 
 +
В итоге профиль wireless-wpa будет выглядеть следующим образом:
  
Профиль {{ic|wireless-wpa}}, включающий 256-bit Encrypted PSK будет выглядеть примерно так:
 
 
{{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=Убедитесь, что использованы '''special non-quoted rules''' для {{ic|1=Key=}}, которые описаны в конце [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)].}}
 
{{Note|1=Ключа, который вы помещаете в конфигурацию профиля, будет вполне достаточно для подключения к сети WPA-PSK, что означает, что этот метод хорош лишь для того, чтобы скрыть человеко-читаемый пароль, но он не предотвратит от подключения к сети кого-либо с правом на чтение этого файла.}}
 
  
==Поддержка==
+
{{Note (Русский)|
Официальная страница обсуждения: 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}}. Учтите, что ''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)}}.
 +
 
 +
{{Translateme (Русский)|Было бы неплохо обобщить пример до более общего хука, который бы выполнял разные действия в зависимости от значения {{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@wlan(...).service failed ===
 +
 
 +
{{Warning (Русский)|Этот раздел подразумевает что все сетевые сервисы отключены перед запуском ''netctl'' профиля/сервиса. За деталями смотрите [[#Установка]].}}
 +
 
 +
Если возникают проблемы с подключением к беспроводной сети с использованием ''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>}}
 +
 
 +
1. Если сетевой интерфейс (в нашем примере {{ic|wlan0}}) уже был запущен
 +
 
 +
network[2322]: The interface of network profile 'wlan0-ssid' is already up
 +
 
 +
Остановка интерфейса должна помочь:
 +
 
 +
# ip link set wlan0 down
 +
 
 +
Теперь попробуйте снова:
 +
# netctl start wlan0-ssid
 +
 
 +
2. Если ошибка продолжается, попробуйте еще раз с опцией {{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 Анонс и официальная страница обсуждения]
По состоянию на апрель 2013 в {{ic|netctl}} нет альтернативы {{ic|netcfg current}}. Если вы использовали эту возможность для чего-то, вроде статус-бара тайлового оконного менеджера, теперь вы можете использовать следующее:
+
* {{AUR|cinnamon-applet-netctl-systray-menu}}{{Broken package link (Русский)|{{aur-mirror (Русский)|cinnamon-applet-netctl-systray-menu}}}} - aпплет для Cinnamon
# netctl list | sed -n 's/^\* //p'
 
или, если для подключения использовался {{ic|netctl-auto}}:
 
# wpa_cli -i <interface> status | sed -n 's/^id_str=//p'
 

Latest revision as of 15:32, 20 November 2018

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. Учтите, что 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-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.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@wlan(...).service failed

Важно: Этот раздел подразумевает что все сетевые сервисы отключены перед запуском netctl профиля/сервиса. За деталями смотрите #Установка.

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

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

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

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

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

# ip link set wlan0 down

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

# netctl start wlan0-ssid

2. Если ошибка продолжается, попробуйте еще раз с опцией 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 имя_профиля

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