TCP/IP - набор взаимосвязанных протоколов, который задает адресацию узлов, выбор маршрута, доставку трафика и передачу его нужному приложению. Когда клиент обращается к сервису, данные проходят прикладной, транспортный, межсетевой и канальный уровни: имя разрешается через DNS, TCP или UDP добавляет порты, IP выбирает путь, Ethernet или Wi-Fi доставляет кадр следующему сетевому устройству.
Для администратора стек TCP/IP дает рабочую схему поиска неисправностей. Если сервис недоступен, нужно последовательно проверить интерфейс, IP-адрес, маршрут, DNS, порт, правила firewall и само приложение. Сбой на любом из этих этапов может выглядеть как одна и та же ошибка подключения.
Что такое стек TCP/IP и как он передает данные между приложениями
Стек TCP/IP описывает правила обмена данными между программами в локальной сети, корпоративной инфраструктуре и интернете. Каждый уровень выполняет ограниченную задачу и передает результат нижележащему уровню. Такое разделение позволяет приложению работать с HTTP, SSH или DNS, не зная деталей Ethernet-кадра, MAC-адреса следующего маршрутизатора или физической среды связи.
В эксплуатации чаще используют четырехуровневую модель TCP/IP. Она компактнее семиуровневой OSI и напрямую связана с командами диагностики, маршрутизацией и настройкой сервисов. Для более подробного сопоставления уровней полезен практический разбор модели OSI и инкапсуляции.
Четыре уровня модели TCP/IP
| Уровень | Задача | Типовые протоколы и технологии | Что проверять |
|---|---|---|---|
| Доступ к сети | Передача кадров в пределах канального сегмента | Ethernet, Wi-Fi, VLAN, ARP, NDP | Линк, MAC-адрес, VLAN, MTU, ошибки интерфейса |
| Межсетевой | Адресация и доставка пакета между сетями | IPv4, IPv6, ICMP | IP-адрес, префикс, таблица маршрутов, шлюз |
| Транспортный | Доставка данных конкретному процессу | TCP, UDP | Порт, состояние соединения, фильтрация, таймауты |
| Прикладной | Логика обмена между сервисами | DNS, HTTP, HTTPS, SSH, SMTP | Ответ сервиса, учетные данные, сертификат, журнал приложения |
Канальный уровень доставляет кадр соседнему устройству. Межсетевой уровень IP определяет конечные адреса и передает пакет через маршрутизаторы. TCP и UDP добавляют номера портов, чтобы операционная система направила трафик нужному процессу. Прикладной уровень определяет формат запросов и ответов.
Например, браузер формирует HTTP-запрос, TCP помещает его в сегмент с портом назначения 443, IP добавляет адрес веб-сервера, а Ethernet формирует кадр для локального шлюза. Сервер выполняет обратную операцию и передает HTTP-запрос веб-серверу, который слушает этот порт.
Инкапсуляция и деинкапсуляция: что происходит с данными на каждом уровне
Инкапсуляция - добавление служебных заголовков к данным при отправке. Приложение передает полезную нагрузку транспорту. TCP создает сегмент, UDP создает дейтаграмму. IP помещает сегмент или дейтаграмму в IP-пакет. Канальный уровень добавляет заголовок и контрольную последовательность кадра.
- Приложение формирует данные, например HTTP-запрос или DNS-запрос.
- TCP или UDP добавляет порты источника и назначения. TCP хранит номера последовательности, подтверждения и флаги управления соединением.
- IP добавляет адреса источника и получателя, TTL или Hop Limit и сведения о следующем протоколе.
- Ethernet или Wi-Fi формирует кадр с MAC-адресами отправителя и следующего узла.
- Принимающая сторона удаляет заголовки в обратном порядке и передает полезную нагрузку приложению.
IP-адрес указывает логическое местоположение конечного узла в сети. MAC-адрес нужен для доставки в текущем канальном сегменте. Поэтому маршрутизатор при пересылке удаляет исходный Ethernet-кадр и создает новый: MAC-адреса меняются на каждом участке пути, а IP-адреса источника и назначения обычно сохраняются. Исключения создают NAT, прокси, туннели и балансировщики.
Порт уточняет, какому процессу нужен трафик. Пара IP-адрес и порт образует конечную точку. TCP-соединение идентифицирует четверка значений: IP и порт клиента, IP и порт сервера. На сервере один адрес и порт 443 могут одновременно обслуживать тысячи клиентов с разными исходными портами.
Как взаимодействуют DNS, TCP, UDP и IP при обращении к сервису
Представим запрос администратора к внутреннему API по имени api.infra.local. Пользователь видит одну команду curl, но операционная система выполняет цепочку независимых проверок. Ошибка DNS, маршрута, firewall или порта внешне часто выглядит как недоступность API.
Сценарий зависит от приложения. HTTP и HTTPS обычно используют TCP, хотя HTTP/3 работает поверх UDP и QUIC. Обычный DNS-запрос чаще уходит по UDP/53, а TCP применяют при передаче зоны, крупных ответах, повторном запросе после усечения ответа или при политике резолвера.
Шаг 1. DNS преобразует имя сервиса в IP-адрес
Клиент сначала проверяет локальный кэш и файл /etc/hosts, затем отправляет запрос настроенному резолверу. Резолвер возвращает запись A для IPv4 или AAAA для IPv6. После этого приложение получает адрес, с которым может начать сетевое соединение.
dig api.infra.local A
getent ahosts api.infra.local
Если имя не разрешается, подключение по имени не начнется. Проверка напрямую по известному IP помогает отделить DNS-сбой от проблем маршрута или сервиса. Результат нужно интерпретировать осторожно: успешное подключение по IP не подтверждает корректность TLS-сертификата, виртуального хоста HTTP или политики доступа по имени.
Шаг 2. IP выбирает маршрут до удаленной сети
Ядро сравнивает IP-адрес назначения с маршрутами в таблице. При наличии нескольких подходящих записей оно выбирает маршрут с наиболее длинным совпадающим префиксом. Для адреса из локальной подсети кадр уйдет прямо соседнему хосту. Для удаленной сети он уйдет MAC-адресу шлюза по умолчанию или следующего маршрутизатора.
ip route
ip route get 10.20.30.40
Команда ip route get показывает выбранный интерфейс, следующий узел и исходный адрес. Она быстро выявляет неверный шлюз, конфликтующие VPN-маршруты и неожиданный выбор интерфейса на сервере с несколькими сетевыми картами. Подробный алгоритм проверки IP, DNS и маршрутов собран в статье «Диагностика сети в Windows и Linux».
Шаг 3. TCP или UDP доставляет данные нужному процессу
После выбора маршрута транспортный протокол передает данные на порт сервиса. Для TCP клиент отправляет SYN, ждет SYN-ACK и подтверждает его пакетом ACK. После установки соединения приложение передает запрос. UDP не создает сеанс: приложение отправляет самостоятельную дейтаграмму на адрес и порт назначения.
Сокет связывает адрес, порт и транспортный протокол. Веб-сервер может слушать 0.0.0.0:443 для IPv4 или [::]:443 для IPv6. Процесс, слушающий только 127.0.0.1:8080, доступен локально, но не принимает соединения с других серверов даже при корректном маршруте и открытом firewall.
IP-адресация и маршрутизация: основа настройки сетевой инфраструктуры
Перед настройкой интерфейсов нужен адресный план: список VLAN, подсетей, шлюзов, резервируемых диапазонов, DNS-серверов и назначений адресов. План предотвращает пересечение подсетей, дублирование IP и ошибки при подключении VPN или контейнерных сетей.
Минимальная рабочая последовательность выглядит так: назначить адресу интерфейса корректный префикс, добавить маршрут по умолчанию или специфичные маршруты, настроить DNS и проверить трафик из клиентского сегмента. Проверка с самого сервера недостаточна, поскольку localhost обходит маршрутизацию и часть правил firewall.
IPv4, CIDR и IP-адресация подсетей
IPv4-адрес содержит 32 бита и обычно записывается четырьмя октетами, например 192.168.10.25. Запись CIDR 192.168.10.0/24 означает, что первые 24 бита задают сеть, а оставшиеся 8 бит доступны для адресов хостов.
| Параметр сети 192.168.10.0/24 | Значение |
|---|---|
| Маска | 255.255.255.0 |
| Адрес сети | 192.168.10.0 |
| Диапазон адресов хостов | 192.168.10.1 - 192.168.10.254 |
| Широковещательный адрес | 192.168.10.255 |
| Типичное число доступных адресов | 254 |
Чем больше длина префикса, тем меньше адресов в подсети. Сеть /25 содержит 128 адресов, /26 - 64, /30 - 4. Для точка-точка соединений используют /31, где оба адреса доступны узлам и широковещательного адреса нет. Префикс /32 описывает единичный хост-маршрут.
Узлы одной IPv4-подсети могут обмениваться кадрами напрямую после разрешения MAC-адреса через ARP. Трафик в другую подсеть требует маршрутизатора. Неверная маска может создать особенно сложный сбой: один хост считает адрес локальным и пытается найти его через ARP, другой отправляет ответ через шлюз.
Частные адреса, публичные адреса и NAT
Частные диапазоны IPv4 предназначены для внутренних сетей и не маршрутизируются в публичном интернете:
10.0.0.0/8172.16.0.0/12, адреса с 172.16.0.0 по 172.31.255.255192.168.0.0/16
Для исходящего доступа такие адреса обычно проходят через NAT на пограничном маршрутизаторе. Source NAT заменяет частный адрес источника публичным адресом шлюза и хранит состояние трансляции. Внешний сервис видит адрес NAT-устройства, а не внутреннего сервера.
Входящее соединение к внутреннему сервису требует явного правила DNAT или публикации через обратный прокси, балансировщик либо VPN. NAT не заменяет firewall: правило трансляции отвечает за изменение адреса, а правило фильтрации определяет, разрешен ли пакет. В журналах стоит фиксировать исходный адрес до и после трансляции, иначе расследование инцидента усложняется.
Принципы маршрутизации IP и таблица маршрутов
Маршрут содержит сеть назначения, префикс, шлюз или выходной интерфейс, а иногда метрику. Шлюз по умолчанию задает путь для адресов, которые не совпали со специфичными маршрутами. Пример типовой таблицы:
ip addr show dev ens18
ip route
10.20.30.0/24 dev ens18 proto kernel scope link src 10.20.30.15
10.50.0.0/16 via 10.20.30.1 dev ens18
default via 10.20.30.1 dev ens18
Запрос к 10.50.12.7 пойдет через маршрут 10.50.0.0/16, а не по default route. Запрос к 203.0.113.10 использует шлюз 10.20.30.1. Метрика участвует в выборе при одинаковой длине префикса.
Маршрутизация должна работать в обе стороны. Сервер может отправить пакет клиенту через правильный шлюз, но ответ потеряется на обратном пути из-за отсутствующего маршрута, асимметричного пути или фильтрации с проверкой состояния. При изменении маршрута по умолчанию держите консольный доступ и план возврата прежней конфигурации.
IPv6 в корпоративной и серверной сети
IPv6 использует 128-битные адреса и префиксы, например 2001:db8:100:10::15/64. В IPv6 нет широковещания: его функции выполняют multicast и Neighbor Discovery Protocol. Интерфейс почти всегда получает link-local адрес из диапазона fe80::/10, который нужен для связи в локальном сегменте и работы маршрутизаторов.
Dual-stack-схема включает IPv4 и IPv6 одновременно. Клиент может предпочесть AAAA-запись, поэтому неполный IPv6-маршрут создает задержку либо ошибку при подключении, хотя IPv4 исправен. Перед публикацией сервиса проверяйте адрес, маршрут, DNS-запись, firewall и слушающий сокет отдельно для обеих версий IP.
TCP, UDP и ICMP: назначение, различия и ограничения
TCP, UDP и ICMP решают разные задачи. TCP передает упорядоченный поток байтов с подтверждениями. UDP передает отдельные дейтаграммы с минимальными накладными расходами. ICMP несет служебные сообщения о состоянии сети и ошибках доставки.
Выбор между TCP и UDP определяет разработчик протокола или приложения. Администратор должен знать ожидаемый транспорт, порты и особенности обработки ошибок. Попытка проверить UDP-сервис командой, рассчитанной на TCP, не дает достоверного результата.
Протокол TCP и UDP: разница для администратора и DevOps-инженера
| Свойство | TCP | UDP |
|---|---|---|
| Соединение | Устанавливает сеанс перед передачей данных | Передает независимые дейтаграммы |
| Порядок данных | Сохраняет порядок байтового потока | Не гарантирует порядок |
| Повторная передача | Есть при потере сегмента | Нет на транспортном уровне |
| Контроль потока и перегрузки | Есть | Зависит от приложения и протокола поверх UDP |
| Границы сообщений | Приложение определяет их само | Сохраняет границу каждой дейтаграммы |
| Примеры | HTTPS, SSH, PostgreSQL, SMTP | DNS, NTP, VoIP, QUIC |
UDP не сообщает приложению о доставке, порядке и дубликатах. При необходимости эти свойства добавляет прикладной протокол. QUIC, DNS с повторными запросами и многие медиапротоколы используют собственные механизмы обработки потерь. Поэтому UDP нельзя автоматически считать ненадежным для прикладной задачи.
TCP не сохраняет границы вызовов send(). Получатель может прочитать одну часть сообщения или несколько сообщений за один вызов чтения. Разработчик должен использовать длину сообщения, разделитель или формат протокола. При диагностике TCP-сервиса проверяйте слушающий порт и успешное рукопожатие, затем валидность прикладного запроса.
Как TCP устанавливает и завершает соединение
Обычное TCP-соединение начинается с трех пакетов:
- Клиент отправляет
SYNи переходит в состояниеSYN-SENT. - Сервер отвечает
SYN-ACK, его сокет кратко находится вSYN-RECV. - Клиент отправляет
ACK, обе стороны переходят вESTABLISHED.
Таймаут во время установления соединения означает, что клиент не получил ожидаемый ответ. Причинами бывают ошибочный маршрут, потеря пакетов, фильтрация SYN или SYN-ACK, некорректный обратный маршрут, перегрузка сервера. Ошибка Connection refused обычно означает, что узел достижим и вернул TCP RST: порт закрыт, сервис не слушает адрес или firewall активно отклонил соединение.
Закрытие соединения использует обмен FIN и ACK. Состояние TIME-WAIT остается на стороне, которая активно завершила сеанс, чтобы поздние сегменты не попали в новое соединение с той же четверкой адресов и портов. Большое число TIME-WAIT часто встречается при высокой частоте коротких исходящих соединений. Проблему оценивают вместе с числом доступных локальных портов, скоростью соединений и поведением приложения.
Роль ICMP в доступности сети и Path MTU Discovery
ping использует ICMP Echo Request и Echo Reply. Успешный ответ подтверждает, что ICMP-трафик прошел между двумя адресами, но не подтверждает работу TCP-порта, DNS, TLS или HTTP. Отсутствие ответа тоже не доказывает недоступность хоста: ICMP Echo часто ограничивают правилами безопасности.
ICMP сообщает о недостижимости сети, хоста или порта, а также о превышении времени жизни пакета. traceroute и tracert используют сообщения Time Exceeded, чтобы увидеть последовательность маршрутизаторов. Маршрутизатор может не отвечать на такие запросы, но продолжать пересылать прикладной трафик.
Path MTU Discovery опирается на ICMP-сообщения о слишком большом пакете. В IPv6 маршрутизаторы не фрагментируют пакеты, поэтому ICMPv6 Packet Too Big особенно нужен. Полная блокировка ICMP или ICMPv6 создает PMTU black hole: маленькие запросы проходят, крупные ответы, TLS-рукопожатия или загрузка файлов зависают. Фильтруйте нежелательный ICMP точечно, а не блокируйте его полностью.
Как работает DNS и что проверить при настройке DNS сервера
DNS связывает имена сервисов с IP-адресами и другой служебной информацией. Это распределенная система: клиент обычно обращается к рекурсивному резолверу, а тот при необходимости запрашивает авторитетные серверы зоны. Ошибка в записи, делегировании, кэше или настройках клиента может дать разные ответы на разных узлах.
Настройка DNS начинается с определения зоны и ее владельца, затем добавляются записи, задаются TTL, проверяется делегирование и ответы с клиентских сетей. Для внутренних зон полезно документировать резолверы, зоны поиска, split-horizon-правила и ожидаемые IP-адреса сервисов.
Рекурсивный резолвер, авторитетный сервер и DNS-кэш
Рекурсивный резолвер принимает запрос клиента и возвращает готовый ответ. Он хранит ответы в кэше на время TTL, снижая число внешних запросов. Авторитетный сервер хранит исходные записи конкретной зоны и отвечает за них авторитетно.
TTL задает время кэширования в секундах. Если запись исправлена, часть клиентов может продолжать использовать старый адрес до истечения TTL. Негативные ответы тоже кэшируются, поэтому недавно созданное имя иногда остается недоступным после исправления зоны. Перед переносом сервиса снижайте TTL заранее, а после стабилизации возвращайте значение, подходящее для нагрузки и частоты изменений.
Для проверки разделяйте два вопроса: что хранит рекурсивный резолвер и что отдает авторитетный сервер. Запрос к локальному DNS-серверу не заменяет прямую проверку сервера зоны, если нужно найти ошибку публикации.
Основные DNS-записи для сервисов
| Тип | Назначение | Пример применения |
|---|---|---|
| A | Связывает имя с IPv4-адресом | api.example.internal - IPv4 API |
| AAAA | Связывает имя с IPv6-адресом | Публикация сервиса в dual-stack-сети |
| CNAME | Псевдоним другого имени | Алиас для балансировщика |
| MX | Серверы приема почты домена | Маршрутизация SMTP |
| TXT | Текстовые параметры и политики | Проверка домена, SPF, DKIM |
| NS | Авторитетные серверы зоны | Делегирование дочерней зоны |
| PTR | Обратное разрешение адреса в имя | Журналирование, почтовые и инфраструктурные политики |
CNAME нельзя размещать в точке зоны, где уже существуют обязательные записи SOA и NS. Многие DNS-провайдеры предлагают похожие механизмы alias или ANAME, но их поведение зависит от реализации. При настройке обратных записей PTR согласуйте имя с прямой записью, когда этого требуют почтовый сервис, мониторинг или правила корпоративной сети.
Проверка DNS-запросов с помощью dig и resolvectl
dig api.infra.local A
dig api.infra.local AAAA
dig @10.20.30.53 api.infra.local A
dig +noall +answer api.infra.local A
resolvectl status
resolvectl query api.infra.local
dig показывает статус ответа, секции ANSWER, AUTHORITY и ADDITIONAL, TTL и сервер, который ответил на запрос. Флаг aa в ответе указывает на авторитетный ответ. Команда с @10.20.30.53 проверяет конкретный резолвер и помогает найти расхождение между DNS-серверами.
resolvectl status показывает DNS-серверы и домены поиска, которые применяет systemd-resolved. На хостах с VPN нужно проверить DNS для каждого интерфейса: запрос внутренней зоны может уходить на внешний резолвер, если маршрутизация доменов настроена неверно.
Практическая настройка сетевой инфраструктуры на Linux
Конфигурационные файлы Linux зависят от сетевого менеджера: NetworkManager, systemd-networkd, netplan или сценарии дистрибутива используют разные форматы. Проверочные команды одинаковы почти везде, поэтому сначала подтверждайте фактическое состояние интерфейса, а затем меняйте постоянную конфигурацию через используемый в системе менеджер.
Для тестового стенда, веб-сервиса или Kubernetes-кластера требуется предсказуемая сеть, доступ к консоли и возможность изменить ресурсы. Облачную инфраструктуру для таких задач предоставляет Timeweb Cloud, включая VDS/VPS, базы данных, хранилище и Kubernetes.
Минимальный набор параметров сетевого интерфейса
Серверу нужны IP-адрес с префиксом, маршрут по умолчанию или маршруты до нужных сетей, DNS-серверы и корректный MTU. В корпоративной сети параметры должны совпадать с адресным планом, VLAN, DHCP-резервациями и политиками firewall.
ip link show dev ens18
ip addr show dev ens18
ip route
ip route get 10.50.12.7
ip -6 route
cat /etc/resolv.conf
Статический IP не должен попадать в динамический DHCP-пул, если DHCP-сервер не исключает его явно. На trunk-портах проверьте VLAN ID на коммутаторе и подинтерфейсе сервера. Несовпадение MTU часто проявляется при работе через VPN, VLAN, overlay-сеть или туннель: базовый ping проходит, а передача крупных пакетов зависает.
Порты, сокеты и правила межсетевого экрана
Корректный IP-маршрут не открывает сервис автоматически. Процесс должен слушать ожидаемый адрес и порт, а firewall должен пропускать трафик в нужном направлении. Проверка на самом сервере начинается с просмотра сокетов:
ss -lntup
ss -lnt '( sport = :443 )'
curl -vk https://127.0.0.1/
nc -vz 10.20.30.15 443
ss -lntup показывает TCP- и UDP-сокеты в состоянии прослушивания и связанные процессы при достаточных правах. Слушающий адрес 127.0.0.1 ограничивает доступ локальным хостом, 0.0.0.0 принимает IPv4 на всех интерфейсах, а :: относится к IPv6. Реальное поведение dual-stack зависит от параметра net.ipv6.bindv6only и настроек приложения.
Открывайте только необходимые порты и ограничивайте источники трафика подсетями, VPN или конкретными хостами. Полный список мер против IP-spoofing, SYN-flood, DNS poisoning и MITM собран в материале «Безопасность сетевых протоколов TCP/IP».
Особенности сетей Docker и Kubernetes
Docker создает виртуальные интерфейсы, bridge-сети, маршруты и правила NAT. Контейнер получает отдельный сетевой namespace, поэтому адрес и таблица маршрутов внутри контейнера отличаются от параметров хоста. Публикация порта связывает порт хоста с портом контейнера, а доступность зависит от bind-адреса, правил NAT и firewall хоста.
В Kubernetes Pod получает IP в кластерной сети. Service дает стабильную виртуальную точку доступа и распределяет трафик между Pod. Ingress обычно принимает HTTP или HTTPS и направляет запрос в Service по правилам имени и пути. NetworkPolicy ограничивает обмен между Pod, но фактическая поддержка зависит от CNI-плагина.
Порядок диагностики в кластере: проверить процесс и порт в Pod, затем доступ к Pod IP, endpoints Service, DNS-имя Service, правила NetworkPolicy, маршруты между узлами и внешний Ingress. Не начинайте с перезапуска Pod: он может временно скрыть проблему адресации, DNS или сетевых правил.
Диагностика сетевых проблем по уровням TCP/IP
Диагностика должна двигаться от базовой связности к приложению. Сначала фиксируйте время, исходный хост, целевой адрес, имя, порт, транспорт и текст ошибки. Затем выполняйте проверки из одной точки, а при необходимости повторяйте их из другого сегмента сети.
Изменение настроек без исходных данных затрудняет поиск причины. Сохраните вывод маршрутов, DNS-ответов, состояния сокетов и короткий захват пакетов до правки. Для расширенного набора команд Linux и Windows используйте шпаргалку по сетевой диагностике и анализу пакетов.
Порядок проверки: интерфейс, адрес, маршрут, DNS, порт, приложение
- Интерфейс: проверьте состояние линка, ошибки и счетчики через
ip linkиip -s link. - Адрес: подтвердите IP-адрес и префикс командой
ip addr. Сверьте отсутствие дубликата IP в сети. - Маршрут: выполните
ip route get IP_НАЗНАЧЕНИЯ. Проверьте интерфейс, next hop и исходный адрес. - ICMP: при разрешенной политике выполните
ping. Результат оценивает ICMP-доступность, а не работу сервиса. - DNS: проверьте A и AAAA через
dig, укажите конкретный резолвер при необходимости. - Порт: используйте
nc,curlилиopenssl s_clientв зависимости от протокола. - Приложение: проверьте журналы, конфигурацию виртуального хоста, аутентификацию, сертификат и зависимые сервисы.
Пример для HTTPS-сервиса:
ip route get 10.20.30.15
ping -c 3 10.20.30.15
dig api.infra.local A
curl -vk --connect-timeout 5 https://api.infra.local/health
openssl s_client -connect api.infra.local:443 -servername api.infra.local
Успешный ping и ошибка curl обычно указывают на уровень выше ICMP: порт, firewall, TLS, HTTP-маршрут или приложение. Успешный TCP connect еще не гарантирует корректный ответ API.
Когда использовать ping, traceroute, ss, dig, curl и tcpdump
| Инструмент | Проверяемая гипотеза | Ограничение |
|---|---|---|
ping | ICMP-доступность узла и задержка | Не проверяет TCP-, UDP-порты и прикладной ответ |
traceroute, tracert | Путь и точки, где меняется поведение трафика | Промежуточные узлы могут не отвечать |
ss | Локальные слушающие порты и TCP-состояния | Не показывает сетевую доступность с клиента |
dig | DNS-ответ, TTL, конкретный резолвер | Не подтверждает доступность сервиса по возвращенному IP |
curl | HTTP(S)-запрос, заголовки, TLS, код ответа | Не подходит для произвольного TCP- или UDP-протокола |
tcpdump | Наличие, направление и тип пакетов на интерфейсе | Требует интерпретации и прав доступа |
sudo tcpdump -ni ens18 'host 10.20.30.15 and tcp port 443'
sudo tcpdump -ni any 'udp port 53'
sudo tcpdump -ni ens18 'icmp or icmp6'
Захват пакетов помогает ответить на конкретный вопрос: ушел ли SYN, вернулся ли SYN-ACK, поступает ли DNS-ответ, приходит ли ICMP Packet Too Big. Если SYN виден на клиенте, но не виден на сервере, ищите проблему между узлами. Если SYN приходит на сервер, а ответ не уходит, проверьте firewall, сокет, локальные политики и нагрузку.
Разбор типовых симптомов: таймаут, Connection refused и Name or service not known
Таймаут. Клиент не получил ответ за установленное время. Проверьте ip route get, правила firewall на пути, обратный маршрут, состояние балансировщика и захват SYN/SYN-ACK. При HTTPS отдельно проверьте MTU и ICMP, если зависание начинается после начала TLS-обмена.
Connection refused. Целевой узел обычно достижим, но TCP-соединение отклонено. Проверьте ss -lnt на сервере, bind-адрес процесса, порт назначения, локальный firewall и правила NAT. Ошибка часто появляется после смены порта приложения или запуска сервиса только на loopback-интерфейсе.
Name or service not known. Клиент не смог разрешить имя. Проверьте resolvectl status, содержимое /etc/resolv.conf, ответ dig, доступность DNS-сервера и зону поиска. При split DNS сравните ответ через корпоративный резолвер и ответ из сети, где возникает проблема.
Контрольный список перед вводом сетевого сервиса в эксплуатацию
Проверяйте сервис реальным сценарием: из разрешенного клиентского сегмента, по рабочему DNS-имени, через ожидаемый балансировщик или VPN. Тест с localhost подтверждает только локальный процесс. Тест с той же подсети не выявляет ошибку межсетевой маршрутизации.
- Адрес и префикс соответствуют адресному плану, IP не дублируется.
- VLAN, шлюз и маршруты в обе стороны проверены.
- IPv4 и IPv6 проверены отдельно, если оба стека включены.
- DNS-записи A, AAAA, CNAME или PTR возвращают ожидаемые значения, TTL учтен.
- Сервис слушает правильный адрес и нужный TCP- или UDP-порт.
- Firewall и NetworkPolicy разрешают только необходимые источники и направления.
- MTU проверен на путях с VPN, туннелями, overlay-сетями и VLAN.
- Мониторинг проверяет доступность с полезным прикладным запросом.
- Журналы содержат достаточно данных для сопоставления запроса, IP-адреса и ошибки.
Что проверить до изменения маршрутов, DNS и правил firewall
Перед изменением сохраните текущие настройки интерфейсов, маршрутов, DNS, firewall и активных соединений. Подготовьте окно работ, резервный канал доступа и понятный порядок отката. При удаленной работе изменение default route или политики INPUT может оборвать SSH-сеанс раньше, чем вы успеете исправить конфигурацию.
Оцените зависимые сервисы: DNS-резолверы, VPN, балансировщики, мониторинг, репликацию баз данных, почтовые шлюзы и внешние API. Изменение DNS-записи без учета кэшей создает период, когда разные клиенты используют разные адреса. Изменение NAT-правила может повлиять на несколько опубликованных портов.
Какие параметры документировать для дальнейшей поддержки
- VLAN, подсеть, префикс, шлюзы и назначение каждого интерфейса.
- IP-адреса, DHCP-резервации и статические назначения.
- DNS-зоны, записи, TTL, резолверы и правила split DNS.
- Открытые порты, транспортные протоколы, владельца сервиса и точки мониторинга.
- Правила NAT, firewall, NetworkPolicy и разрешенные сети-источники.
- Зависимости от балансировщиков, VPN, внешних API и маршрутизаторов.
- План отката и способ аварийного доступа к хосту или сетевому оборудованию.
Такой набор данных сокращает время реакции на инциденты. Он позволяет быстро сопоставить симптом с уровнем TCP/IP, проверить ожидаемый путь пакета и изменить только ту часть конфигурации, где подтверждена причина сбоя.