ERR_ADDRESS_UNREACHABLE, No route to host и Network is unreachable: когда до сервера нет маршрута
14 мин чтения
ERR_ADDRESS_UNREACHABLE, No route to host и Network is unreachable: когда до сервера нет маршрута

ERR_ADDRESS_UNREACHABLE, No route to host и Network is unreachable: когда до сервера нет маршрута

Chrome пишет ERR_ADDRESS_UNREACHABLE, curl и ssh — «No route to host» или «Network is unreachable», ping — «Destination Host Unreachable». Это одна ситуация с тремя именами: пакет либо некуда отправить, либо его вернул узел с запретом. Разбираем, откуда берётся каждое сообщение, почему firewalld отдаёт «No route to host» вместо «Connection refused» и какими командами найти виновника.

ERR_ADDRESS_UNREACHABLE (код -109 в Chromium), «No route to host» (EHOSTUNREACH, errno 113 в Linux) и «Network is unreachable» (ENETUNREACH, errno 101) — три формы одной ошибки: у отправителя нет маршрута до адреса назначения, либо пакет по пути упёрся в узел, который вернул ICMP Destination Unreachable. Браузер показывает первое, ядро возвращает второе или третье, а причина сидит на одном из трёх уровней: в таблице маршрутизации клиента, у промежуточного маршрутизатора или в файрволе самого сервера, отвечающем ICMP-запретом. В отличие от ERR_CONNECTION_REFUSED сервер ничего не отклонял на уровне TCP, в отличие от ERR_CONNECTION_TIMED_OUT ошибка приходит сразу, а не через десятки секунд.

Чем отличаются три сообщения: браузер, ядро и ICMP

«Network is unreachable» ядро возвращает до отправки пакета: в таблице маршрутизации нет ни одной записи под адрес назначения. «No route to host» приходит после: маршрут был, пакет ушёл, но сосед не ответил на ARP или вернулся ICMP «host unreachable» либо «administratively prohibited». Chromium, по данным файла net_errors_posix.cc, сворачивает EHOSTUNREACH, EHOSTDOWN, ENETUNREACH и EAFNOSUPPORT в один код -109, а на Windows туда же попадают WSAEHOSTUNREACH и WSAENETUNREACH. Сводка на сентябрь 2026:

Сообщение Уровень Что означает Типичная причина
ERR_ADDRESS_UNREACHABLE Chromium, -109 «IP-адрес недостижим: нет маршрута до хоста или сети» (net_error_list.h) Любая из нижеперечисленных
ERR_ADDRESS_INVALID Chromium, -108 Адрес или порт невалиден (0.0.0.0, порт 0); errno EADDRNOTAVAIL 0.0.0.0 в hosts или в DNS
Network is unreachable ENETUNREACH 101; WSAENETUNREACH 10051 Маршрута нет вообще — пакет не покинул машину Нет default route, IPv6-адрес без маршрута, упавший VPN
No route to host EHOSTUNREACH 113; WSAEHOSTUNREACH 10065 Маршрут есть, но сосед не ответил на ARP или пришёл ICMP код 1 либо 13 Хост выключен в локалке; firewalld с icmp-host-prohibited
Packet filtered ICMP тип 3, код 13 Доставка запрещена административно firewalld, nftables reject, ACL провайдера
«Общий сбой» / «Заданный узел недоступен» ping в Windows Стеку нечем отправить пакет / получен host unreachable IPv6 без связности, выключенный адаптер / хост в локалке молчит

Как ICMP Destination Unreachable превращается в errno

Маршрутизатор, который не может доставить пакет, возвращает отправителю ICMP тип 3 с кодом причины — так устроен RFC 792, а RFC 1812 уточняет правила для маршрутизаторов. Ядро Linux находит по этому пакету сокет и переводит код в errno по таблице icmp_err_convert из net/ipv4/icmp.c; для сокета в состоянии SYN_SENT вызов connect() завершается сразу, без повторных SYN.

