DNS работает, но сайт не открывается: тайна, которую раскрыл curl
Среда, 07 января 2026 13:00

DNS работает, но сайт не открывается: тайна, которую раскрыл curl

Автор
Оцените материал
(0 голосов)

Клиент позвонил в панике: "Ваш сервер сломался! Никто не может зайти на сайт!" Я проверил свой мониторинг — все сервисы в норме, сервер отвечает, база данных работает. Зашел с телефона через мобильный интернет — сайт открывается. Что происходит?

Я спросил у клиента его IP-адрес и проверил геолокацию — он находился в другом городе. Значит, проблема не глобальная, а локальная для его сети. Первое подозрение — проблемы с DNS. Но когда я попросил его выполнить nslookup example.com, он получил правильный IP-адрес моего сервера.

Следующий шаг — проверить, доходит ли трафик до сервера. Я запустил на сервере tcpdump -i eth0 port 80 -n и попросил клиента обновить страницу. В выводе tcpdump не было ни одного пакета от его IP-адреса. Значит, запросы даже не доходят до сервера.

Тогда я понял — проблема на стороне клиента или его провайдера. Но почему только у него? Я попросил его выполнить traceroute example.com. Трассировка обрывалась на 7-м хопе — шлюзе его интернет-провайдера. Значит, проблема в маршрутизации на стороне провайдера клиента.

Но как объяснить это клиенту, который уверен, что проблема на моей стороне? Я показал ему результаты диагностики, но он не верил. Тогда я предложил простой тест: открыть сайт через Cloudflare Warp (бесплатный VPN). Сайт открылся! Значит, проблема точно в маршрутизации между его провайдером и моим хостинг-провайдером.

Решение было в настройке Cloudflare как прокси перед моим сервером. Я включил проксирование в панели Cloudflare, и теперь весь трафик идет через их сеть. Даже если маршрутизация между провайдерами ломается, Cloudflare находит обходные пути.

Конкретные шаги для подобной ситуации:

  • Проверить доступность сайта с разных географических точек (можно использовать сайты вроде downdetector.com)
  • Выполнить mtr example.com вместо traceroute — это покажет, где именно теряются пакеты
  • Проверить, не блокирует ли провайдер клиента IP-адреса хостинга (иногда из-за ложных срабатываний на DDoS)
  • Настроить Cloudflare или другой CDN как буфер между сервером и пользователями

Самый ценный инструмент в такой ситуации — curl -v https://example.com. Флаг -v покажет полный процесс подключения: разрешение DNS, установка TCP-соединения, TLS handshake, HTTP-запрос. Часто именно в этом выводе видно, на каком этапе происходит сбой.

Теперь я всегда настраиваю Cloudflare для всех клиентских проектов. Это не только защита от DDoS, но и решение многих проблем с маршрутизацией, которые возникают у пользователей в разных регионах. Иногда лучшее решение — не исправлять проблему, а обойти ее.

Прочитано 55 раз