Systemd-networkd
Управление сетью посредством systemd-networkd
Подготовка
- Установка пакета systemd-timesyncd, который пригодится сразу после переезда, автоматически тянет за собой собственно
systemd-networkd
:# apt-get install -y systemd-timesyncd
- Дабы оставить возможность отката, вместо сноса
etcnet
пока достаточно просто переименовать его каталог:# mv -f /etc/net /etc/net.old
- Создать в каталоге
/etc/systemd/network/
пару файлов автонастройки по DHCP для проводных (lan.network
) и беспроводных (wifi.network
) интерфейсов (предварительно удостоверившись в отсутствии настроенных на статические адреса туннелей, вланов, мостов и т.п.) со следующим содержимым:[Match] Name = X* # вместо "Х" — "e" для lan.network и "w" для wifi.network [Network] DHCP = ipv4
Проводная сеть
Пора переключиться с etcnet
/NetworkManager
на systemd-networkd
:
# systemctl disable network NetworkManager && systemctl enable systemd-{network,timesync}d
Для проверки работоспособности нового сервиса следует перезагрузиться с воткнутым сетевым кабелем (поскольку Wi-Fi ещё не настроен) и сразу после перезагрузки — убедиться, что адрес получен каким-то из интерфейсов:
$ networkctl
$ ip -o a s | awk '!/inet6|lo /'
Беспроводная сеть
Для подключения к Wi-Fi понадобится вот такой файл:
/etc/wpa_supplicant/wpa_supplicant-wlan0.conf |
---|
ctrl_interface=/run/wpa_supplicant
ctrl_interface_group=wheel
eapol_version=2
fast_reauth=1
## Только для бродкомов ##
#preassoc_mac_addr=0
#mac_addr=0
##########################
|
И авторизация по Wi-Fi:
# systemctl enable wpa_supplicant@wlan0
Чтоб подключаться к точке доступа по паролю, нужно...
- Добавить её, не светя пароль в настройках:
# wpa_passphrase "BSSID" "пароль" | sed '/#/d' >>/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
- Перезапустить авторизацию на интерфейсе:
# systemctl restart wpa_supplicant@wlan0
Осталось перезагрузиться с выдернутым сетевым кабелем и способом, описанным выше, проверить работоспособность уже Wi-Fi.
При необходимости отключения Wi-Fi:
# systemctl stop wpa_supplicant@wlan0
DNS
С получением ДНС-серверов по сети прекрасно справляется systemd-resolved
, который нужно установить, запустить и нацелиться на /run/systemd/resolve/resolv.conf
символьной ссылкой /etc/resolv.conf
, заменив ею файл openresolv
'а:
# apt-get install systemd-resolved
# systemctl enable --now systemd-resolved
# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Для фиксации имени компьютера можно создать файл /etc/sysctl.d/sysname.conf
со следующим содержимым:
kernel.hostname = <имя компьютера> kernel.domainname = <имя домена> # опционально
Уборка
Если всё получилось, можно:
- вернуть на место каталог
/etc/net
:
# mv -f /etc/net.old /etc/net
- удалить ненужные более
openresolv
иetcnet
:
# apt-get remove etcnet openresolv
- перезагрузиться.
Заключение
Преимущества такого подхода к настройке сети:
- работает в любом современном дистрибутиве linux в отличие от дистроспецифичных
upstart
,etcnet
и пр.; - Wi-Fi подключается ещё при загрузке подобно проводному соединению, а не после входа юзера в иксы, как с
NetworkManager
; - ключи от точек доступа из системы не выудить, поскольку в конфиге — только их хэши.
Данная заметка — лишь первый шаг в освоении systemd-networkd
и малая часть того, чем я пользуюсь и что он вообще умеет:
- поднимать связки (bonds),
- делить тегированные вланы,
- строить мосты всех со всеми,
- выступать не только клиентом DHCP, но и его сервером (пусть и с минимумом настроек),
- прибивать отдельные статические маршруты через винегрет интерфейсов и даже заполнять для них пространные таблицы маршрутизации…
…и многое другое.
Ссылки
Настройка сети для контейнера nspawn
Благодарности
Статью вчерне накропал @NeuroFreak по следам моей ему помощи в настройке домашней сети на лаптопе. Мне оставалось её вычитать, отрихтовать, дополнить и структурировать.