ICMP тип 3, код Кто отправляет errno в Linux Текст ошибки
0 — net unreachable Маршрутизатор без маршрута к сети вообще (RFC 1812, 4.3.3.1) ENETUNREACH Network is unreachable
1 — host unreachable Последний маршрутизатор: сеть знает, хост не отвечает на ARP EHOSTUNREACH No route to host
3 — port unreachable Сам хост: закрытый UDP-порт, iptables REJECT без параметров ECONNREFUSED Connection refused
13 — administratively prohibited (устаревший аналог — 10) Файрвол: nftables reject admin-prohibited (13), iptables icmp-host-prohibited (10), ACL маршрутизатора EHOSTUNREACH No route to host
ICMPv6 тип 1, код 0 / 3 / 1 No route / address unreachable / admin prohibited (RFC 4443) ENETUNREACH / EHOSTUNREACH / EACCES Network is unreachable / No route to host / Permission denied

Практический вывод: «No route to host» в Linux — это и код 1 (хоста нет), и коды 10 и 13 (хост есть, файрвол запретил). Различить их можно по дампу или по выводу ping: код 13 печатается как «Packet filtered», код 10 — как «Destination Host Prohibited». По IPv6 запрет выглядит иначе — «Permission denied», потому что ICMPv6 код 1 ядро переводит в EACCES.

Что проверить на своём компьютере за две минуты

Первая команда — ip route get с адресом сайта: она отвечает, знает ли ядро, куда слать пакет, и через какой интерфейс. Вторая — тот же запрос через curl -4 и curl -6 по отдельности: половина «необъяснимых» ERR_ADDRESS_UNREACHABLE — это IPv6, который у клиента есть на бумаге, но не работает.

$ ip route get 203.0.113.10
# пример вывода: маршрут есть, пойдёт через шлюз 192.168.1.1
203.0.113.10 via 192.168.1.1 dev wlan0 src 192.168.1.23 uid 1000

$ ip route get 203.0.113.10
# пример вывода: маршрута нет вообще — default route пропал
RTNETLINK answers: Network is unreachable

$ ip route show default
# пусто — DHCP не выдал шлюз или его снёс VPN-клиент

$ ip -6 route show default
# пусто при наличии глобального IPv6-адреса — IPv6 «полуживой»

Сценарий с IPv6 — самый частый дома и в офисах после смены роутера: сайт публикует AAAA-запись, у клиента есть глобальный IPv6-адрес от router advertisement, но выхода в IPv6-интернет нет. Браузеры реализуют Happy Eyeballs (RFC 8305): предпочитают IPv6, при неудаче переключаются на IPv4 с рекомендуемой задержкой 250 мс. Если IPv6-попытка падает мгновенно с ENETUNREACH, переключение почти незаметно; если пакеты уходят в никуда — страница открывается с задержкой; в программах без Happy Eyeballs (curl без флагов, скрипты) ошибка вылезает наружу.

$ curl -6 -sv https://example.com/ -o /dev/null
# пример вывода: по IPv6 маршрута нет
*   Trying [2001:db8::10]:443...
* Immediate connect fail for 2001:db8::10: Network is unreachable
curl: (7) Failed to connect to example.com port 443

$ curl -4 -sv https://example.com/ -o /dev/null
# пример вывода: по IPv4 всё в порядке
*   Trying 203.0.113.10:443...
* Connected to example.com (203.0.113.10) port 443

Разница между «-6 не работает, -4 работает» и «оба не работают» определяет всё дальнейшее: в первом случае чините IPv6 у себя, во втором — идёте по таблице причин. Полезно прогнать и ping: по формулировке ответа видно, кто именно отказал.

$ ping -c 3 203.0.113.10
# пример вывода 1: маршрута нет — пакет не отправлен
ping: connect: Network is unreachable

# пример вывода 2: маршрут в локалку есть, но хост не отвечает на ARP.
# «From» — ваш собственный адрес: ядро сдалось после ~3 с
From 192.168.1.23 icmp_seq=1 Destination Host Unreachable

# пример вывода 3: отказал промежуточный маршрутизатор 10.20.0.1
From 10.20.0.1 icmp_seq=1 Destination Net Unreachable

# пример вывода 4: ICMP код 13 — файрвол на 203.0.113.10 или перед ним
From 203.0.113.10 icmp_seq=1 Packet filtered

$ ip neigh show 192.168.1.1
# пример вывода: шлюз не отвечает на ARP — проблема в локальной сети
192.168.1.1 dev wlan0  FAILED

Причины на клиенте, в сети и на сервере

