DHCP не выдаёт IPv4-адрес
> [!INFO] Применимость > **ALT Linux 10.4–11.x** · **NetworkManager** · локальная работа через CLI/TTY > Рассматриваются только проверки и исправления, доступные непосредственно на ПК. > > Симптомы:
[!INFO] Применимость
ALT Linux 10.4–11.x · NetworkManager · локальная работа через CLI/TTY
Рассматриваются только проверки и исправления, доступные непосредственно на ПК.Симптомы:
- IPv4-адрес отсутствует;
- соединение не активируется;
- назначен адрес
169.254.x.x;- NetworkManager сообщает об ошибке DHCP.
Оглавление
- [[#Быстрый порядок действий|Быстрый порядок действий]]
- [[#Найти интерфейс и профиль|Найти интерфейс и профиль]]
- [[#Проверить физическое соединение|Проверить физическое соединение]]
- [[#Проверить настройки DHCP|Проверить настройки DHCP]]
- [[#Исправить профиль|Исправить профиль]]
- [[#Повторно запросить адрес|Повторно запросить адрес]]
- [[#Проверить журналы|Проверить журналы]]
- [[#Проверить обмен DHCP-пакетами|Проверить обмен DHCP-пакетами]]
- [[#Проверить локальную фильтрацию|Проверить локальную фильтрацию]]
- [[#Определить сторону неисправности|Определить сторону неисправности]]
- [[#Откатить изменения|Откатить изменения]]
Быстрый порядок действий
nmcli -f DEVICE,TYPE,STATE,CONNECTION device status
ip -br link
ip -br -4 address
nmcli connection show --active
journalctl -u NetworkManager -b -n 100 --no-pager
Далее:
- Проверить физический линк.
- Убедиться, что профиль использует
ipv4.method auto. - Создать резервную копию профиля.
- Очистить остаточные статические параметры.
- Переподключить профиль.
- Проверить журнал и DHCP-пакеты.
- Определить, находится ли неисправность на ПК или за его пределами.
Найти интерфейс и профиль
nmcli -f DEVICE,TYPE,STATE,CONNECTION device status
Пример:
DEVICE TYPE STATE CONNECTION
enp1s0 ethernet disconnected Проводное соединение 1
Подставить найденные значения:
IFACE="enp1s0"
PROFILE="Проводное соединение 1"
Проверить состояние устройства:
nmcli -f \
GENERAL.DEVICE,GENERAL.TYPE,GENERAL.STATE,GENERAL.REASON,GENERAL.CONNECTION \
device show "$IFACE"
Проверить, что интерфейс управляется NetworkManager:
nmcli -f DEVICE,STATE device status
Если указано unmanaged, сначала требуется устранить причину состояния unmanaged.
Проверить физическое соединение
ip link show dev "$IFACE"
cat "/sys/class/net/$IFACE/carrier"
Ожидается:
LOWER_UP
1
Проверить счётчики:
ip -s link show dev "$IFACE"
При наличии ethtool:
sudo ethtool "$IFACE"
Ожидается:
Link detected: yes
Если линка нет:
- проверить кабель;
- проверить разъёмы;
- переподключить кабель;
- проверить другой заведомо исправный кабель;
- проверить, не отключён ли интерфейс программно.
Поднять интерфейс:
sudo ip link set dev "$IFACE" up
Повторно проверить:
cat "/sys/class/net/$IFACE/carrier"
Предупреждение
Тут требуется проверка (состояния порта коммутатора, административного отключения порта и физического линка на стороне коммутатора).
Проверить настройки DHCP
nmcli -f \
connection.id,connection.interface-name,connection.autoconnect,\
ipv4.method,ipv4.addresses,ipv4.gateway,ipv4.dns,ipv4.routes \
connection show "$PROFILE"
Для DHCP ожидается:
connection.autoconnect: yes
ipv4.method: auto
ipv4.addresses: --
ipv4.gateway: --
ipv4.dns: --
ipv4.routes: --
Проверить параметры автоматической настройки:
nmcli -f \
ipv4.ignore-auto-routes,ipv4.ignore-auto-dns,ipv4.never-default,ipv4.may-fail \
connection show "$PROFILE"
Проверить привязку профиля к интерфейсу:
nmcli -g connection.interface-name connection show "$PROFILE"
Проверить фактический MAC-адрес:
nmcli -g GENERAL.HWADDR device show "$IFACE"
Проверить, не задан ли подменённый MAC-адрес:
nmcli -f 802-3-ethernet.cloned-mac-address connection show "$PROFILE"
Не изменять MAC-адрес без подтверждения: он может использоваться для DHCP-резервации или контроля доступа.
Исправить профиль
Создать резервную копию:
BACKUP="${PROFILE}-dhcp-backup-$(date +%Y%m%d-%H%M%S)"
sudo nmcli connection clone "$PROFILE" "$BACKUP"
sudo nmcli connection modify "$BACKUP" connection.autoconnect no
Перевести профиль в чистый режим DHCP:
sudo nmcli connection modify "$PROFILE" \
connection.interface-name "$IFACE" \
connection.autoconnect yes \
ipv4.method auto \
ipv4.addresses "" \
ipv4.gateway "" \
ipv4.dns "" \
ipv4.routes "" \
ipv4.ignore-auto-routes no \
ipv4.ignore-auto-dns no \
ipv4.never-default no
Настройки IPv6 этой командой не изменяются.
Повторно запросить адрес
sudo nmcli connection down "$PROFILE"
sudo nmcli connection up "$PROFILE" ifname "$IFACE"
Проверить состояние:
nmcli -f \
GENERAL.STATE,GENERAL.REASON,GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.DNS \
device show "$IFACE"
Проверить адрес и маршруты:
ip -br -4 address show dev "$IFACE"
ip -4 route
Успешный результат:
- получен адрес рабочей подсети;
- присутствует маршрут до локальной сети;
- присутствует маршрут по умолчанию, если он передаётся DHCP;
- получены DNS-серверы.
Проверить журналы
Последние сообщения NetworkManager:
journalctl -u NetworkManager -b -n 100 --no-pager
Только сообщения по DHCP и интерфейсу:
journalctl -u NetworkManager -b --no-pager \
| grep -Ei "$IFACE|dhcp4|lease|timeout|failed|carrier"
Наблюдать за повторной активацией:
sudo journalctl -fu NetworkManager
В другом терминале или TTY:
sudo nmcli connection down "$PROFILE"
sudo nmcli connection up "$PROFILE" ifname "$IFACE"
Частые сообщения:
| Сообщение | Значение |
|---|---|
carrier: link connected |
Физический линк обнаружен |
DHCP4: request timed out |
DHCP-сервер не ответил вовремя |
ip-config-unavailable |
Не удалось получить IPv4-конфигурацию |
no lease |
DHCP-аренда не получена |
carrier: link disconnected |
Физический линк пропал |
activation failed |
Профиль не удалось активировать |
Проверить обмен DHCP-пакетами
Примечание
Требуется установленная утилита tcpdump.
Запустить захват:
sudo timeout 30 tcpdump \
-ni "$IFACE" \
-e -vvv \
'udp port 67 or udp port 68'
В другом терминале или TTY переподключить профиль:
sudo nmcli connection down "$PROFILE"
sudo nmcli connection up "$PROFILE" ifname "$IFACE"
Ожидаемый обмен:
DHCPDISCOVER
DHCPOFFER
DHCPREQUEST
DHCPACK
Сохранить захват в файл:
sudo timeout 30 tcpdump \
-ni "$IFACE" \
-s 0 \
-w /tmp/dhcp-check.pcap \
'udp port 67 or udp port 68'
Прочитать файл:
sudo tcpdump -nn -e -vvv -r /tmp/dhcp-check.pcap
Проверить локальную фильтрацию
systemctl is-active firewalld
sudo nft list ruleset
Если используется iptables:
sudo iptables -S
sudo iptables -L -n -v
Искать правила DROP или REJECT, затрагивающие:
UDP 67 — DHCP-сервер
UDP 68 — DHCP-клиент
Не очищать правила и не отключать межсетевой экран целиком. Сначала определить конкретное блокирующее правило.
Проверить наличие независимых DHCP-клиентов:
ps -ef | grep -E '[d]hclient|[d]hcpcd|[u]dhcpc'
Если отдельный клиент запущен не NetworkManager, он может конфликтовать с ним.
Определить сторону неисправности
DHCPDISCOVER не выходит с ПК
Проблема находится на хосте.
Проверить:
- активность NetworkManager;
- правильность профиля;
- состояние интерфейса;
- состояние
managed; - локальную фильтрацию;
- драйвер сетевой карты;
- конфликтующий DHCP-клиент;
- журнал NetworkManager.
DHCPDISCOVER выходит, но DHCPOFFER не приходит
ПК формирует запрос правильно. Ответ отсутствует за пределами хоста.
Предупреждение
Тут требуется проверка (VLAN порта коммутатора, прохождения широковещательного DHCP-трафика, DHCP Relay и доступности DHCP-сервера).
DHCPOFFER приходит, но DHCPREQUEST не выходит
Проблема находится на хосте.
Проверить:
- журнал NetworkManager;
- локальную фильтрацию;
- выбранный профиль;
- MAC-адрес интерфейса;
- наличие второго DHCP-клиента;
- ошибки драйвера.
DHCPREQUEST выходит, но DHCPACK не приходит
Сервер получил или должен был получить запрос, но аренда не подтверждена.
Предупреждение
Тут требуется проверка (состояния DHCP-пула, резервации по MAC-адресу, политик DHCP-сервера, DHCP Snooping и прохождения ответа через DHCP Relay).
DHCPACK приходит, но адрес не применяется
Проблема находится на хосте.
journalctl -u NetworkManager -b --no-pager \
| grep -Ei "$IFACE|dhcp4|conflict|decline|failed"
Проверить наличие адреса на другом интерфейсе:
ip -br -4 address
Проверить ошибки ядра и драйвера:
journalctl -k -b --no-pager \
| grep -Ei "$IFACE|net|link|reset|timeout|firmware"
DHCP сообщает об отсутствии свободных адресов
Предупреждение
Тут требуется проверка (наличия свободных адресов в DHCP-пуле и корректности времени аренды на DHCP-сервере).
DHCP работает у других ПК, но не у текущего MAC-адреса
Зафиксировать MAC-адрес:
nmcli -g GENERAL.HWADDR device show "$IFACE"
Предупреждение
Тут требуется проверка (DHCP-резервации, блокировки MAC-адреса, Port Security, NAC и списков разрешённых устройств).
Откатить изменения
Отключить изменённый профиль:
sudo nmcli connection down "$PROFILE"
sudo nmcli connection modify "$PROFILE" connection.autoconnect no
Вернуть резервную копию:
sudo nmcli connection modify "$BACKUP" connection.autoconnect yes
sudo nmcli connection up "$BACKUP" ifname "$IFACE"
Проверить:
nmcli -f DEVICE,STATE,CONNECTION device status
ip -br -4 address
ip -4 route