Как проверить сетевое соединение между хостами в Linux?

«Как проверить сетевое соединение между хостами в Linux?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-практике проверка сетевой связности — это базовая операция диагностики. Я использую комбинацию инструментов в зависимости от задачи:

1. Базовая доступность (ICMP):

ping -c 4 <target_host_or_ip>

Флаг -c задаёт количество пакетов. Если пинг не проходит, проверяю правила сетевого экрана (iptables, nftables) и настройки security groups в облаке.

2. Проверка конкретного TCP/UDP порта:

# Использую netcat (nc) для быстрой проверки
nc -zv <target_ip> <port>

# Или, если нужно проанализировать весь маршрут и задержки
mtr --tcp --port <port> <target_host>

3. Анализ сетевого пути:

traceroute -T -p <port> <target_host>  # Для TCP
# Или
tracepath <target_host>

Это помогает выявить, на каком участке (внутри VPC, у провайдера) возникает проблема.

4. Проверка существующих соединений и открытых портов на локальной машине:

ss -tulnp | grep <port_or_service_name>
# ss — современная замена netstat, показывает детали процесса

5. Для веб-сервисов добавляю проверку уровня приложения:

curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 http(s)://<target_host>:<port>/health

Важно: В инфраструктуре как код (IaC) я автоматизирую эти проверки с помощью скриптов (Bash/Python) или инструментов вроде nmap в CI/CD пайплайнах для валидации развёртывания.