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

From ArchWiki
Jump to: navigation, search
(update Pkg/AUR templates)
(Tag: wiki-scripts)
 
(41 intermediate revisions by 11 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]]
 
[[en:Netctl]]
 
[[es:Netctl]]
 
[[es:Netctl]]
[[zh-CN:Netctl]]
+
[[fr:Netctl]]
{{Article summary start}}
+
[[it:Netcfg]]
{{Article summary text|Руководство по настройке сети с помощью netctl и скриптов сетевых профилей.}}
+
[[ja:Netctl]]
{{Article summary heading|Resources}}
+
[[zh-hans:Netctl]]
{{Article summary wiki|Bridge with netctl}}
+
{{Unmaintained (Русский)}}
{{Article summary end}}
+
 
''netctl'' - это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это нативный проект, призванный заменить устаревшую утилиту ''netcfg''.
+
''netctl'' это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это нативный проект Arch Linux для настройки сети.
 +
 
 +
== Установка ==
  
==Установка==
+
Установите пакет {{Pkg|netctl}}, доступный в [[Official repositories (Русский)|официальных репозиториях]].
Пакет {{Pkg|netctl}} доступен в [[Official Repositories_(Русский)|официальном репозитории]]. Установка netctl заменит {{pkg|netcfg}}.
 
  
{{Pkg|netctl}} и {{Pkg|netcfg}} - конфликтующие пакеты. Есть вероятность потери соединения после установки {{Pkg|netctl}}, если ваши профили некорректно настроены.
+
Опциональные зависимости перечислены в таблице ниже.
  