Причины делятся на три группы по месту потери маршрута: клиент, сеть между сторонами и сервер вместе с его файрволом. Клиентские дают ошибку на всех сайтах сразу или на всех IPv6-сайтах; сетевые — из одного региона или провайдера; серверные — у всех посетителей одновременно.

Где Причина Как проверить Как исправить
Клиент Нет default route: DHCP не выдал шлюз, статика без gateway ip route show default пустой; route print без строки 0.0.0.0 Переполучить адрес по DHCP или прописать шлюз
Клиент IPv6 полуживой: адрес есть, связности нет curl -6 падает, curl -4 работает Починить IPv6 на роутере или отключить на адаптере до починки
Клиент VPN затянул маршруты (0.0.0.0/1 и 128.0.0.0/1) и упал, не отдав их назад ip route get показывает dev tun0 или wg0, туннеля нет Корректно остановить VPN-клиент, перезапустить сеть
Клиент hosts с неверным адресом: 0.0.0.0 или старый IP из локалки getent hosts example.com отличается от dig +short Удалить запись из hosts
Сеть Шлюз не отвечает на ARP: роутер завис, дубль IP ip neigh show — FAILED или INCOMPLETE у шлюза Перезагрузить роутер, найти второе устройство с тем же адресом
Сеть Провайдер или магистраль потеряли префикс сервера mtr обрывается с !N у провайдера; с телефона через мобильную сеть сайт открывается Обращение к провайдеру с трассой; владельцу сайта — к хостеру
Сеть Blackhole: адрес занулён оператором после DDoS или по ошибке Трасса упирается в один узел у всех; хостер подтверждает null-route Ждать снятия, сменить IP, включить защиту от DDoS
Сервер firewalld или iptables с REJECT --reject-with icmp-host-prohibited: порт не открыт в зоне firewall-cmd --list-all без порта; в ping «Packet filtered» или «Destination Host Prohibited» firewall-cmd --permanent --add-service=https и --reload
Сервер Неверный шлюз на VPS после миграции или смены сети Через консоль хостера: ip route get 8.8.8.8 показывает не тот шлюз Исправить gateway в netplan или ifcfg
Сервер Интерфейс DOWN или blackhole-маршрут в собственной таблице ip -br addr; ip route | grep blackhole ip link set eth0 up; удалить запись и найти, кто её добавил

Где обрывается путь, показывает трассировка: в mtr и traceroute пропавший маршрут выглядит как узел с пометкой !N (net unreachable), !H (host unreachable) или !X (admin prohibited), после которого хопов нет. Как читать mtr и WinMTR целиком — в статье про mtr и WinMTR, база — в разборе трассировки маршрута.

$ mtr -rwzc 20 203.0.113.10
# пример вывода: 4-й хоп у провайдера возвращает net unreachable —
# дальше префикс сервера никому не известен
HOST: laptop            Loss%  Snt  Last  Avg  Best  Wrst StDev
  1. AS???  192.168.1.1  0.0%   20   1.1  1.2   0.9   2.4   0.3
  2. AS64500 100.64.0.1  0.0%   20   4.8  5.1   4.2   9.7   1.1
  3. AS64500 10.20.0.1   0.0%   20   6.3  6.9   5.8  12.0   1.4
  4. AS64500 10.20.0.9 !N 0.0%  20   6.5  6.7   6.0   8.1   0.5

Почему firewalld отвечает No route to host вместо Connection refused

Потому что firewalld по умолчанию отклоняет пакеты не TCP-сбросом и не ICMP port unreachable, а ICMP «host prohibited». В исходниках firewalld (файл ipXtables.py) плейсхолдер %%REJECT%% раскрывается в REJECT --reject-with icmp-host-prohibited для IPv4 и icmp6-adm-prohibited для IPv6; бэкенд nftables использует reject with icmpx type admin-prohibited. Оба варианта ядро клиента переводит в EHOSTUNREACH, и администратор, только что поднявший nginx на CentOS Stream, Rocky, AlmaLinux или Fedora, видит «No route to host» при живом сервере и рабочей сети.

# На сервере: что открыто в активной зоне
$ sudo firewall-cmd --list-all
# пример вывода: 443 не открыт — всё, кроме ssh и dhcpv6, отбивается
public (active)
  target: default
  interfaces: eth0
  services: cockpit dhcpv6-client ssh
  ports:

