Блог "Дети ОИТа"
/поиск

Восстановление маршрута по умолчанию при DHCP через `nmcli`

> [!INFO] Применимость > **ALT Linux 10.4–11.x** · **NetworkManager** · локальная работа через CLI/TTY > IPv4-адрес, шлюз, DNS и маршруты должны поступать от DHCP (Dynamic Host Configuration Protoco

[!INFO] Применимость
ALT Linux 10.4–11.x · NetworkManager · локальная работа через CLI/TTY
IPv4-адрес, шлюз, DNS и маршруты должны поступать от DHCP (Dynamic Host Configuration Protocol).

Оглавление

  • [[#Проверить состояние|Проверить состояние]]
  • [[#Найти интерфейс и профиль|Найти интерфейс и профиль]]
  • [[#Проверить параметры профиля|Проверить параметры профиля]]
  • [[#Сохранить резервную копию|Сохранить резервную копию]]
  • [[#Исправить профиль|Исправить профиль]]
  • [[#Применить настройки|Применить настройки]]
  • [[#Проверить результат|Проверить результат]]
  • [[#Если маршрут не появился|Если маршрут не появился]]
  • [[#Откатить изменения|Откатить изменения]]

Проверить состояние

Проверить адрес и таблицу маршрутизации:

ip -4 address
ip -4 route
ip -4 route show default

Проблема подтверждена, если ПК получил адрес из сети 10.0.0.0/24, но команда:

ip -4 route show default

не выводит маршрут вида:

default via <шлюз> dev <интерфейс>

Найти интерфейс и профиль

nmcli -f DEVICE,TYPE,STATE,CONNECTION device status

Пример:

DEVICE  TYPE      STATE      CONNECTION
enp1s0  ethernet  connected  Проводное соединение 1

Подставить найденные значения:

IFACE="enp1s0"
PROFILE="Проводное соединение 1"

Проверить активный профиль:

nmcli connection show --active

Проверить параметры профиля

nmcli -f \
ipv4.method,ipv4.gateway,ipv4.routes,ipv4.never-default,ipv4.ignore-auto-routes,ipv4.route-table \
connection show "$PROFILE"

Для получения маршрута по умолчанию через DHCP должны использоваться значения:

ipv4.method:                auto
ipv4.never-default:         no
ipv4.ignore-auto-routes:    no
ipv4.route-table:           0

Маршрут блокируется, если установлено:

ipv4.never-default:         yes

или:

ipv4.ignore-auto-routes:    yes

Сохранить резервную копию

BACKUP="${PROFILE}-route-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" \
  ipv4.method auto \
  ipv4.gateway "" \
  ipv4.never-default no \
  ipv4.ignore-auto-routes no \
  ipv4.route-table 0

Команда:

  • оставляет получение IPv4 через DHCP;
  • удаляет сохранённый ручной шлюз;
  • разрешает маршрут по умолчанию;
  • разрешает применение маршрутов от DHCP;
  • возвращает маршруты в стандартную таблицу маршрутизации.

Примечание

Существующие ручные маршруты из ipv4.routes этой командой не удаляются.

Применить настройки

Переподключить профиль для повторного получения DHCP-параметров:

sudo nmcli connection down "$PROFILE"
sudo nmcli connection up "$PROFILE" ifname "$IFACE"

Проверить результат

Проверить полученные параметры:

nmcli -f \
GENERAL.STATE,GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.ROUTE,IP4.DNS \
device show "$IFACE"

Проверить маршрут по умолчанию:

ip -4 route show default

Ожидаемый результат:

default via <шлюз_из_DHCP> dev <интерфейс> proto dhcp

Проверить выбор маршрута:

ip -4 route get 1.1.1.1

Проверить доступность шлюза:

GATEWAY="$(nmcli -g IP4.GATEWAY device show "$IFACE" | head -n 1)"
ping -c 3 "$GATEWAY"

Проверить внешний адрес и DNS:

ping -c 3 1.1.1.1
getent hosts <имя_доменного_ресурса>

Если маршрут не появился

Проверить, передал ли DHCP-сервер адрес шлюза:

nmcli device show "$IFACE" | grep -Ei '^DHCP4\.OPTION.*(router|gateway)'

Проверить все полученные DHCP-параметры:

nmcli -f DHCP4 device show "$IFACE"

Шлюз присутствует в DHCP-параметрах

Повторно проверить профиль:

nmcli -f \
ipv4.method,ipv4.never-default,ipv4.ignore-auto-routes,ipv4.route-table \
connection show "$PROFILE"

Проверить, не активирован ли другой профиль:

nmcli connection show --active

Просмотреть последние сообщения NetworkManager:

journalctl -u NetworkManager -b --no-pager \
  | grep -Ei "$IFACE|dhcp4|route" \
  | tail -n 50

Шлюз отсутствует в DHCP-параметрах

Локальная настройка ПК исправна, но DHCP-сервер не передал маршрут по умолчанию.

Зафиксировать данные:

nmcli -f DHCP4 device show "$IFACE"
ip -4 address show dev "$IFACE"
ip -4 route

В этом случае требуется исправление параметров DHCP-сервера или сетевого сегмента. Назначать неизвестный шлюз вручную нельзя.

Откатить изменения

Отключить изменённый профиль:

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 \
GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.ROUTE \
device show "$IFACE"

ip -4 route