{{Note|Чтобы убедиться, что ''не'' запущены другие сервисы по настройке сети, стоит выполнить {{ic|1=systemctl --type=service}}. Различные сетевые сервисы будут конфликтовать}}
+
{| 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 желательно прочитать следующие страницы:
 
Перед началом использования netctl желательно прочитать следующие страницы:
*[https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.1.txt 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.profile.5.txt netctl.profile]
*[https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.special.7.txt netctl.special]
+
* [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.special.7.txt netctl.special]
  
==Настройка==
+
== Настройка ==
  
Для управления сетевыми соединениями {{ic|netctl}} использует профили, которые расположены в {{ic|/etc/netctl/}}. Примеры профилей расположены в {{ic|/etc/netctl/examples/}}. В общую конфигурацию включены:
+
Для управления сетевыми соединениями ''netctl'' использует профили, файлы которых расположены в {{ic|/etc/netctl}}. В {{ic|/etc/netctl/examples}} можно найти примеры типовых настроек:
  
*ethernet-dhcp
+
* ethernet-dhcp
*ethernet-static
+
* ethernet-static
*wireless-wpa
+
* wireless-wpa
*wireless-wpa-static
+
* wireless-wpa-static
  
Чтобы использовать пример конфигурации просто скопируйте один из них из {{ic|/etc/netctl/examples/}} в {{ic|/etc/netctl/}} и отредактируйте необходимым образом:
+
Вы можете использовать любой файл из предоставленных примеров как основу для своей конфигурации, для этого просто скопируйте файл в {{ic|/etc/netctl}} и отредактируйте необходимым образом:
  
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/
+
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/''имя_профиля''
  
{{Tip|Для создания профиля беспроводного соединения в {{ic|/etc/netctl/}} можно выполнить {{ic|wifi-menu -o}}.}}
+
{{Warning (Русский)|Начиная с версии 197, [[udev (Русский)|udev]] больше не присваивает интерфейсам имена стандартного вида {{ic|wlan''X''}} и {{ic|eth''X''}}, несмотря на то, что такие имена используются в примерах на этой странице. Смотрите [[Network configuration (Русский)#Имена устройств]] для получения подробной информации.}}
 +
 
 +
{{Tip (Русский)|Для автоматического создания профиля беспроводного соединения в {{ic|/etc/netctl}} воспользуйтесь командой {{ic|wifi-menu -o}} (запускать с правами суперпользователя).}}
  
 
Как только вы создали профиль, попробуйте установить соединение:
 
Как только вы создали профиль, попробуйте установить соединение:
  
  # netctl start ''profile''
+
  # netctl start ''имя_профиля''
  
{{Note|Здесь ''profile'' - это имя файла профиля, и указание полного пути к файлу приведет к ошибке}}
+
{{Note (Русский)|Здесь ''имя_профиля'' это имя файла профиля. Указание полного пути к файлу является ошибкой.}}
  
Если результат выполнения команды говорит о неудаче, выполните {{ic|journalctl -xn}} и {{ic|netctl status ''profile''}} для выяснения причин. Выполните необходимую корректировку конфигурации и повторите попытку.
+
Если было выведено сообщение об ошибке, выполните {{ic|journalctl -xn}} и {{ic|netctl status ''имя_профиля''}} для выяснения ее причины. Исправьте настройки профиля и повторите попытку.
  
===Автоматизация===
+
=== Автоматизация ===
  
Если используется только один профиль на один интерфес или вы хотите переключать профили вручную, то подойдет [[#Основной метод|Основной метод]] - пользователям серверов, рабочих станций, роутеров и прочего.
+
Если используется только один профиль на один интерфейс или вы хотите переключать профили вручную, то подойдет [[#Основной метод|основной метод]] пользователям серверов, рабочих станций, роутеров и т. п.
  
Если требуется часто переключаться между многими профилями, используйте [[#Автоматическое переключение профилей|Автоматическое переключение профилей]] - будет полезно пользователям ноутбуков.
+
Если требуется часто переключаться между несколькими профилями, используйте [[#Автоматическое переключение профилей|автоматическое переключение профилей]] будет полезно пользователям ноутбуков.
  
====Основной метод====
+
==== Основной метод ====
Этим методом можно запустить только один профиль на интерфейс. Сначала проверьте, может ли профиль быть запущен:
 
  
# netctl enable ''profile''
+
При использовании этого метода создается служба [[systemd (Русский)|systemd]], которая будет запускаться при загрузке системы. Изменения в файле профиля не будут отражаться в файле конфигурации службы автоматически, поэтому, после внесения изменений в файл, необходимо вновь включить профиль командой:
  
Эта команда создаст и активирует [[systemd]]-сервис, который будет автоматически запускать профиль при загрузке.
+
# netctl enable ''имя_профиля''
  
{{Note|Соединение будет установлено только в том случае, если профиль запускается во время загрузки системы (или запуска сервиса). Это значит, что во время загрузки сетевой кабель должен быть подключен, а беспроводная сеть доступна}}
+
{{Note (Русский)|Соединение будет установлено только в том случае, если профиль может быть успешно запущен во время загрузки системы (во время запуска службы). Это значит, что во время загрузки сетевой кабель должен быть подключен, а беспроводная сеть доступна.}}
  
{{Tip|Чтобы запустить профиль со статическим IP на проводном интерфейсе независимо от того, подключен кабель или нет, добавьте {{ic|1=SkipNoCarrier=yes}} в файл профиля}}
+
{{Tip (Русский)|Вы можете запускать профиль Ethetnet со статическим IP независимо от того, подключен кабель или нет. Для этого добавьте {{ic|1=SkipNoCarrier=yes}} в файл конфигурации профиля.}}
  
====Автоматическое переключение профилей====
+
==== Автоматическое переключение профилей ====
  
Для автоматического переключения профилей ''netcl'' предоставляет два специальных systemd-сервиса:
+
Для автоматического переключения профилей netctl предоставляет две специальных службы [[systemd (Русский)|systemd]]:
  
* Для проводных соединений: {{ic|netctl-ifplugd@''interface''.service}}. Профиль измненятся при отключении и подключении кабеля.
+
* Для проводных соединений: {{ic|netctl-ifplugd@''interface''.service}}. Сервис автоматически изменяет профиль при подключении и отключении кабеля.
* Для беспроводных соединений: {{ic|netctl-auto@''interface''.service}}. Порфиль изменятся при переходе из диапазона одной сети в диапазон другой.
+
* Для беспроводных соединений: {{ic|netctl-auto@''interface''.service}}. Сервис автоматически изменяет профиль при переходе из диапазона одной сети в диапазон другой.
  
Сначала [[pacman_(Русский)|установите]] необходимые пакеты:
+
Сначала [[pacman (Русский)#Установка определенных пакетов|установите]] необходимые пакеты:
  
* Пакет {{Pkg|wpa_actiond}} требуется сервисом {{ic|netctl-auto@''interface''.service}}
+
* Пакет {{Pkg|wpa_actiond}} требуется для использования {{ic|netctl-auto@''interface''.service}}
* Пакет {{Pkg|ifplugd}} требуется сервисом {{ic|netctl-ifplugd@''interface''.service}}
+
* Пакет {{Pkg|ifplugd}} требуется для использования {{ic|netctl-ifplugd@''interface''.service}}
  
{{Note|''netcfg'' использовал {{ic|net-auto-wireless.service}} и {{|net-auto-wired.service}} для этих целей.}}
+
Теперь создайте в каталоге {{ic|/etc/netctl}} все профили, которые должны будут запускаться с помощью {{ic|netctl-auto@''interface''.service}} и {{ic|netctl-ifplugd@''interface''.service}}.
  
Теперь отредактируйте все профили, которые {{ic|netctl-auto@''interface''.service}} и {{ic|netctl-ifplugd@''interface''.service}} должны будут запускать.
+
Если вы хотите, чтобы какой-то из беспроводных профилей '''не''' запускался автоматически службой {{ic|netctl-auto@''interface''.service}}, то вам следует явно указать это в файле профиля, добавив в него {{ic|1=ExcludeAuto=yes}}.
  
Если вы хотите, чтобы какой-то из беспрводных профилей '''не''' запускался автоматически сервисом {{ic|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)}}.
  
Приоритет запуска профиля можно установить с помощью {{ic|1=Priority=}}. {{ic|netctl-ifplugd@''interface''.service}} первым предпочтет профиль, который использует [http://ru.wikipedia.org/wiki/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}}.}}
  
{{Warning|С опцией {{ic|1=Security=wpa-config}} невозможно автоматическое подключение к WPA профилю средствами ''netctl-auto''. Вместо этого используйте {{ic|1=Security=wpa-configsection}}}}
+
После того, как все профили настроены, включите нужные вам службы:
  
После того, как все профили настроены, активируйте сервисы с помощью ''systemctl'':
+
# systemctl enable netctl-auto@''interface''.service
 +
# systemctl enable netctl-ifplugd@''interface''.service
  
# systemctl enable netctl-auto@''interface''.service
+
{{Warning (Русский)|
# systemctl enable netctl-ifplugd@''interface''.service
+
* Если один из профилей содержит ошибки, например пустую переменную {{ic|1=Key=}}, юнит systemd не сможет запуститься, отобразив при загрузке сообщение {{ic|"Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf'}}, даже если профиль с ошибкой не был включен.
 +
* Этот метод несовместим с [[#Основной метод|основным методом]]. Если вы ранее включали профиль через netctl запустите {{ic|netctl disable ''имя_профиля''}}, чтобы предотвратить запуск профиля дважды при загрузке.}}
  
{{Warning|
+
Начиная с версии netctl 1.3, стало возможным вручную управлять сетевым интерфейсом, контролируемым службой netctl-auto без необходимости остановки службы. Это реализовано с помощью одноименной утилиты netctl-auto. Чтобы просмотреть список доступных команд, наберите:
* Юнит не запустится при загрузке системы, если один из профилей содержит ошибки, например пустую переменную {{ic|1=Key=}}.
+
# netctl-auto --help
* Этот метод несовместим с [[#Основной метод|Основным методом]]. Если вы ранее активировали профиль через ''netctl'', запустите {{ic|netctl disable ''profile''}}, чтобы предотвратить запуск профиля дважды при загрузке.}}
 
  
===Переход с Netcfg===
+
=== Переход с netcfg ===
  
''netctl'' хранит профили в {{ic|/etc/netctl/}}, а '''не''' в {{ic|/etc/network.d/}}, как это делал 'netcfg''.
+
netctl хранит профили в {{ic|/etc/netctl/}}, а не в {{ic|/etc/network.d/}}, как это делал netcfg.
  
Чтобы перейти с netcfg, необходимо выполнить по крайней мере следующие шаги:
+
Чтобы перейти с netcfg, необходимо выполнить, как минимум, следующие шаги:
  
* Отключите сервисы ''ntcfg'': {{ic|systemctl disable netcfg.service}}.
+
* Отключите службы netcfg: {{ic|systemctl disable netcfg.service}}.
* Удалите ''netcfg'' и установите ''netctl''.
+
* Удалите netcfg и [[pacman (Русский)#Установка определенных пакетов|установите]] netctl.
 
* Переместите файлы сетевых профилей в новую директорию.
 
* Переместите файлы сетевых профилей в новую директорию.
* Переименуйте переменныей в соответствии с {{ic|netctl.profile(5)}} (в основном надо привести переменные к {{ic|UpperCamelCase}}, например {{ic|CONNECTION}} переименовать в {{ic|Connection}})
+
* Переименуйте переменные в соответствии с {{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|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|wireless-wpa-configsection}}, обратите внимание, что это перезапишет опции {{ic|wpa_supplicant}}, определенные выше скобок. Для подключения к скрытой беспроводной сети добавьте {{ic|1=scan_ssid=1}} к опциям в {{ic|wireless-wpa-configsection}}; {{ic|1=Hidden=yes}} больше не действует.
* На ваше усмотрение можно удалить кавычки у переменных, для которых кавычки не обязательны.
+
* На ваше усмотрение можно убрать кавычки вокруг переменных, для которых кавычки не обязательны.
* Выполните {{ic|netctl enable ''profile''}} для каждого профиля в старом массиве {{ic|NETWORKS}}. Если не сработало, смотрите {{ic|netctl.special(7)}}.
+
* Выполните {{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 ''profile''}}. ''wifi-menu'' остался доступным.
+
* Вместо ''netcfg-menu'' используйте {{ic|netctl list}} и {{ic|netctl start ''имя_профиля''}}. ''wifi-menu'' остался доступным.
* В отличие от ''netcfg'' по умолчанию ''netctl'' не поднимает [http://ru.wikipedia.org/wiki/Сетевая_плата сетевую плату], не подключеную к другой работающей сетевой плате. Чтобы обойти этот недостаток, добавьте {{ic|1=SkipNoCarrier=yes}} в конец вашего {{ic|/etc/netctl/''profile''}}. Тогда, даже если, например, кабель ethernet не подключен, сервис будет запущен.
+
* В отличие от netcfg, по умолчанию netctl не устанавливает логическое соединение на интерфейсе, если [[Wikipedia:ru:Сетевая_плата|сетевая плата]], не подключена к другой работающей плате. Чтобы это исправить, добавьте {{ic|1=SkipNoCarrier=yes}} в конец вашего файла {{ic|/etc/netctl/''имя_профиля''}}.
  
===Шифрование пароля (256-битный Pre-Shared Key)===
+
=== Хеширование пароля (256-битный Pre-Shared Key) ===
  
{{Note|1=Не смотря на "зашифрованность", ключа, который вы добавите в конфигурацию профиля, будет вполне достаточно для подключения к сети WPA-PSK. Этот метод скроет человеко-читаемый пароль, но он не предотвратит от подключения к сети кого-либо с правом на чтение этого файла.}}
+
{{Note (Русский)|Этот метод позволяет зашифровать пароль в файле конфигурации беспроводной сети так, чтобы скрыть его от прочтения посторонними. Однако, это не защищает от использования вашего файла с зашифрованной версией пароля посторонним пользователем с правами на его чтение для подключения к сети.}}
  
У пользователей, '''не''' желающих, чтобы их пароль хранился в простом тексте, есть возможность использовать 256-bit Encrypted PSK, вычисляемый на основе пароля и SSID сети стандартными алгоритмами. Реализовать шифрование можно двумя способами:
+
У пользователей, не желающих, чтобы их пароль хранился в открытом виде, есть возможность использовать 256-битный хеш, вычисляемый на основе пароля и SSID сети стандартными алгоритмами. Реализовать хеширование пароля можно двумя способами:
  
 
* Для генерации нужных настроек в {{ic|/etc/netctl/}} использовать {{ic|wifi-menu -o}}.
 
* Для генерации нужных настроек в {{ic|/etc/netctl/}} использовать {{ic|wifi-menu -o}}.
 
* Ручная настройка, описанная ниже.
 
* Ручная настройка, описанная ниже.
  
Какой бы метод вы не выбрали, для доступа пользователя к паролю следует установить нужные права на файл профиля:
+
Какой бы метод вы не выбрали, для ограничения доступа к паролю следует установить нужные права на файл профиля:
  
  # chmod 600 /etc/netctl/<config_file>
+
  # chmod 600 /etc/netctl/''имя_профиля''
  
Вычислите ваш ключ с помощью [[WPA_Supplicant_(Русский)#.D0.9F.D1.80.D0.BE.D1.86.D0.B5.D1.81.D1.81|wpa_passphrase]]:
+
Вычислите хеш с помощью [[WPA supplicant (Русский)#Вручную|wpa_passphrase]]:
  
 
{{hc|$ wpa_passphrase ''your_essid'' ''passphrase''|2=
 
{{hc|$ wpa_passphrase ''your_essid'' ''passphrase''|2=
Line 136: Line 161:
 
}}
 
}}
  
{{Note|Не закрывайте терминал, эта информация будет нужна далее}}
+
{{Note (Русский)|Не закрывайте терминал, эта информация будет нужна далее.}}
  
Во втором окне терминала скопируйте файл-образец {{ic|wireless-wpa}} из каталога {{ic|/etc/netctl/examples}} в {{ic|/etc/netctl}}:
+
Во втором окне терминала скопируйте файл-образец wireless-wpa из каталога {{ic|/etc/netctl/examples}} в {{ic|/etc/netctl}}:
  
 
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa
 
  # cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa
  
Теперь следует отредактировать {{ic|/etc/netctl/wireless-wpa}}, добавив в переменную {{ic|Key}} ключ, сгенерированный ранее с помощью wpa_passphrase.
+
Теперь следует отредактировать {{ic|/etc/netctl/wireless-wpa}}, добавив в переменную {{ic|Key}} ключ, сгенерированный ранее с помощью ''wpa_passphrase''.
  
В итоге профиль {{ic|wireless-wpa}} будет выглядеть примерно так:
+
В итоге профиль wireless-wpa будет выглядеть следующим образом:
  
 
{{hc|/etc/netctl/wireless-wpa|2=
 
{{hc|/etc/netctl/wireless-wpa|2=
Line 156: Line 181:
 
}}
 
}}
  
{{Note|
+
{{Note (Русский)|
* Убедитесь, что корректно использованы специальные правила расстановки кавычек ('''special quoting rules''') для переменной {{ic|Key}}, которые описаны в конце [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)].
+
* Убедитесь, что корректно использованы специальные правила расстановки кавычек (special quoting rules) для переменной {{ic|Key}}, которые описаны в конце [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)].
 
* Если пароль не проходит проверку, попробуйте удалить {{ic|\"}} из переменной {{ic|Key}}.}}
 
* Если пароль не проходит проверку, попробуйте удалить {{ic|\"}} из переменной {{ic|Key}}.}}
  
==Советы и рекомендации==
+
== Советы и рекомендации ==
 +
 
 +
=== Экспериментальный графический интерфейс ===
 +
 
 +
Вы можете попробовать работать с ''netctl'', используя экспериментальный графический интерфейс, доступный в пакете {{AUR|netgui}}. Учтите, что ''netgui'' все еще находится в разработке, и вам следует также быть знакомым со структурой и содержимым конфигурационных файлов ''netctl'', чтобы иметь возможность самостоятельно устранять возможные неполадки. Другая графическая оболочка, {{AUR|netctl-gui}}, предоставляет основанный на [[Qt (Русский)|Qt]] графический интерфейс, демон DBus и виджет для [[KDE (Русский)|KDE]].
 +
 
 +
=== Установка DHCP-клиента для всех профилей ===
  
===Аналог 'netcfg-current'===
+
Если вы хотите установить DHCP-клиент, используемый по умолчанию для всех профилей сетевого интерфейса, создайте исполняемый файл {{ic|/etc/netctl/interfaces/''interface_name''}} с такой строкой:
  
По состоянию на апрель 2013 в {{ic|netctl}} нет альтернативы {{ic|netcfg current}}. Если вы использовали эту возможность для чего-то, вроде статус-бара тайлового оконного менеджера, теперь вы можете использовать следующее:
+
DHCPClient=&apos;''your_dhcp_client''&apos;
  
# netctl list | awk '/*/ {print $2}'
+
Где ''your_dhcp_client'' – название вашей программы-клиента, например ''dhclient'' или ''dhcpcd''.
  
или, если для подключения использовался {{ic|netctl-auto}}:
+
=== Замена 'netcfg current' ===
  
# wpa_cli -i ''interface'' status | sed -n 's/^id_str=//p'
+
Если в недавнем прошлом вы использовали {{ic|netcfg current}}, то теперь можете использовать {{ic|# netctl-auto current}} в качестве замены для профилей, начинающихся с {{ic|netctl-auto}} (доступно с версии netctl 1.3).
  
{{Note|C версии netctl-1.3 (сейчас в <nowiki>[testing]</nowiki>), в {{ic|netctl-auto}} можно использовать команду {{ic|current}}{{bc|# netctl-auto current}}}}
+
Чтобы получить имена всех доступных профилей, используйте команду
  
===Eduroam===
+
# netctl list | awk '/*/ {print $2}'
  
Некоторые университеты используют систему [http://ru.wikipedia.org/wiki/Eduroam Eduroam] для управления беспроводной сетью. Для подключения к такой сети может быть полезен следующий файл конфигурации:
+
=== Eduroam ===
  
{{hc|/etc/netctl/wlan0-eduroam|<nowiki>
+
Смотрите [[WPA2 Enterprise#netctl]].
Description='Eduroam-profile for <user>'
 
Interface=wlan0
 
Connection=wireless
 
Security=wpa-configsection
 
IP=dhcp
 
WPAConfigSection=(
 
'ssid="eduroam"'
 
'proto=RSN'
 
'key_mgmt=WPA-EAP'
 
'pairwise=CCMP'
 
'auth_alg=OPEN'
 
'eap=PEAP'
 
'identity="<user>"'
 
'password="<password>"'
 
)</nowiki>
 
}}
 
  
=== Объединение сетевых интерфейсов (bonding) ===
+
=== Объединение сетевых интерфейсов (бондинг) ===
  
 
Из [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации ядра Linux]:
 
Из [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации ядра Linux]:
Line 202: Line 217:
 
:''The Linux bonding driver provides a method for aggregating multiple network interfaces into a single logical "bonded" interface. The behavior of the bonded interfaces depends on the mode. Generally speaking, modes provide either hot standby or load balancing services. Additionally, link integrity monitoring may be performed.''
 
:''The Linux bonding driver provides a method for aggregating multiple network interfaces into a single logical "bonded" interface. The behavior of the bonded interfaces depends on the mode. Generally speaking, modes provide either hot standby or load balancing services. Additionally, link integrity monitoring may be performed.''
  
:''Объединение сетевых интерфейсов в Linux можно осуществить с помощью драйвера bonding, он предоставляет методы для агрегирования нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (отказоустойчивости) или в режиме балансировки нагрузки.''
+
перевод:
 +
 
 +
:''Объединение сетевых интерфейсов в Linux можно осуществить с помощью драйвера бондинга, он предоставляет методы для сопряжения нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (для отказоустойчивости) или в режиме балансировки нагрузки.''
  
 
==== Балансировка нагрузки ====
 
==== Балансировка нагрузки ====
  
Для использования bonding с netctl требуются дополнительные пакеты: {{Pkg|ifenslave}}
+
Для использования бондинга с netctl потребуется пакет {{Pkg|ifenslave}}.
  
Скопируйте {{ic|/etc/netctl/examples/bonding}} в {{ic|/etc/netctl/bonding}} и отредактируйте его. Например:  
+
Скопируйте {{ic|/etc/netctl/examples/bonding}} в {{ic|/etc/netctl/bonding}} и отредактируйте его. Например:
  
 
{{hc|/etc/netctl/bonding|2=
 
{{hc|/etc/netctl/bonding|2=
Line 218: Line 235:
 
IP6=stateless}}
 
IP6=stateless}}
  
Теперь можно отменить старые настройки и установить запуск ''bonding'' по умолчанию. Переключитесь на новый провиль, например:
+
Теперь можно отменить старые настройки и установить запуск бондинга по умолчанию. Переключитесь на новый профиль:
  
 
  # netctl switch-to bonding
 
  # netctl switch-to bonding
  
{{Note|По умолчанию для двайвера {{ic|bonding}} используется политика цикличности (''the round-robin policy''). Что это значит можно посмотреть в [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации]}}
+
{{Note (Русский)|По умолчанию для двайвера бондинга используется политика цикличности (''the round-robin policy''). Что это значит, можно узнать в [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации].}}
  
{{Tip|Чтобы проверить статус режима ''bonding'', выполните: {{bc|$ cat /proc/net/bonding/bond0}}}}
+
{{Tip (Русский)|Чтобы проверить статус режима бондинга, выполните: {{bc|$ cat /proc/net/bonding/bond0}}}}
  
 
==== Подключение к беспроводной сети при отказе проводной ====
 
==== Подключение к беспроводной сети при отказе проводной ====
  
Этот пример демонстрирует, как можно использовать ''bonding'', чтобы откатиться на беспроводную сеть при падении проводного соединения. Соединение на каждом интерфейсе обнаружено и ''dhcpcd'' срабатывает, когда производится подключение одного или обоих интерфейсов.
+
В этом разделе представлен способ использования ''бондинга'' для автоматического переключения на запасную беспроводную сеть в случае потери основного проводного соединения. Это полезно, если беспроводной и проводной сетевой интерфейс подключаются к одной и той же сети. Для этого ваша беспроводная точка доступа (маршрутизатор) должна быть настроена в режиме моста.
  
Потребуются дополнительные пакеты из официального репозитория: {{Pkg|ifplugd}}, {{Pkg|ifenslave}} и {{Pkg|wpa_supplicant}}.
+
Вам понадобятся дополнительные пакеты из официальных репозиториев: {{Pkg|ifenslave}} и {{Pkg|wpa_supplicant}}.
  
Сначала следует настроить драйвер {{ic|bonding}} для работы с {{ic|active-backup}}:
+
Первым делом включите модуль бондинга для загрузки при старте системы, как показано на странице [[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=
 
{{hc|/etc/modprobe.d/bonding.conf|2=
options bonding mode=active-backup
+
options bonding mode=active-backup miimon=100 primary=eth0 max_bonds=0
options bonding miimon=100
 
options bonding primary=eth0
 
options bonding max_bonds=0
 
 
}}
 
}}
  
Опция {{ic|max_bonds}} предотвращает ошибку {{ic|Interface bond0 already exists}}.
+
Опция {{ic|miimon}} нужна для определения потери соединения. Опция {{ic|max_bonds}} позволяет избежать появления ошибки {{ic|Interface bond0 already exists}}. Более подробую информацию вы можете найти в [https://www.kernel.org/doc/Documentation/networking/bonding.txt документации ядра Linux].
  
Далее следует настроить профиль netctl для так называемого ''порабощения'' двух апаратных интерфейсов:
+
Теперь создайте профиль netctl, который будет объединять оба ваших интерфейса в один мастер-интерфейс ({{ic|bond0}}). Вы можете объединить таким образом любое количество имеющихся сетевых интерфейсов.
  
 
{{hc|/etc/netctl/failover|2=
 
{{hc|/etc/netctl/failover|2=
Line 250: Line 270:
 
Connection=bond
 
Connection=bond
 
BindsToInterfaces=('eth0' 'wlan0')
 
BindsToInterfaces=('eth0' 'wlan0')
IP='no'
+
IP='dhcp'
SkipNoCarrier='no'
 
 
}}
 
}}
  
Активация профиля при загрузке:
+
Если вы настраивали профили для интерфейсов {{ic|eth0}} и {{ic|wlan0}}, отключите их перед тем, как включать профиль {{ic|failover}}:
  
 
  # netctl enable failover
 
  # netctl enable failover
  
Настройте ''wpa_supplicant'' для ассоциации с известными сетями. Это можно сделать с помощью профиля netctl (не забывайте про {{ic|1=IP='no'}}) и постоянного работающего сервиса ''wpa_supplicant'', а также по запросу с использованием ''wpa_cli''. Способы описаны на странице [[WPA_Supplicant_(Русский)]]
+
Теперь вам необходимо настроить ''wpa_supplicant'' для соединения с беспроводной сетью:
  
Создайте действие ''ifplugd'' для автоматического DHCP присвоения связанному интерфейсу:
+
{{hc|/etc/wpa_supplicant/wpa_supplicant-wlan0.conf|2=
 +
ctrl_interface=/run/wpa_supplicant
 +
update_config=1
 +
}}
  
{{hc|/etc/ifplugd/bond_dhcp.action|2=
+
Также добавьте в файл блок(и) {{ic|network}} для указания настроек отдельных беспроводных сетей, к которым будет подключаться ''wpa_supplicant'':
#!/bin/sh
+
 
 +
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
 +
 
 +
Вы должны увидеть что-то наподобие:
  
case "$2" in
+
1: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
  up)
+
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    systemctl start "dhcpcd@$1.service" && exit 0
+
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
  down)
+
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    systemctl stop "dhcpcd@$1.service" && exit 0
+
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    ;;
 
  *)
 
    echo "Wrong arguments" > /dev/stderr
 
    ;;
 
esac
 
exit 1
 
 
}}
 
}}
  
и сделайте его исполняемым
+
Теперь вы можете проверить, работает ли переключение на резервный интерфейс, запустив загрузку большого файла по сети (или, например, начав просмотр потокового видео) и отсоединив разъем проводного интерфейса. Передача данных должна непрерывно продолжаться. После подключения разъема проводного интерфейса должен произойти обратный переход. При возникновении проблем, используйте команды
  
  # chmod +x /etc/ifplugd/bond_dhcp.action
+
  # journalctl -u netctl@failover.service
  
Потом создайте сервис systemd, который будет запускать ''ifplugd'' для {{ic|bond0}}:
+
и
  
{{hc|/etc/systemd/system/net-auto-bonded@.service|2=
+
# 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]
 
[Unit]
Description=Provides automatic dhcp resolution for bonded failover connection
+
Description=Restart netctl-auto on resume.
Requires=netctl@failover.service
+
After=suspend.target
After=netctl@failover.service
 
  
 
[Service]
 
[Service]
ExecStart=/usr/bin/ifplugd -i %i -r /etc/ifplugd/bond_dhcp.action -fIns
+
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]
 
[Install]
WantedBy=multi-user.target
+
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>
# systemctl enable net-auto-bonded@bond0.service
+
...
# reboot
+
TimeoutUp=300
 +
TimeoutCarrier=300</nowiki>
 +
}}
 +
Не забудьте заново активировать ваш профиль:
  
Если у вас проводное и беспроводное соединение в одной сети, вы, вероятно, можете сейчас отключиться от проводной сети и снова подключиться к ней без потери соединения.
+
# netctl reenable ''имя_профиля''
  
 
== Смотрите также ==
 
== Смотрите также ==
  
 
* [https://bbs.archlinux.org/viewtopic.php?id=157670 Анонс и официальная страница обсуждения]
 
* [https://bbs.archlinux.org/viewtopic.php?id=157670 Анонс и официальная страница обсуждения]
 +
* {{AUR|cinnamon-applet-netctl-systray-menu}}{{Broken package link (Русский)|{{aur-mirror (Русский)|cinnamon-applet-netctl-systray-menu}}}} - aпплет для Cinnamon

Latest revision as of 06:41, 7 April 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 имя_профиля

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