Сеть: ip, curl, DNS и диагностика

Сервер не отвечает. Что делать? Звонить девопсу? Нет - сначала проверить сеть. 80% проблем на проде - это сеть, DNS или файрвол.

Проверка сетевых интерфейсов

ip addr                    # все интерфейсы и IP-адреса
ip addr show eth0          # конкретный интерфейс
hostname -I                # только IP-адреса (коротко)
`ifconfig` всё ещё работает, но `ip` - современная замена. На минимальных образах (Alpine, Docker) `ifconfig` может отсутствовать.

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  # только код ответа

Флаги, которые нужны постоянно:

ФлагЗначение
-vverbose (показать заголовки)
-ssilent (без прогресс-бара)
-ooutput в файл
-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-серверы используются
После смены DNS-записи изменения могут не появиться сразу. TTL (Time To Live) определяет, сколько кеш живёт. Для проверки свежих записей: `dig @8.8.8.8 example.com` - запрос напрямую к Google 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 (низкоуровнево)
Если закроешь SSH-порт - потеряешь доступ к серверу. Всегда проверяй правила перед применением. `ufw allow 22/tcp` должен быть первым правилом.

Скачивание файлов

wget https://example.com/file.tar.gz         # скачать файл
wget -q -O - https://example.com/script.sh   # вывести в stdout
curl -fsSL https://example.com/install.sh     # аналог через curl

Чек-лист диагностики «сервер не отвечает»

  1. ping server - сервер вообще жив?
  2. ss -tlnp | grep 8080 - приложение слушает порт?
  3. curl -v http://localhost:8080/health - отвечает локально?
  4. sudo ufw status - файрвол не блокирует?
  5. dig +short yourdomain.com - DNS указывает на правильный IP?
  6. 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. Запомни, как выглядит разница между «сервис не отвечает» и «сервис не запущен».

Зарегистрируйтесь бесплатно, чтобы пройти квиз, решить задание с автопроверкой и вести прогресс.