Вопрос или проблема
У меня есть серверы на 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
. Давайте подробнее рассмотрим, почему это происходит и как можно решить данную проблему.
Основной анализ проблемы
-
Работа нескольких DHCP клиентов: На сервере одновременно работают два DHCP клиента:
dhcpcd
иudhcpc
. Эти процессы могут конфликтовать при обновлении и переполучении IP-адресов, вызывая удаление маршрутов. -
Срок аренды IP-адреса: Согласно вашим логам,
dhcpcd
сообщает о сроке аренды IP-адреса 86400 секунд (24 часа). Примерно каждые 21 час сервер становится недоступным, что может указывать на то, что маршруты удаляются во время попыток клиентов обновить или переполучить аренду IP. -
Настройки в
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" поможет улучшить видимость статьи в поисковых системах.