Если вы настраиваете загрузку Linux по сети (PXE) с NFS в качестве корневой файловой системы, то, скорее всего, уже сталкивались с тем, что ядро получает IP-адрес через DHCP при старте. Но после завершения загрузки аренда не обновляется – и это может стать проблемой, особенно если DHCP-сервер выдает короткие lease-таймеры. Почему так происходит?
Дело в том, что параметр ядра ip=dhcp работает как «одноразовый» запрос: он помогает получить конфигурацию для монтирования NFS, но не запускает фоновый процесс для продления аренды.
Как заставить систему автоматически обновлять DHCP
Первым делом нужно понять: сама по себе настройка ядра не включает полноценный DHCP-клиент. Это как взять ключ, чтобы открыть дверь, но не иметь возможности закрыть её позже. Для постоянной работы сети требуется демон, который будет «общаться» с DHCP-сервером в фоне. Вот как это исправить:
1. Установите DHCP-клиент. Даже если система загрузилась, в базовом образе может не быть нужного пакета. Например, в Debian/Ubuntu чаще используют isc-dhcp-client:
sudo apt update && sudo apt install isc-dhcp-client
Если предпочитаете dhclient (например, для совместимости со старыми скриптами), установите его аналогично.
2. Настройте интерфейс в /etc/network/interfaces. Откройте файл и найдите секцию вашего сетевого интерфейса (обычно eth0 или enp0sX). Убедитесь, что для него указано dhcp:
auto eth0
iface eth0 inet dhcp
Кстати, если конфигурация разбита на файлы в /etc/network/interfaces.d/, проверьте и их.
3. Перезапустите сеть или перезагрузите интерфейс:
sudo systemctl restart networking
Если система использует systemd-networkd, команды будут другими – но это уже отдельная тема.
Важно: После настройки проверьте, что демон DHCP-клиента запущен. Например, для isc-dhcp-client можно выполнить
ps aux | grep dhclient
. Если процесса нет – что-то пошло не так.
Тонкости и частые ошибки
Даже после правильной настройки могут возникнуть нюансы. Например, если вы используете кастомные скрипты или файлы resolv.conf перезаписываются другими службами (вроде NetworkManager). Вот на что обратить внимание:
– Конфликт сервисов. Если в системе активен NetworkManager или systemd-networkd, они могут переопределять настройки интерфейсов. Проверьте статус служб:
systemctl status NetworkManager
Если он запущен, либо остановите его, либо перенастройте для работы с вашим интерфейсом.
– Логи DHCP. Загляните в журналы сервера и клиента. На клиенте ищите сообщения через:
journalctl -u networking.service --since "10 minutes ago"
– Ручное обновление аренды. Для теста можно вручную запросить обновление:
sudo dhclient -v eth0
Если команда выдает ошибки – проблема в конфигурации (например, неправильное имя интерфейса).
Иногда пользователи забывают, что файл interfaces требует явного указания auto eth0 для автоматического поднятия интерфейса при загрузке. Без этой строчки конфигурация применяется только при ручном запуске.
Совет: Если вы копируете образ системы для PXE-загрузки, убедитесь, что в нём установлен DHCP-клиент. Иначе после первой загрузки сеть «умрёт» через несколько часов (в зависимости от настроек сервера).
И последнее: не путайте параметры ядра с полноценной настройкой ОС. Да, ip=dhcp решает проблему начальной загрузки, но дальнейшая работа сети – это уже зона ответственности пользовательского пространства (userspace). Как говорится, доверяй, но проверяй: после настройки загляните в ip a и убедитесь, что адрес остаётся прежним после перезагрузки службы.