Введение

Часть 7

Сеть без гаданий: диагностируйте по одному уровню

Терминал особенно удобен для диагностики сети, потому что каждый слой можно увидеть отдельно. Задача не в том, чтобы выучить теорию сетей, а в том, чтобы понимать, какой следующий вопрос задать, когда запрос не работает.

Запрос к сайту состоит из нескольких маленьких вопросов

До того как браузер покажет страницу, имя должно разрешиться в адрес, на нужном порту должен отвечать сервис, TLS при HTTPS должен установить доверенное соединение, а HTTP — вернуть ответ. Ошибка на разных уровнях может выглядеть одинаково, если видеть только финальное сообщение браузера.

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

Имя — это не адрес

dns спрашивает, какие DNS-записи связаны с именем хоста. ip разбирает адрес или сеть математически и умеет показать адрес текущего посетителя или сервера. Документационный диапазон 192.0.2.10/24 удобен, чтобы понять префикс, маску и диапазон без зависимости от живого сервиса.

Если DNS вернул адрес, это доказывает только работу разрешения имени. Это ещё не означает, что на адресе отвечает веб-сервер — выводы по уровням нужно держать раздельно.

install ping dns ip tcp curl cert net geo
dns example.com -a -aaaa
ip 192.0.2.10/24
ip server

В lil-terminal `ping` — это HTTP-проверка доступности

В Linux, macOS и Windows слово ping обычно связано с ICMP echo. В lil оно намеренно означает удобную для хостинга HTTP-проверку: код ответа, конечный URL, время ответа и разрешённые IP-адреса. Эту разницу важно помнить при сравнении результатов с системным терминалом.

Используйте -t, когда вопрос звучит «отвечает ли HTTP-адрес, куда он в итоге перенаправил запрос и сколько это заняло?». -i полезен, когда нужен именно контекст разрешённых IPv4/IPv6-адресов.

ping https://example.com -t
ping example.com -i

Доступный адрес ещё не означает нужный сервис и доверие

tcp example.com 443 -tls -i проверяет, открывается ли TLS-соединение на 443 и показывает детали. cert -h example.com отдельно рассматривает удалённый сертификат. Порт 80 — уже другой вопрос о сервисе.

Не превращайте -k в способ «починить» TLS. Отключение проверки полезно только как диагностика: оно может подтвердить, что проблема именно в проверке сертификата, но не должно превращать небезопасное соединение в норму.

tcp example.com 443 -tls -i
cert -h example.com
tcp example.com 80

HTTP-заголовки часто объясняют то, что скрывает браузер

curl -I показывает заголовки без тела, -i — заголовки вместе с телом, а явный тайм-аут ограничивает эксперимент. Ответ можно сохранить на хостинге, если дальше его нужно сравнить или обработать другими командами.

Перенаправления, Content-Type, заголовки кеширования и фактический код ответа становятся понятнее, когда вы читаете протокол, а не только отрисованную страницу.

curl https://example.com -I
curl https://example.com -i -t 10
curl https://example.com -o network-example.html

Локальные интерфейсы и GeoIP — это контекст, а не доказательство

net показывает интерфейсы, видимые PHP-среде. geo может добавить географический и сетевой контекст от провайдера, если эта возможность доступна. GeoIP приблизителен, может отсутствовать и отличаться у разных источников.

Используйте такую информацию только как диагностический контекст. Местоположение IP — оценка сети, а не утверждение о личности человека.

net -l
net -4
geo example.com -c

Сохраните ту последовательность проверки, которая действительно помогла

Если вы регулярно проверяете один и тот же хост, сохраните рабочую цепочку: HTTP-доступность, DNS, TLS-порт, заголовки, сертификат. На другом сервере вы зададите те же вопросы и сможете сравнить ответы вместо того, чтобы снова изобретать диагностику.

Это хороший пример того, зачем сценарии сохраняют знания. Они не «чинят сеть», а сохраняют дисциплинированный способ её наблюдать.

Сохраните это как сценарий

Сохраните блок как network-check.lil. Он выполняет пять проверок example.com без изменения данных, каждая отвечает за свой слой. Меняйте имя хоста только тогда, когда осознанно хотите диагностировать другой сервис.

#lil
@install ping dns tcp curl cert
ping https://example.com -t
dns example.com -a -aaaa
tcp example.com 443 -tls
curl https://example.com -I
cert -h example.com