# Как это выглядит в правилах (бэкенд iptables)
$ sudo iptables -L INPUT -n | tail -2
# пример вывода
ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0  tcp dpt:22 ctstate NEW
REJECT  all  --  0.0.0.0/0  0.0.0.0/0  reject-with icmp-host-prohibited

# Бэкенд nftables (по умолчанию начиная с firewalld 0.6)
$ sudo nft list chain inet firewalld filter_IN_public | tail -2
# пример вывода
    reject with icmpx admin-prohibited

# Исправление
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload

Обратная ситуация тоже встречается: REJECT без параметра отправляет icmp-port-unreachable, и клиент получает «Connection refused», хотя порт слушается — админ ищет упавший сервис, а виноват файрвол. Чем refused отличается от unreachable в деталях — в статье про ERR_CONNECTION_REFUSED.

REJECT, DROP и ICMP-prohibited: один файрвол — три разные ошибки

Одно и то же запрещающее правило показывает клиенту REFUSED, TIMED_OUT или «No route to host» в зависимости от того, что файрвол отправляет в ответ. Это единственная причина, по которой три разные ошибки Chrome могут иметь одно исправление — открыть порт.

Действие файрвола Что уходит клиенту errno / текст Chrome Через сколько
DROP Ничего ETIMEDOUT, Connection timed out ERR_CONNECTION_TIMED_OUT (-118) После повторов SYN: до 127 с в Linux при tcp_syn_retries=6, около 21 с в Windows
REJECT --reject-with tcp-reset TCP RST ECONNREFUSED, Connection refused ERR_CONNECTION_REFUSED (-102) Один RTT
REJECT (по умолчанию icmp-port-unreachable) ICMP 3/3 ECONNREFUSED, Connection refused ERR_CONNECTION_REFUSED (-102) Один RTT
REJECT --reject-with icmp-host-prohibited (firewalld) ICMP 3/10 (iptables) или 3/13 (nftables) EHOSTUNREACH, No route to host ERR_ADDRESS_UNREACHABLE (-109) Один RTT
REJECT --reject-with icmp-net-unreachable ICMP 3/0 ENETUNREACH, Network is unreachable ERR_ADDRESS_UNREACHABLE (-109) Один RTT
ip6tables REJECT icmp6-adm-prohibited ICMPv6 1/1 EACCES, Permission denied ERR_ACCESS_DENIED (-10) Один RTT

Windows и macOS: route print, netstat -rn и «Общий сбой»

На Windows аналог ip route — route print, на macOS — netstat -rn; в обоих ищут маршрут по умолчанию и шлюз рядом с ним. В русской Windows «General failure» показывается как «Общий сбой» (стеку нечем отправить пакет: нет маршрута или интерфейса, чаще по IPv6), а «Destination host unreachable» — как «Заданный узел недоступен».

C:\> route print -4 | findstr /C:"0.0.0.0"
# пример вывода: маршрут по умолчанию через 192.168.1.1, метрика 25
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.23     25
# строки с 0.0.0.0 нет — шлюз не получен

C:\> ping 203.0.113.10
# пример вывода: ответ от собственного адреса — шлюз не отвечает на ARP
Ответ от 192.168.1.23: Заданный узел недоступен.

C:\> ping -6 example.com
# пример вывода: IPv6-адрес есть, маршрута нет
PING: сбой передачи. Общий сбой.

$ netstat -rn -f inet | head -4
# macOS, пример вывода: default через 192.168.1.1 на en0
Destination   Gateway        Flags   Netif
default       192.168.1.1    UGScg   en0

Симптом → команда → что увидите → вывод

Диагностика в порядке от быстрого к медленному: команды на своей машине, трассировка, проверка с сервера. Каждая строка исключает одну гипотезу.

Симптом Команда Что увидите Вывод
Не открывается ни один сайт ip route show default / route print Пусто или шлюз из чужой подсети Нет default route: DHCP, статика, VPN
Часть сайтов с задержкой, часть с ошибкой curl -6 -sv и curl -4 -sv -6 падает или висит, -4 работает IPv6 без связности
Мгновенный «No route to host» в локальной сети ip neigh show; arp -a FAILED / INCOMPLETE у нужного адреса ARP: хост выключен, кабель, VLAN, дубль IP
Один сайт недоступен только из вашей сети mtr -rwzc 20 IP; проверка с телефона !N или !H у провайдера; с телефона открывается Маршрут потерян у провайдера
Сайт недоступен отовсюду, SSH работает firewall-cmd --list-all; iptables -L INPUT -n Порта нет; правило REJECT с icmp-host-prohibited Открыть порт в файрволе

