Почему dhcpcd удаляет маршруты?

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

У меня есть серверы на Hetzner с Ubuntu 24.04, только с частной сетью. Каждые 21 час из таблицы удаляются некоторые маршруты, и сервер становится недоступным. После перезагрузки из интерфейса все работает как положено.

Я нашел логи:

# journalctl -b -1
...
May 29 06:01:19 k8s-control-plane-1 dhcpcd[739]: enp7s0: не удалось обновить DHCP, повторное подключение
May 29 06:01:19 k8s-control-plane-1 dhcpcd[739]: enp7s0: арендован 10.0.0.10 на 86400 секунд
May 29 06:01:19 k8s-control-plane-1 dhcpcd[739]: enp7s0: pid 0 удалил маршрут к 169.254.169.254 через 10.0.0.1
May 29 06:01:19 k8s-control-plane-1 dhcpcd[739]: enp7s0: pid 0 удалил маршрут к 10.0.0.1
May 29 06:01:19 k8s-control-plane-1 dhcpcd[739]: enp7s0: pid 0 удалил маршрут к 10.0.0.0/16 через 10.0.0.1
...

Не уверен, что вызывает dhcpcd, так как нет включенных служб dhcpcd:

/etc/cron.daily# systemctl | grep dhcp
/etc/cron.daily# systemctl list-timers | grep dhcp
/etc/cron.daily# ls 
apport  apt-compat  dpkg  logrotate  man-db  sysstat

Запуск dhcpcd вручную восстанавливает ожидаемую конфигурацию:

# dhcpcd
dhcpcd-10.0.6 запускается
dev: загружен udev
DUID 00:01:00:01:2d:d0:9b:4b:86:00:00:89:c0:2b
enp7s0: IAID 00:89:c0:2b
vxlan.calico: IAID aa:0c:c0:c3
cali910aa9fb4e0: IAID ee:ee:ee:ee
cali910aa9fb4e0: IAID конфликтует с назначенной caliec31db02b64
caliec31db02b64: IAID ee:ee:ee:ee
caliec31db02b64: IAID конфликтует с назначенной cali910aa9fb4e0
vxlan.calico: запрашивает IPv6 маршрутизатор
cali910aa9fb4e0: запрашивает IPv6 маршрутизатор
enp7s0: запрашивает IPv6 маршрутизатор
caliec31db02b64: запрашивает IPv6 маршрутизатор
caliec31db02b64: запрашивает DHCP аренду
cali910aa9fb4e0: запрашивает DHCP аренду
enp7s0: повторное подключение аренды 10.0.0.10
enp7s0: арендован 10.0.0.10 на 86400 секунд
enp7s0: добавление хост-маршрута 10.0.0.1
enp7s0: добавление маршрута к 10.0.0.0/16 через 10.0.0.1
enp7s0: добавление хост-маршрута к 169.254.169.254 через 10.0.0.1

Информация о аренде также в порядке:

# dhcpcd --dumplease --ipv4only enp7s0
reason=REBOOT
interface=enp7s0
protocol=dhcp
ip_address=10.0.0.10
subnet_cidr=32
broadcast_address=10.0.0.10
network_number=10.0.0.10
subnet_mask=255.255.255.255
classless_static_routes=10.0.0.1/32 0.0.0.0 10.0.0.0/16 10.0.0.1 169.254.169.254/32 10.0.0.1
routers=10.0.0.1
interface_mtu=1450
dhcp_lease_time=86400
dhcp_message_type=5
dhcp_server_identifier=10.0.0.1
ms_classless_static_routes=10.0.0.1/32 0.0.0.0 10.0.0.0/16 10.0.0.1 169.254.169.254/32 10.0.0.1

/etc/dhcpcd.conf не изменялся и содержит следующие значения по умолчанию:

duid
persistent
vendorclassid
option domain_name_servers, domain_name, domain_search
option classless_static_routes
option interface_mtu
option host_name
option rapid_commit
require dhcp_server_identifier
slaac private

Проблема возникает только на 2 из 20 серверов. Эти серверы настроены одинаково.

Сервер работает как управляющая плоскость Kubernetes с Calico CNI.

в моем случае я наконец узнал, что на том же интерфейсе работает процесс udhcpc, я убил этот процесс, и больше не было найдено “pid 0 удалил маршрут …”.

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

Возможная причина, по которой dhcpcd удаляет маршруты, может заключаться в конфликтах, возникающих из-за работы нескольких DHCP клиентов на одном и том же интерфейсе. В данном случае вы обнаружили, что процесс udhcpc также работал на том же интерфейсе, что и dhcpcd. Давайте подробнее рассмотрим, почему это происходит и как можно решить данную проблему.

Основной анализ проблемы

  1. Работа нескольких DHCP клиентов: На сервере одновременно работают два DHCP клиента: dhcpcd и udhcpc. Эти процессы могут конфликтовать при обновлении и переполучении IP-адресов, вызывая удаление маршрутов.

  2. Срок аренды IP-адреса: Согласно вашим логам, dhcpcd сообщает о сроке аренды IP-адреса 86400 секунд (24 часа). Примерно каждые 21 час сервер становится недоступным, что может указывать на то, что маршруты удаляются во время попыток клиентов обновить или переполучить аренду IP.

  3. Настройки в dhcpcd.conf: Содержимое файла конфигурации dhcpcd.conf выглядит стандартным и не вызывает подозрений. Однако конфликтующие клиенты могут игнорировать или изменять конфигурацию, что приводит к непредсказуемому поведению.

Предложенное решение

  • Устранение конфликта между DHCP клиентами: Убедитесь, что только один DHCP клиент управляет конфигурацией сети на интерфейсе enp7s0. Если dhcpcd является предпочтительным клиентом, отключите или удалите udhcpc с сервера. Это можно сделать с помощью остановки и отключения сервиса udhcpc:

    sudo pkill udhcpc         # Если процесс запущен
    sudo systemctl stop udhcpc.service
    sudo systemctl disable udhcpc.service
  • Проверка DHCP lease и маршрутизации: При необходимости вручную обновите настройки DHCP и маршрутизации после отключения лишнего клиента:

    sudo dhcpcd enp7s0
    ip route
  • Проверка логов: После изменений наблюдайте за логами системы, чтобы убедиться, что маршруты больше не удаляются:

    journalctl -u dhcpcd -f

Заключение

Устранение этой проблемы связано с конфигурацией единственного клиента DHCP на интерфейсе, чтобы предотвратить удаление маршрутов и обеспечить стабильное сетевое соединение. Не забывайте, что несмотря на стандартизированные настройки, любые изменения в конфигурации сети требуют тщательного тестирования на всех серверах.

Оптимизация SEO

Использование релевантных ключевых слов, таких как "удаление маршрутов dhcpcd", "конфликт DHCP клиентов", "решение проблем сетевой конфигурации Ubuntu" поможет улучшить видимость статьи в поисковых системах.

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

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