Вопрос или проблема
Я ищу хороший источник и подтверждение касательно Динамической конфигурации IPv4 адресов Link-Local.
RFC Динамическая конфигурация IPv4 адресов Link-Local не совсем помогла мне ответить на мой вопрос (или я упустил это).
Итак, давайте рассмотрим, чтобы убедиться, что я прав:
Когда устройство подключается к интернету и не получает IP адрес ни от DHCP, ни статически, оно получает IP в диапазоне 169.254/16. Этот процесс называется APIPA (=Автоматическое частное адресация IP) в операционных системах Microsoft и является стандартным поведением. В варианте Linux это, судя по всему, zeroconf/Avahi.
Мой вопрос:
Получение IP в этом диапазоне является стандартным поведением на любой системе (то есть на любой системе Linux)? Или это должно настраиваться операционной системой? Насколько я знаю, при загрузке на Ubuntu и отсутствии каких-либо действий, устройство не получает IP вообще (то есть нет 169.254.x.y/16).
Другими словами, когда мы говорим о том, что не получаем IP от DHCP (и не устанавливаем статически). Буду ли я получать IP 169.254/16 на каждой системе или это только для Microsoft?
ИЗМЕНЕНИЕ: а что делает OSX?
Утверждение: "Когда устройство подключается к интернету и не получает IP ни от DHCP, ни статически, тогда устройство получает IP в диапазоне 169.254/16."
Ответ: что касается Debian 12, это не работает таким образом. Сетевая карта является пассивным элементом; если вам нужно назначить ей какой-либо IP адрес, то это должен сделать какой-либо пользовательский программный продукт. Если ни одно из пользовательских программ не назначает IP адрес, то сетевой интерфейс не будет иметь НИКАКОГО IP адреса, даже LL (link local) или APIPA. В Linux назначать LL адрес может, например, systemd-networkd. Например, с помощью следующей конфигурации:
# cat /etc/systemd/network/60-static.network
[Match]
Name=enp0s5
[Network]
LinkLocalAddressing=ipv4
IPv6LinkLocalAddressGenerationMode=none
Если вы хотите назначить LL адрес после неудачной попытки DHCP, то следующая конфигурация поможет:
# cat /etc/systemd/network/60-static.network
[Match]
Name=enp0s5
[Network]
DHCP=ipv4
LinkLocalAddressing=ipv4
IPv6LinkLocalAddressGenerationMode=none
Также назначить LL адрес можно с помощью “avahi-autoipd”.
# avahi-autoipd -Dw enp0s4
Общий вывод – LL адрес, как и любой другой IP адрес, не может появиться на сетевом интерфейсе, если только какой-либо кусок пользовательского кода не сделает это явно.
Ответ или решение
IPv4LL (IPv4 Link-Local) — это механизм автоматической конфигурации сетевых адресов, определённый в RFC 3927, который позволяет устройствам успешно настраивать свои IP-адреса в случае, если они не могут получить адрес через DHCP или статическую конфигурацию. Однако его поведение зависит от операционной системы и настроек.
На системах Linux, по умолчанию, IPv4 Link-Local адреса в диапазоне 169.254.0.0/16 не назначаются автоматически, как это происходит в Microsoft Windows (где используется концепция APIPA — Automatic Private IP Addressing). В большинстве дистрибутивов Linux, таких как Ubuntu или Debian, если сетевой интерфейс не получает IP-адрес от DHCP или не имеет статически заданного IP-адреса, он, как правило, не получает никаких адресов, включая адреса Link-Local.
Для автоматического назначения Link-Local адреса на системах Linux необходимо использовать дополнительные сетевые службы или утилиты. Например:
-
systemd-networkd: с помощью данного менеджера сетевых конфигураций можно включить поддержку автоматической настройки Link-Local адресов. Необходимо создать конфигурационный файл, который укажет, что после неудачной попытки DHCP следует назначить Link-Local адрес. Пример:
[Match] Name=enp0s5 [Network] DHCP=ipv4 LinkLocalAddressing=ipv4
- avahi-autoipd: эта утилита также может быть использована для назначения Link-Local адресов. Вы можете запустить её следующим образом:
avahi-autoipd -Dw enp0s4
Таким образом, для назначения Link-Local адреса на Linux системах, необходимо использовать дополнительные программы или настроить службы, так как сам по себе сетевой интерфейс останется без IP-адреса, если не будет активировано соответствующее программное обеспечение.
Что касается macOS (OS X), то начиная с версии 10.4, система реализует аналогичный механизм автоматического назначения IP-адресов, по сути, использует те же принципы IPv4 Link-Local, что и в RFC 3927, автоматически присваивая адреса в диапазоне 169.254.0.0/16, если адреса не были получены от DHCP.
В заключение, присвоение IPv4 Link-Local адреса — это не поведение, встроенное по умолчанию в каждую linux-систему, а функция, активируемая дополнительным программным обеспечением, таким как systemd-networkd или avahi-autoipd.