Команды ip из прошлого урока живут до перезагрузки - после reboot интерфейс снова поднимается голым. Задача администратора: сделать так, чтобы IP-адрес, шлюз, DNS и имя хоста восстанавливались автоматически при каждой загрузке. В 2026 этим заведуют демоны: на десктопах и большинстве серверов это NetworkManager, на минималистичных серверах и в облаке - systemd-networkd. Разберём оба, плюс имя хоста и легаси ifupdown/netplan, которые ещё попадаются на экзамене и в проде.

Как это работает
Постоянная настройка - это всегда связка двух вещей: текстовый файл с описанием желаемого состояния и демон, который при старте читает этот файл и прикладывает его к ядру через те же netlink-вызовы, что и команда ip. Сам файл ничего не делает - работает демон.
NetworkManager хранит соединения (connection) отдельно от устройств (device). Соединение - это профиль настроек, устройство - физический или виртуальный интерфейс. На одном устройстве может лежать несколько профилей, активен один. С версии 1.30+ профили по умолчанию пишутся в keyfile-формате в /etc/NetworkManager/system-connections/ (старый ifcfg-формат в RHEL объявлен устаревшим и в RHEL 10 уже не ставится). Управляют им утилиты nmcli (скрипты) и nmtui (псевдографика в терминале).
systemd-networkd идёт другим путём: это часть systemd, конфигурация декларативная и лежит в .network (адреса, маршруты), .netdev (виртуальные устройства - bridge, vlan, bond) и .link (низкоуровневые свойства, имя по MAC). Файлы кладут в /etc/systemd/network/. Демон применяет их по алфавиту имён, побеждает первый подошедший по секции [Match]. Резолвингом DNS при этом обычно занимается отдельный systemd-resolved.
Имя хоста - третья независимая сущность. Статическое имя лежит в /etc/hostname, его читает systemd-hostnamed при загрузке. Файл /etc/hosts даёт локальное соответствие имя-адрес в обход DNS и нужен, чтобы своё имя резолвилось в 127.0.1.1 ещё до поднятия сети.
Команды и примеры
Имя хоста одинаково везде через systemd:
Код: Выделить всё
hostnamectl # показать static/transient/pretty имя
hostnamectl set-hostname web01.lab.local
cat /etc/hostname # тут же лежит результат
Код: Выделить всё
nmcli connection show # список профилей
nmcli device status # какие устройства и их состояние
nmcli con add type ethernet con-name lan1 ifname enp1s0 \
ipv4.method manual \
ipv4.addresses 192.168.10.20/24 \
ipv4.gateway 192.168.10.1 \
ipv4.dns "1.1.1.1 9.9.9.9"
nmcli con up lan1
Код: Выделить всё
nmcli con mod lan1 ipv4.method auto ipv4.gateway "" ipv4.addresses ""
nmcli con up lan1 # перечитать профиль
Код: Выделить всё
[Match]
Name=enp1s0
[Network]
Address=192.168.10.20/24
Gateway=192.168.10.1
DNS=1.1.1.1
Код: Выделить всё
systemctl enable --now systemd-networkd
networkctl reload # перечитать .network без рестарта
networkctl status enp1s0 # состояние и применённые адреса
Код: Выделить всё
ip link set enp1s0 up # разово, до reboot
nmcli device disconnect enp1s0 # NM: опустить и не поднимать
nmcli con up lan1 # NM: поднять обратно по профилю
Код: Выделить всё
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
addresses: [192.168.10.20/24]
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses: [1.1.1.1]
Код: Выделить всё
netplan generate # YAML -> конфиги бэкенда
netplan try # применить с откатом по таймауту
netplan apply # применить насовсем
- Отредактировали keyfile в /etc/NetworkManager/system-connections/ руками и удивляетесь, что не применилось - нужен nmcli con reload или con up, демон сам файлы не перечитывает по таймеру.
- Два менеджера на одной системе дерутся за интерфейс. NetworkManager и systemd-networkd одновременно активными быть не должны - выберите один, второй замаскируйте.
- netplan apply без предварительного netplan try на удалённом сервере: ошибка в YAML - и вы отрезали себе SSH. try откатит через 120 секунд, apply - нет.
- Имя хоста сменили через hostnamectl, но забыли про /etc/hosts - и sudo подвисает на пару секунд из-за неудачного резолва своего имени.
- Отступы в netplan и в .network - в YAML только пробелы, табы ломают парсер; в ini-формате networkd важны имена секций с большой буквы.
- ipv4.gateway не очистили при переходе на DHCP - профиль пытается ставить ручной шлюз поверх полученного, маршрут конфликтует.
- Определите, какой демон управляет сетью: systemctl status NetworkManager systemd-networkd - какой active.
- Установите статическое имя хоста через hostnamectl set-hostname, проверьте /etc/hostname и добавьте строку в /etc/hosts.
- Создайте профиль статики на тестовом интерфейсе (nmcli con add либо .network-файл), поднимите его, проверьте ip addr.
- Переключите этот же профиль на DHCP, перечитайте, убедитесь, что адрес пришёл от сервера.
- Опустите интерфейс (nmcli device disconnect или ip link set down), убедитесь в потере связи, поднимите обратно.
- Перезагрузите стенд и проверьте, что настройки и имя хоста восстановились сами.
- В каком каталоге NetworkManager хранит профили соединений в keyfile-формате и какой командой заставить его перечитать изменённый вручную файл?
- Чем отличается понятие connection от device в терминах NetworkManager?
- Какие три типа файлов использует systemd-networkd и за что отвечает каждый?
- Почему netplan называют генератором, а не сетевым менеджером, и какие два бэкенда он умеет настраивать?
- Какой демон читает /etc/hostname при загрузке и в чём разница между static и transient именем хоста?
- Чем netplan try безопаснее netplan apply при настройке удалённого сервера?