netctl (Русский)
| Summary |
|---|
| Руководство по настройке сети с помощью netctl и скриптов сетевых профилей. |
| Resources |
| Bridge with netctl |
netctl - это инструмент командной строки, используемый для настройки и управления сетевыми подключениями через профили. Это нативный проект, призванный заменить устаревшую утилиту netcfg.
Contents |
Установка
Пакет netctl доступен в официальном репозитории. Установка netctl заменит netcfg.
netctl и netcfg - конфликтующие пакеты. Есть вероятность потери соединения после установки netctl, если ваши профили некорректно настроены.
Обязательно к прочтению
Перед началом использования netctl желательно прочитать следующие страницы:
Настройка
Для управления сетевыми соединениями netctl использует профили, которые расположены в /etc/netctl/. Примеры профилей расположены в /etc/netctl/examples/. В общую конфигурацию включены:
- ethernet-dhcp
- ethernet-static
- wireless-wpa
- wireless-wpa-static
Чтобы использовать пример конфигурации просто скопируйте один из них из /etc/netctl/examples/ в /etc/netctl/ и отредактируйте необходимым образом:
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/
Как только вы создали профиль, попробуйте установить соединение:
# netctl start profile
Если результат выполнения команды говорит о неудаче, выполните journalctl -xn и netctl status profile для выяснения причин. Выполните необходимую корректировку конфигурации и повторите попытку.
Автоматизация
Если используется только один профиль на один интерфес или вы хотите переключать профили вручную, то подойдет Основной метод - пользователям серверов, рабочих станций, роутеров и прочего.
Если требуется часто переключаться между многими профилями, используйте Автоматическое переключение профилей - будет полезно пользователям ноутбуков.
Основной метод
Этим методом можно запустить только один профиль на интерфейс. Сначала проверьте, может ли профиль быть запущен:
# netctl enable profile
Эта команда создаст и активирует systemd-сервис, который будет автоматически запускать профиль при загрузке.
Автоматическое переключение профилей
Для автоматического переключения профилей netcl предоставляет два специальных systemd-сервиса:
- Для проводных соединений:
netctl-ifplugd@interface.service. Профиль измненятся при отключении и подключении кабеля. - Для беспроводных соединений:
netctl-auto@interface.service. Порфиль изменятся при переходе из диапазона одной сети в диапазон другой.
Сначала установите необходимые пакеты:
- Пакет wpa_actiond требуется сервисом
netctl-auto@interface.service - Пакет ifplugd требуется сервисом
netctl-ifplugd@interface.service
Теперь отредактируйте все профили, которые netctl-auto@interface.service и netctl-ifplugd@interface.service должны будут запускать.
Если вы хотите, чтобы какой-то из беспрводных профилей не запускался автоматически сервисом netctl-auto@interface.service, то это можно явно указать в файле профиля, добавив в него ExcludeAuto=yes.
Приоритет запуска профиля можно установить с помощью Priority=. netctl-ifplugd@interface.service первым предпочтет профиль, который использует DHCP. Для того, чтобы сначала был запущен профиль, использующий статический IP, можно использовать AutoWired=yes. Подробную информацию смотрите в netctl.profile(5).
После того, как все профили настроены, активируйте сервисы с помощью systemctl:
# systemctl enable netctl-auto@interface.service # systemctl enable netctl-ifplugd@interface.service
Переход с Netcfg
netctl хранит профили в /etc/netctl/, а не в /etc/network.d/, как это делал 'netcfg.
Чтобы перейти с netcfg, необходимо выполнить по крайней мере следующие шаги:
- Отключите сервисы ntcfg:
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 profileдля каждого профиля в старом массивеNETWORKS. Если не сработало, смотритеnetctl.special(7). - Вместо netcfg-menu используйте
netctl listи/илиnetctl start profile. wifi-menu остался доступным. - В отличие от netcfg по умолчанию netctl не поднимает сетевую плату, не подключеную к другой работающей сетевой плате. Чтобы обойти этот недостаток, добавьте
SkipNoCarrier=yesв конец вашего/etc/netctl/profile. Тогда, даже если, например, кабель ethernet не подключен, сервис будет запущен.
У пользователей, не желающих, чтобы их пароль хранился в простом тексте, есть возможность использовать 256-bit Encrypted PSK, вычисляемый на основе пароля и SSID сети стандартными алгоритмами. Реализовать шифрование можно двумя способами:
- Для генерации нужных настроек в
/etc/netctl/использоватьwifi-menu -o. - Ручная настройка, описанная ниже.
Какой бы метод вы не выбрали, для доступа пользователя к паролю следует установить нужные права на файл профиля:
# chmod 600 /etc/netctl/<config_file>
Вычислите ваш ключ с помощью 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
Советы и рекомендации
Аналог 'netcfg-current'
По состоянию на апрель 2013 в netctl нет альтернативы netcfg current. Если вы использовали эту возможность для чего-то, вроде статус-бара тайлового оконного менеджера, теперь вы можете использовать следующее:
# netctl list | awk '/*/ {print $2}'
или, если для подключения использовался netctl-auto:
# wpa_cli -i interface status | sed -n 's/^id_str=//p'
Eduroam
Некоторые университеты используют систему Eduroam для управления беспроводной сетью. Для подключения к такой сети может быть полезен следующий файл конфигурации:
/etc/netctl/wlan0-eduroam
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>"' )
Объединение сетевых интерфейсов (bonding)
- 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, он предоставляет методы для агрегирования нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (отказоустойчивости) или в режиме балансировки нагрузки.
Балансировка нагрузки
Для использования bonding с 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
Теперь можно отменить старые настройки и установить запуск bonding по умолчанию. Переключитесь на новый провиль, например:
# netctl switch-to bonding
Подключение к беспроводной сети при отказе проводной
Этот пример демонстрирует, как можно использовать bonding, чтобы откатиться на беспроводную сеть при падении проводного соединения. Соединение на каждом интерфейсе обнаружено и dhcpcd срабатывает, когда производится подключение одного или обоих интерфейсов.
Потребуются дополнительные пакеты из официального репозитория: ifplugd, ifenslave и wpa_supplicant.
Сначала следует настроить драйвер bonding для работы с active-backup:
/etc/modprobe.d/bonding.conf
options bonding mode=active-backup options bonding miimon=100 options bonding primary=eth0 options bonding max_bonds=0
Опция max_bonds предотвращает ошибку Interface bond0 already exists.
Далее следует настроить профиль netctl для так называемого порабощения двух апаратных интерфейсов:
/etc/netctl/failover
Description='A wired connection with failover to wireless'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'wlan0')
IP='no'
SkipNoCarrier='no'
Активация профиля при загрузке:
# netctl enable failover
Настройте wpa_supplicant для ассоциации с известными сетями. Это можно сделать с помощью профиля netctl (не забывайте про IP='no') и постоянного работающего сервиса wpa_supplicant, а также по запросу с использованием wpa_cli. Способы описаны на странице WPA_Supplicant_(Русский)
Создайте действие ifplugd для автоматического DHCP присвоения связанному интерфейсу:
/etc/ifplugd/bond_dhcp.action
#!/bin/sh
case "$2" in
up)
systemctl start "dhcpcd@$1.service" && exit 0
;;
down)
systemctl stop "dhcpcd@$1.service" && exit 0
;;
*)
echo "Wrong arguments" > /dev/stderr
;;
esac
exit 1
и сделайте его исполняемым
# chmod +x /etc/ifplugd/bond_dhcp.action
Потом создайте сервис systemd, который будет запускать ifplugd для bond0:
/etc/systemd/system/net-auto-bonded@.service
[Unit] Description=Provides automatic dhcp resolution for bonded failover connection Requires=netctl@failover.service After=netctl@failover.service [Service] ExecStart=/usr/bin/ifplugd -i %i -r /etc/ifplugd/bond_dhcp.action -fIns [Install] WantedBy=multi-user.target
Активируйте сервис и перезагрузите систему:
# systemctl enable net-auto-bonded@bond0.service # reboot
Если у вас проводное и беспроводное соединение в одной сети, вы, вероятно, можете сейчас отключиться от проводной сети и снова подключиться к ней без потери соединения.