Вопрос или проблема
Я выполняю “dhclient” на одном из сетевых интерфейсов, который находится в состоянии UP. В сети, в которой присутствует этот узел, нет работающего DHCP сервера. Так что вопросы такие:
- Попробует ли dhclient настроить локальный адрес для этого интерфейса.
- Если вышеуказанное поведение dhclient, нужно ли мне настроить какие-либо параметры, чтобы это произошло.
Пожалуйста, проконсультируйте по этому поводу и предложите некоторые ссылки/мануалы для изучения этой темы.
dhclient
не будет настраивать локальный адрес. dhclient
только настраивает адреса, которые он получил от DHCP сервера.
Для настройки локального адреса на интерфейсе можно использовать Avahi, который является реализацией стандарта Zeroconf для Linux. Многие дистрибутивы поддерживают Avahi; вам просто нужно установить его и настроить демон Avahi (avahi-autopid
), чтобы он запускался при загрузке.
Вы можете запустить его вручную следующим образом:
avahi-autoipd --debug eth0
С работающим демоном, если указанному интерфейсу еще не присвоен маршрутизируемый адрес, Avahi назначит IPv4 локальный адрес (например, 169.254.10.183).
2024
Вопрос: “Попробует ли dhclient настроить локальный адрес для этого интерфейса.”
Ответ:
Кратко: “Да, в некоторых конкретных случаях.”
ДЕТАЛЬНО:
debian 12, isc-dhcp-client.
avahi-autoipd устанавливает хуки dhcp
# find /etc/dhcp -name "*avahi*"
/etc/dhcp/dhclient-exit-hooks.d/zzz_avahi-autoipd
/etc/dhcp/dhclient-enter-hooks.d/avahi-autoipd
Таким образом, если использовать менеджер сети ifupdown и указать получение ip через dhcp для интерфейса
# grep -v '#' /etc/network/interfaces
...
allow-hotplug enp0s4
iface enp0s4 inet dhcp
Тогда, если клиент dhcp не находит DHCP сервер, он вызывает avahi-autoipd через хук, и avahi-autoipd назначает LL ipv4 адрес.
# ip -c a sh dev enp0s4
enp0s4: ...
inet 169.254.8.235/16 ...
# ps aux | grep avahi-auto
avahi-a+ ... avahi-autoipd: [enp0s4] bound 169.254.8.235
Таким образом, это способ использовать avahi-autoipd без ручного запуска.
Ответ или решение
Ответ на вопрос о dhclient и локальных адресах:
При выполнении команды dhclient
на сетевом интерфейсе, который находится в состоянии UP, и отсутствии DHCP-сервера в сети, вам необходимо учесть следующие моменты:
-
Будет ли
dhclient
пытаться настроить локальный адрес?По умолчанию
dhclient
не настраивает локальный адрес (link-local address) самостоятельно.dhclient
предназначен исключительно для конфигурации адресов, полученных от DHCP-сервера. Если DHCP-сервер отсутствует,dhclient
не будет назначать адреса, включая локальные адреса. -
Есть ли какие-либо настройки, которые нужно выполнить, чтобы это произошло?
Несмотря на то что
dhclient
сам по себе не назначает локальные адреса, вы можете использовать инструменты, такие как Avahi, для автоматической настройки локального адреса. Avahi — это реализация стандарта Zeroconf для Linux, который обеспечивает автоматическую конфигурацию сетевых адресов.Для того чтобы использовать Avahi для назначения локального адреса, выполните следующие шаги:
-
Убедитесь, что пакет Avahi установлен в вашей системе. Обычно его можно установить с помощью менеджера пакетов вашей операционной системы (на примере Debian/Ubuntu это может быть команда
sudo apt install avahi-daemon avahi-utils
). -
После установки Avahi убедитесь, что демоны запущены и настроены для автозапуска при загрузке системы. Вот пример команды для проверки статуса службы Avahi:
systemctl status avahi-daemon
-
Если вы используете управляемую через конфигурационные файлы сеть с
ifupdown
, убедитесь, что у вас настроены соответствующие хук-скрипты дляdhclient
и установлен соответствующий интерфейс. Вам могут понадобиться следующие файлы хук-скриптов:/etc/dhcp/dhclient-enter-hooks.d/avahi-autoipd /etc/dhcp/dhclient-exit-hooks.d/zzz_avahi-autoipd
-
Настройте интерфейс в конфигурационном файле
/etc/network/interfaces
, чтобы получать IP через DHCP. Пример конфигурации интерфейса:allow-hotplug enp0s4 iface enp0s4 inet dhcp
После настройки, когда
dhclient
не сможет найти DHCP-сервер, он вызовет Avahi через хук, и Avahi автоматически назначит локальный IPv4-адрес (например, 169.254.10.183).Чтобы увидеть назначенный адрес, вы можете использовать команду:
ip -c addr show dev enp0s4
В результате, если все настройки выполнены корректно, у вас будет отображаться назначенный локальный адрес.
-
Ресурсы для более глубокого изучения:
Эти документы помогут вам глубже понять работу DHCP и локальных адресов в Linux.