No route to host в журнале службы
Сообщение No route to host (номер 113, EHOSTUNREACH) означает, что ядро не знает, куда отправить пакет, либо получило явный отказ от сети. В отличие от таймаута ответ приходит сразу.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Нет маршрута до сети назначения
Отсутствует шлюз по умолчанию или маршрут в нужную подсеть. Частая ситуация после правки сетевых настроек.
-
Брандмауэр отвечает отказом
Правило с действием reject и типом «узел недостижим» даёт именно эту ошибку.
-
Узел в другой сети без связи
Адрес не принадлежит доступным подсетям: ошибка в настройке или узел действительно недостижим.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Есть ли маршрут и через какой интерфейс пойдёт пакет.
ip route get адресТаблица маршрутов целиком: видно отсутствие шлюза.
ip routeПодтверждение и адрес назначения.
journalctl -u myapp.service -n 30 --no-pager | grep -i "no route"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Отсутствует шлюз по умолчанию или маршрут в нужную подсеть. Частая ситуация после правки сетевых настроек.
- Как проверить
-
Посмотрите таблицу маршрутов и маршрут до адреса.
ip route ip route get адрес
- Как исправить
- Добавьте нужный маршрут или шлюз по умолчанию в настройках сети — не командой, а в конфигурации, иначе он исчезнет после перезагрузки.
- Почему происходит
- Правило с действием reject и типом «узел недостижим» даёт именно эту ошибку.
- Как проверить
-
Посмотрите правила.
sudo nft list ruleset 2>/dev/null | grep -i reject | head sudo iptables -L -n | grep -i reject | head
- Как исправить
- Исправьте правило или разрешите нужное направление.
- Почему происходит
- Адрес не принадлежит доступным подсетям: ошибка в настройке или узел действительно недостижим.
- Как проверить
-
Сравните адрес узла с адресами и подсетями машины.
ip -brief addr ip route get адрес
- Как исправить
- Проверьте правильность адреса и наличие связи между сетями.
Пример вывода
Пропал шлюз по умолчанию. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
myapp[3200]: error: dial tcp <адрес>:443: connect: no route to host
$ ip route
<адрес>/24 dev eth0 proto kernel scope link src <адрес>
Связанные ошибки
- Connection timed out в журнале службы Соединение не устанавливается по таймауту: пакеты отбрасываются, узел недоступен, перегружен сервер на другой стороне.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
- Temporary failure in name resolution в журнале службы Служба не может разрешить имя: не готова сеть, нет сервера имён, мешает изоляция. Разбор при загрузке и в работе.
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Broken pipe в журнале службы Запись в закрытый канал или соединение: клиент отключился, обработчик завершился, конвейер разорван.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Connection reset by peer в журнале службы Соединение сброшено другой стороной: обрыв клиента, перезапуск сервера, промежуточное устройство.
Источники
- connect(2): ошибка EHOSTUNREACH
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено удалением шлюза по умолчанию на тестовой машине.