NetworkManager: когда DHCP не работает, как либо игнорировать истечение срока действия аренды, либо использовать статическую конфигурацию в качестве временного резервного варианта.

Вопрос или проблема

Мы разворачиваем устройства (Linux с NetworkManager) в IPv4 сетях, которые мы не контролируем. Некоторые из них имеют ненадежные DHCP-сервисы (например, сомнительные роутеры), которые могут исчезнуть на время, превышающее время аренды, которое они выдают.

Могу ли я настроить NetworkManager для данного интерфейса так, чтобы, если DHCP-сервис не отвечает на наши запросы на продление аренды и обнаружение DHCP, он бы …

  • [A] либо игнорировал истечение срока аренды и продолжал использовать текущие настройки IPv4 (преимущество: меньшая вероятность столкновения адресов)

или

  • [B] переключался на статическую конфигурацию (преимущество: работает в случае перезагрузки, когда DHCP недоступен)

Но только пока DHCP-сервис недоступен! NM должен продолжать попытки получить аренду DHCP и, как только это будет успешно, отменить вышеуказанный резерв.

Я осведомлен о функции autoconnect-priority/autoconnect-retries в NM (см. например, https://askubuntu.com/a/1225863 ), но, похоже, что как только резерв срабатывает, он больше не пытается снова использовать DHCP без внешнего вмешательства (например, перезагрузки).

Ответ или решение

В вашей ситуации имеется задача обеспечения стабильного подключения устройств к сети с ненадежной службой DHCP, что может привести к утрате IP-адресов, выданных через DHCP. Рассмотрим, как можно настроить NetworkManager, чтобы обеспечить работу в условиях временного отсутствия DHCP сервера.

Теория: как работает NetworkManager в условиях нестабильного DHCP

NetworkManager — это мощная утилита для управления сетевыми подключениями в Linux. Она поддерживает динамическую конфигурацию через DHCP и может поддерживать статические конфигурации для сетевых интерфейсов. При использовании DHCP, NetworkManager регулярно отправляет запросы на обновление аренды IP-адреса перед истечением срока его действия. Однако, если DHCP сервер не отвечает, возможно потеря соединения.

Пример: Стандартное поведение

При стандартных настройках NetworkManager после истечения аренды IP-адреса, если сервер DHCP не отвечает, интерфейс теряет свои настройки IP и остаётся без соединения. Это может вызвать сбои в работе устройств, особенно когда DHCP серверы ненадежны или временно недоступны.

Применение: Как настроить NetworkManager для непрерывной работы при сбоях DHCP

Для решения поставленной задачи существует несколько подходов:

1. Игнорирование истечения аренды (Опция A)

На данный момент, NetworkManager не имеет встроенной возможности игнорировать истечение аренды IP без потери соединения. Это связано с тем, что такие действия могут привести к проблемам, например, конфликту IP-адресов, если DHCP сервер раздаст такой же адрес другому устройству. Тем не менее, можно использовать скрипты и службы мониторинга для постоянной проверки доступности DHCP.

2. Использование статической конфигурации при отсутствии DHCP (Опция B)

NetworkManager можно настроить таким образом, чтобы он переключался на статическую конфигурацию, если DHCP перестал отвечать:

  1. Создание резервной статической конфигурации:

    • Откройте конфигурационный файл NetworkManager для соответствующего интерфейса в /etc/NetworkManager/system-connections и добавьте профиль с статической конфигурацией IP.
  2. Использование комплексных сценариев и служб:

    • Можно создать сервисный скрипт, который будет отслеживать состояние DHCP и автоматически переключать настройки в случае его недоступности. Например, через использование NetworkManager dispatcher scripts, которые запускаются при изменении состояния сети.
  3. Настройка постоянных проверок:

    • Используйте команду nmcli для периодической проверки статуса подключения и, при необходимости, принудительного переключения:
      nmcli con up id "Static Profile" ifname eth0
  4. Автоматический возврат к DHCP:

    • Как только DHCP снова станет доступен, скрипты могут переключить профиль обратно. Это может быть реализовано также через dispatcher скрипт, реагирующий на события восстановления DHCP.

Пример сценария для dispatcher.d может выглядеть так:

#!/bin/bash

interface=$1
event=$2

case "$event" in
up)
    # Проверяем если подключения по DHCP еще не установлено
    dhclient -r $interface
    dhclient $interface
    ;;
down)
    # Попытка использовать статический IP
    nmcli con up id "Static Profile" ifname $interface
    ;;
pre-up)
    # Попробуйте заново установить соединение по DHCP
    nmcli con down id "$CON_NAME"
    ;;
esac

Этот сценарий следует разместить в папке /etc/NetworkManager/dispatcher.d/ и сделать его исполняемым. Он будет мониторить DHCP-события и переключать на статическую конфигурацию в случае сбоя.

Заключение

Реализация вышеописанных решений требует внимания к возможным ограничениям сети, например, к прописанным правилам маршрутизации, разрешениям на IP-адреса и прочим политическим ограничениям в сети клиента. Чтобы избежать конфликтов IP-адресов, рекомендуется работать в тесной связи с сетевыми администраторами и, при возможности, тестировать решения в контролируемой среде до их развертывания на продуктиве. Заранее оцените риски конфликтов адресов и примите меры для их минимизации.

Оцените материал
Добавить комментарий

Капча загружается...