Сеть: ip, curl, DNS и диагностика
Сервер не отвечает. Что делать? Звонить девопсу? Нет - сначала проверить сеть. 80% проблем на проде - это сеть, DNS или файрвол.
Проверка сетевых интерфейсов
ip addr # все интерфейсы и IP-адреса
ip addr show eth0 # конкретный интерфейс
hostname -I # только IP-адреса (коротко)
curl - главный инструмент для HTTP
curl http://localhost:8080/health # GET запрос
curl -v http://localhost:8080/health # подробно (заголовки, TLS)
curl -X POST -H "Content-Type: application/json" \
-d '{"email":"test@test.com"}' \
http://localhost:8080/api/v1/users # POST с JSON
curl -o file.tar.gz https://example.com/file.tar.gz # скачать файл
curl -w "%{http_code}" -s -o /dev/null http://localhost:8080/health # только код ответа
Флаги, которые нужны постоянно:
| Флаг | Значение |
|---|---|
-v | verbose (показать заголовки) |
-s | silent (без прогресс-бара) |
-o | output в файл |
-H | добавить заголовок |
-d | тело запроса |
-X | метод (POST, PUT, DELETE) |
-k | игнорировать ошибки SSL |
DNS - проверка доменов
dig example.com # DNS запрос (подробно)
dig +short example.com # только IP
nslookup example.com # альтернатива
host example.com # ещё альтернатива
cat /etc/resolv.conf # какие DNS-серверы используются
Проверка доступности
ping example.com # ICMP ping (Ctrl+C для остановки)
ping -c 4 example.com # 4 пакета и стоп
# Проверка TCP-порта (без ping)
nc -zv example.com 443 # можно ли подключиться к порту 443
nc -zv localhost 5432 # доступен ли PostgreSQL
# Или через curl
curl -v telnet://localhost:5432 # проверка TCP-соединения
Диагностика: маршрут до сервера
traceroute example.com # через какие узлы идёт трафик
mtr example.com # traceroute + ping в реальном времени
Файрвол
sudo ufw status # статус файрвола (Ubuntu)
sudo ufw allow 8080/tcp # открыть порт
sudo ufw deny 3306/tcp # закрыть порт
sudo iptables -L -n # правила iptables (низкоуровнево)
Скачивание файлов
wget https://example.com/file.tar.gz # скачать файл
wget -q -O - https://example.com/script.sh # вывести в stdout
curl -fsSL https://example.com/install.sh # аналог через curl
Чек-лист диагностики «сервер не отвечает»
ping server- сервер вообще жив?ss -tlnp | grep 8080- приложение слушает порт?curl -v http://localhost:8080/health- отвечает локально?sudo ufw status- файрвол не блокирует?dig +short yourdomain.com- DNS указывает на правильный IP?curl -v https://yourdomain.com/health- отвечает снаружи?
Мини-задание
- Узнай свой IP:
hostname -Iилиip addr - Проверь DNS:
dig +short google.com - Сделай HTTP-запрос:
curl -v http://httpbin.org/get - Проверь порт:
nc -zv localhost 22
Итог
curl- основной инструмент HTTP-диагностики. Выучи флаги-v,-s,-H,-d.ss -tlnp- порты.dig- DNS.ping/nc- доступность.- Чек-лист из 6 шагов покрывает 90% ситуаций «почему не работает».
Типичная ошибка
Паниковать и перезагружать сервер, когда приложение не отвечает. Перезагрузка - это не диагностика. Сначала пройди чек-лист, найди причину, потом действуй.
Мини-практика
Подними любой HTTP-сервер локально (например, встроенный сервер PHP - php -S localhost:9090). Проверь через curl -v http://localhost:9090. Посмотри заголовки ответа. Потом останови сервер и повтори curl - увидишь Connection refused. Запомни, как выглядит разница между «сервис не отвечает» и «сервис не запущен».