Подробный гайд: Разбираем причины и способы устранения ошибки «No route to host»
1. Что такое «No route to host»
Ошибка «No route to host» (в Linux/Unix системах часто обозначается как EHOSTUNREACH) возникает, когда операционная система не может определить маршрут для доставки пакета к удалённому хосту. Это означает, что на каком-то этапе сетевого взаимодействия (обычно на уровне IP-маршрутизации или ARP-разрешения) произошёл сбой: либо локальная таблица маршрутизации не содержит подходящего маршрута, либо промежуточный маршрутизатор (или сам удалённый хост) вернул ICMP-сообщение «Host Unreachable».
Важно отличать эту ошибку от «Network is unreachable» (сеть недоступна). Вторая обычно указывает на отсутствие маршрута до целой сети, а первая — на то, что маршрут до сети существует, но конкретный хост в этой сети недоступен (например, из-за проблем на канальном уровне или из-за блокировки межсетевым экраном).
2. Типичные причины возникновения
2.1. Отсутствие маршрута в таблице маршрутизации
- Нет маршрута по умолчанию (default gateway) или маршрута до конкретной сети.
- Неправильно указан шлюз или интерфейс в маршруте.
- Ошибка в конфигурации сетевого интерфейса (нет IP-адреса, некорректная маска подсети).
2.2. Проблемы на канальном уровне (ARP)
- Хост находится в той же локальной сети, но не отвечает на ARP-запросы (выключен, отключён кабель, неисправен сетевой адаптер).
- Коммутатор или точка доступа блокируют трафик (VLAN, изоляция клиентов, фильтрация MAC-адресов).
2.3. Межсетевые экраны и фильтры
- Локальный брандмауэр (iptables, nftables, firewalld, ufw) блокирует исходящие пакеты и возвращает ICMP-сообщение «Host prohibited».
- Промежуточный маршрутизатор или брандмауэр отбрасывает пакеты и отправляет ICMP «Host Unreachable».
2.4. Удалённый хост или сеть недоступны
- Удалённый сервер выключен, но маршрутизатор сети отвечает ICMP «Host Unreachable».
- В удалённой сети нет маршрута обратно к отправителю (асимметричная маршрутизация).
2.5. Проблемы с Policy routing
- Правила policy routing (ip rule) направляют трафик не в ту таблицу маршрутизации.
2.6. Использование разных версий IP
- Попытка подключиться к IPv6-адресу, когда IPv6 не настроен или маршрут отсутствует (и наоборот).
2.7. Неправильная настройка сетевых параметров
- Некорректная маска подсети приводит к тому, что хост считается находящимся в другой сети, и трафик уходит на шлюз, который не может его доставить.
- Отсутствие IP-адреса на интерфейсе.
3. Диагностика ошибки
Для выявления причины используйте следующие команды (выполняйте с правами root, где необходимо).
3.1. Проверка таблицы маршрутизации
ip route show
# или
route -n
Обратите внимание:
- Есть ли маршрут по умолчанию (
default via <шлюз> dev <интерфейс>). - Есть ли маршрут до сети, в которой находится целевой хост.
- Правильно ли указан интерфейс и шлюз.
3.2. Проверка IP-адресов интерфейсов
ip addr show
# или
ifconfig -a
Убедитесь, что интерфейс поднят (state UP), имеет корректный IP-адрес и маску.
3.3. Проверка доступности шлюза
ping <IP-шлюза>
Если шлюз не пингуется, проблема может быть на локальном уровне (кабель, коммутатор, настройки интерфейса).
3.4. Трассировка маршрута
traceroute <IP-цели>
# или
tracepath <IP-цели>
Покажет, до какого узла доходят пакеты. Если трассировка обрывается на определённом маршрутизаторе, проблема вероятнее всего на нём или за ним.
3.5. Проверка ARP-таблицы
ip neigh show
Если целевой хост в локальной сети, проверьте, есть ли для него запись в ARP-таблице и в каком состоянии она находится (REACHABLE, STALE, FAILED). Если состояние FAILED или запись отсутствует — хост не отвечает на ARP.
3.6. Анализ брандмауэра
# iptables
iptables -L -n -v
# nftables
nft list ruleset
# firewalld
firewall-cmd --list-all
# ufw
ufw status verbose
Ищите правила, которые могут блокировать исходящий трафик или ICMP.
3.7. Захват пакетов
tcpdump -i <интерфейс> host <IP-цели> and icmp
Позволяет увидеть, отправляются ли пакеты и приходят ли ICMP-ответы (например, «Host unreachable»).
3.8. Проверка правил policy routing
ip rule show
Если есть нестандартные правила, проверьте соответствующие таблицы маршрутизации:
ip route show table <номер_или_имя>
3.9. Проверка доступности порта (если приложение сообщает об ошибке)
Иногда ошибка «No route to host» появляется при попытке подключения к конкретному порту, но на самом деле проблема в другом.
Используйте telnet, nc или nmap для проверки:
nc -zv <IP> <порт>
Если соединение не устанавливается и выводится «No route to host», значит проблема на сетевом уровне.
4. Способы устранения
4.1. Добавление недостающего маршрута
Если отсутствует маршрут по умолчанию:
ip route add default via <IP-шлюза> dev <интерфейс>
Для конкретной сети:
ip route add <сеть>/<маска> via <IP-шлюза> dev <интерфейс>
Чтобы изменения сохранились после перезагрузки, отредактируйте конфигурационные файлы (например, /etc/network/interfaces, /etc/sysconfig/network-scripts/ifcfg-*, Netplan, systemd-networkd).
4.2. Исправление конфигурации интерфейса
- Убедитесь, что интерфейс поднят:
ip link set <интерфейс> up. - Назначьте корректный IP-адрес и маску:
ip addr add <IP>/<маска> dev <интерфейс>. - Проверьте, что в конфигурации нет опечаток.
4.3. Настройка брандмауэра
- Временно отключите брандмауэр для проверки:
systemctl stop firewalld # для firewalld
ufw disable # для ufw
iptables -F # очистить правила iptables (осторожно!)
- Если после этого ошибка исчезает, добавьте разрешающие правила для нужного трафика.
4.4. Проверка удалённого хоста
- Убедитесь, что удалённый сервер включён и подключён к сети.
- Проверьте, отвечает ли он на ping (если ICMP разрешён).
- Проверьте, не блокирует ли его собственный брандмауэр.
4.5. Решение проблем на канальном уровне
- Проверьте физическое подключение (кабели, порты, индикаторы).
- Проверьте настройки VLAN на коммутаторе.
- Если используется Wi-Fi, убедитесь, что клиенты не изолированы друг от друга (AP isolation).
4.6. Policy routing
- Проверьте, не перекрывают ли правила ip rule стандартную маршрутизацию. При необходимости удалите лишние правила или измените приоритеты.
4.7. Проверка IPv6
- Если используется IPv6, проверьте таблицу маршрутизации IPv6:
ip -6 route show
- При необходимости добавьте маршрут:
ip -6 route add default via <IPv6-шлюза> dev <интерфейс>
4.8. Перезапуск сетевых служб
Иногда помогает перезапуск сетевого стека:
systemctl restart networking # Debian/Ubuntu
systemctl restart network # CentOS/RHEL (или systemctl restart NetworkManager)
5. Типичные сценарии и их решение
Сценарий 1: Хост в локальной сети не отвечает
Симптом: ping 192.168.1.10 выдаёт «Destination Host Unreachable» или приложение получает «No route to host».
Причина: Хост выключен, или не отвечает на ARP.
Диагностика: ip neigh show показывает FAILED для IP.
Решение: Включить хост, проверить кабель, сетевые настройки хоста, убедиться, что он в той же VLAN.
Сценарий 2: Нет маршрута по умолчанию
Симптом: При обращении к адресу вне локальной сети получаем «No route to host».
Диагностика: ip route show не содержит строки default via ....
Решение: Добавить маршрут по умолчанию и прописать его в конфигурации.
Сценарий 3: Брандмауэр блокирует трафик
Симптом: Подключение к определённому порту на удалённом сервере даёт «No route to host», хотя ping проходит.
Причина: Локальный или промежуточный брандмауэр отправляет ICMP «Host prohibited».
Диагностика: В tcpdump видны ICMP-сообщения типа 3, код 10/13 (administratively prohibited).
Решение: Настроить брандмауэр, разрешив нужный трафик.
6. Важно
Ошибка «No route to host» — это индикатор проблемы на сетевом уровне, связанной с маршрутизацией, канальным уровнем или фильтрацией трафика. Систематическая диагностика (проверка маршрутов, ARP, брандмауэра, трассировка) позволяет быстро локализовать причину. В большинстве случаев достаточно добавить недостающий маршрут, исправить настройки интерфейса или скорректировать правила межсетевого экрана.
Если после выполнения всех шагов ошибка сохраняется, обратите внимание на более редкие причины: асимметричную маршрутизацию, проблемы с аппаратным обеспечением (сетевые карты, коммутаторы) или ошибки в конфигурации вышестоящих маршрутизаторов.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.