Как понять, пропал маршрут у всех или только у части сети

Разовая проверка с одного компьютера не отличает файрвол на сервере (недоступен для всех), потерянный префикс у магистрали (недоступен для региона) и IPv6 у вас дома (недоступен только вам). Ответ даёт одновременная проверка из нескольких сетей: не отвечают отовсюду — ищите на сервере и у хостера; из части точек — у магистрального оператора или в регионе.

Пруфен выполняет проверку ping и проверку TCP-порта с интервалом от 2 минут из 20 точек мониторинга — 17 в России, а также Минск, Астана и Испания. Во вкладке «По локациям» видно, откуда маршрут пропал: красная строка по всем точкам — сервер или его аплинк, красные строки в двух-трёх городах одного оператора — сетевой инцидент, о котором нужно писать не хостеру, а провайдеру. Список точек и их адреса — на странице локаций мониторинга; адреса пригодятся, чтобы разрешить их в firewalld и не получить «Packet filtered» от собственного сервера.

Потерянный маршрут заметен раньше, чем упадут заявки

Пруфен присылает уведомление в Email, Telegram или Макс, как только проверка перестала проходить, и второе — когда доступность восстановилась. Если ресурс так и не поднялся, подключается голосовой звонок. Время обнаружения равно интервалу проверки. Бесплатный план включает 5 проверок — хватит на ping до сервера, порт 443 и главную страницу.

Частые вопросы

Чем ERR_ADDRESS_UNREACHABLE отличается от ERR_CONNECTION_REFUSED?

REFUSED (-102) означает, что SYN дошёл до машины и она ответила RST или ICMP port unreachable: маршрут в порядке, закрыт порт. UNREACHABLE (-109) — пакет либо не был отправлен из-за отсутствия маршрута, либо вернулся с ICMP host/net unreachable или administratively prohibited. Файрвол может отправить любой из этих ответов, поэтому обе ошибки на свежем сервере начинают проверять с firewall-cmd --list-all.

Почему после включения firewalld появляется No route to host, хотя сервер пингуется?

Зона public по умолчанию пропускает ICMP echo, ssh и dhcpv6-client, а всё остальное отклоняет через REJECT --reject-with icmp-host-prohibited. Ping проходит, а на SYN к порту 443 сервер отвечает ICMP типа 3 с кодом 10 или 13, что ядро клиента переводит в EHOSTUNREACH. Добавьте сервис в зону: firewall-cmd --permanent --add-service=https, затем --reload. Это особенность именно firewalld: ufw в Debian и Ubuntu по умолчанию использует DROP, и то же самое правило там даст таймаут.

Ошибка только по IPv6 — что делать?

Как пользователь: проверьте ip -6 route show default; при пустом выводе и наличии глобального адреса роутер раздаёт префикс без аплинка — обновите прошивку, отключите IPv6 на роутере или временно на адаптере. Как владелец сервера: публикуйте AAAA-запись только при рабочем IPv6 (ping -6 и curl -6 с внешней машины) и откройте порт в ip6tables или firewalld отдельно — правила для двух семейств независимы. Сломанный IPv6 на сервере хуже отсутствующего: часть клиентов получит задержку в каждом соединении, а клиенты без Happy Eyeballs — ошибку.

Помогает ли перезагрузка роутера?

Помогает в трёх случаях: зависший роутер не отвечает на ARP, переполнена его таблица соседей или NAT, роутер раздал некорректный IPv6-префикс после переподключения к провайдеру. Не помогает, если маршрут потерян у провайдера, на сервере стоит firewalld без открытого порта или в hosts прописан неверный адрес. Проверка перед перезагрузкой занимает десять секунд: ping шлюза и ip neigh show — если шлюз отвечает и запись REACHABLE, роутер ни при чём.

Была ли статья полезна?

Начните мониторинг прямо сейчас

Бесплатный тариф — до 5 проверок. 150 ₽ на баланс при регистрации.

Создать аккаунт