netctl (Русский)
netctl — это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это нативный проект Arch Linux для настройки сети.
Contents
- 1 Установка
- 2 Использование
- 3 Настройка
- 4 Советы и рекомендации
- 5 Решение проблем
- 6 Смотрите также
Установка
Установите пакет netctl, доступный в официальных репозиториях.
Опциональные зависимости перечислены в таблице ниже.
Функция | Пакет | Программа netctl (если есть) |
---|---|---|
Автоматическое соединение с беспроводными сетями | wpa_actiond | netctl-auto
|
Автоматическое проводное содинение | ifplugd | netctl-ifplugd
|
WPA | wpa_supplicant | |
DHCP | dhcpcd или dhclient | |
Wifi-меню | dialog | |
PPPoE | ppp |
Использование
Перед началом использования 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/имя_профиля
Как только вы создали профиль, попробуйте установить соединение:
# netctl start имя_профиля
Если было выведено сообщение об ошибке, выполните journalctl -xn
и netctl status имя_профиля
для выяснения ее причины. Исправьте настройки профиля и повторите попытку.
Автоматизация
Если используется только один профиль на один интерфейс или вы хотите переключать профили вручную, то подойдет основной метод — пользователям серверов, рабочих станций, роутеров и т. п.
Если требуется часто переключаться между несколькими профилями, используйте автоматическое переключение профилей — будет полезно пользователям ноутбуков.
Основной метод
При использовании этого метода создается служба systemd, которая будет запускаться при загрузке системы. Изменения в файле профиля не будут отражаться в файле конфигурации службы автоматически, поэтому, после внесения изменений в файл, необходимо вновь включить профиль командой:
# netctl enable имя_профиля
Автоматическое переключение профилей
Для автоматического переключения профилей 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)
.
После того, как все профили настроены, включите нужные вам службы:
# systemctl enable netctl-auto@interface.service # systemctl enable netctl-ifplugd@interface.service
Начиная с версии 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-битный хеш, вычисляемый на основе пароля и 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
Советы и рекомендации
Экспериментальный графический интерфейс
Вы можете попробовать работать с 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.
Объединение сетевых интерфейсов (бондинг)
- 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
Подключение к беспроводной сети при отказе проводной
В этом разделе представлен способ использования бондинга для автоматического переключения на запасную беспроводную сеть в случае потери основного проводного соединения. Это полезно, если беспроводной и проводной сетевой интерфейс подключаются к одной и той же сети. Для этого ваша беспроводная точка доступа (маршрутизатор) должна быть настроена в режиме моста.
Вам понадобятся дополнительные пакеты из официальных репозиториев: 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
После перезагрузки соединение будет установлено.
Теперь вы можете проверить, работает ли переключение на резервный интерфейс, запустив загрузку большого файла по сети (или, например, начав просмотр потокового видео) и отсоединив разъем проводного интерфейса. Передача данных должна непрерывно продолжаться. После подключения разъема проводного интерфейса должен произойти обратный переход. При возникновении проблем, используйте команды
# 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)
.
Пример скрипта, который запускает команду после того, как соединение установлено (для всех профилей):
/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 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 имя_профиля
Смотрите также
- Анонс и официальная страница обсуждения
- cinnamon-applet-netctl-systray-menuAUR[ссылка недействительна: сохранено в aur-mirror] - aпплет для Cinnamon