Восстановление маршрута по умолчанию при 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