Network Admin
Обучающий канал по сетевому и системному администрированию. Сотрудничество: @dad_admin Биржа: https://telega.in/c/networkadm РКН: https://bit.ly/4ioc61C
Mostrar más📈 Análisis del canal de Telegram Network Admin
El canal Network Admin (@networkadm) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 12 430 suscriptores, ocupando la posición 9 796 en la categoría Tecnologías y Aplicaciones y el puesto 51 823 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 12 430 suscriptores.
Según los últimos datos del 26 agosto, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -13, y en las últimas 24 horas de -8, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 13.80%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.10% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 1 715 visualizaciones. En el primer día suele acumular 883 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 3.
- Intereses temáticos: El contenido se centra en temas clave como vlan, arp, интерфейс, ping, dhcp.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Обучающий канал по сетевому и системному администрированию.
Сотрудничество: @dad_admin
Биржа: https://telega.in/c/networkadm
РКН: https://bit.ly/4ioc61C”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 27 agosto, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
tcpdump нет пакета - легко сделать вывод, что он не пришёл на сервер.
Но между физическим портом и tcpdump находится сама сетевой карта.
У NIC есть собственные RX ring buffers. Драйвер забирает из них дескрипторы и передаёт полученные данные ядру.
При перегрузке очередь может не успеть обработать входящие пакеты:
NIC ↓ RX ring ↓ driver ↓ kernel ↓ tcpdumpЕсли проблема возникает на уровне NIC/driver, пакет может исчезнуть до того, как станет виден обычному packet capture. Поэтому при странных потерях полезно смотреть не только:
ip -s link show eth0
но и аппаратную статистику:
ethtool -S eth0
А размеры RX/TX ring:
ethtool -g eth0
Можно увидеть отдельные counters вроде rx_missed_errors, rx_no_buffer или специфичные для конкретного драйвера drops.
Это важный момент при диагностике: если пакет не попал в tcpdump, это ещё не доказывает, что его не получила сетевая карта.
N.A.aa:bb:cc:dd:ee:01 → eth0 aa:bb:cc:dd:ee:02 → eth1Посмотреть таблицу можно:
bridge fdb showПосле этого кадр для
aa:bb:cc:dd:ee:02 уже не нужно отправлять на все порты - bridge знает, что destination находится за eth1.
Если destination MAC неизвестен, кадр будет flood’иться по подходящим портам. После получения ответа bridge снова обновит FDB.
У записей есть timeout, поэтому старый MAC постепенно исчезает:
bridge fdb show br br0
Особенно интересно это проявляется при миграции VM.
Было:
VM → eth0После миграции:
VM → eth1MAC тот же, но source frames начинают приходить с другого интерфейса. Bridge переучивает запись:
old MAC → eth0
↓
new MAC → eth1
Если MAC начинает постоянно перемещаться между портами, можно получить MAC flapping - и тогда проблема уже не в IP-маршрутизации.
Linux bridge в таком режиме фактически выполняет ту же базовую функцию, что и физический L2-коммутатор: строит таблицу MAC → порт на основании уже увиденного трафика.
N.A.skb
Обычно сетевой пакет проходит довольно длинный путь внутри Linux:
NIC → driver → skb → network stack → socket → applicationНо
skb создаётся не в самом начале.
XDP может выполнить программу прямо на раннем этапе обработки пакета, когда драйвер уже получил его из NIC, но обычный sk_buff ещё не создан.
Поэтому решение можно принять буквально на входе:
NIC ↓ driver ↓ XDP ├── DROP ├── PASS → обычный network stack ├── TX └── REDIRECTНапример, простой XDP-программе достаточно проверить destination IP и сразу отбросить пакет:
SEC("xdp")
int drop_packet(struct xdp_md *ctx)
{
return XDP_DROP;
}
При XDP_DROP пакет вообще не доходит до обычного kernel networking stack.
Это важно под большой нагрузкой: если отбросить ненужный трафик после создания skb, часть работы ядро уже успело выполнить. XDP позволяет перенести фильтрацию значительно раньше.
Проверить, загружена ли XDP-программа:
ip -details link show dev eth0
И посмотреть статистику:
ip -s link show dev eth0
Поэтому «firewall на сервере» - не всегда означает, что пакет сначала проходит весь сетевой стек, а потом его фильтруют. В Linux точка принятия решения может находиться практически сразу после получения кадра сетевой картой.
N.A.ss показывает тысячи соединений, а netstat - другую картину
На одном сервере можно запустить:
ss -antи получить тысячи TCP-соединений, а затем:
netstat -ant
и увидеть совсем другое количество.
Это не обязательно означает, что один из инструментов врёт.
ss работает через современный интерфейс ядра Linux - NETLINK_INET_DIAG.
Ядро отдаёт ему информацию о сокетах напрямую, поэтому ss может получать состояние соединений без перебора /proc и без старого механизма netstat.
netstat из пакета net-tools - устаревший инструмент. Его возможности и способ получения данных отличаются, а часть информации может отображаться иначе.
Особенно заметна разница на серверах с большим количеством ephemeral connections и быстро меняющимся состоянием TCP.
Для диагностики лучше смотреть не просто количество строк:
ss -sа разбивку состояний:
ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c
Например:
ESTAB 18420 TIME-WAIT 7312 SYN-RECV 428И отдельно проверить конкретный listener:
ss -lntp
Важный момент: TIME-WAIT, SYN-RECV, ESTAB и listening sockets - это разные состояния kernel socket state. Поэтому простое сравнение «сколько строк показывает утилита» может давать совершенно разные выводы.
ss сегодня является основным инструментом для анализа TCP/UDP-сокетов в Linux, а netstat в новых системах обычно оставляют только ради совместимости со старыми привычками и скриптами.
N.A.PC ── SW1 ══ SW2 ══ SW3 ── Server
VLAN 30 VLAN 30 VLAN 30
На trunk-портах кадр VLAN 30 идёт с тегом 802.1Q.
Проверка на Linux:
ip -d link show eth0.30
На Cisco:
show interfaces trunk show vlan id 30При этом шлюз VLAN может находиться вообще на другом устройстве:
PC → SW1 → SW2 → SW3 → Router
VLAN 30
Коммутаторы между ними работают только на L2 и не принимают решение о маршрутизации.
Но есть важный нюанс: чем дальше растянут L2-домен, тем больше устройств получают его broadcast и unknown-unicast traffic.
Поэтому проблема иногда выглядит как «сеть внезапно стала шумной», хотя IP-маршрутизация при этом вообще не менялась.
N.A.ping проверяет только время прохождения ICMP-пакета туда и обратно.
Он почти ничего не говорит о том, сколько пакетов реально теряется, насколько забит канал и что происходит с TCP при передаче.Например, при потере даже небольшого процента TCP-пакетов скорость может резко просесть. Потерянный сегмент приходится передавать заново, а TCP дополнительно уменьшает congestion window. В итоге:
RTT = 2 ms packet loss = 1%может оказаться намного хуже для TCP, чем:
RTT = 50 ms packet loss = 0%Проверять нужно не только задержку:
ping -c 100 <server-ip>
но и реальные потери при передаче:
iperf3 -c <server-ip> -t 30
А на Linux посмотреть retransmissions:
ss -tiЕсли в выводе растёт
retrans, проблема уже не в том, что «ping маленький».
Низкий RTT показывает, насколько быстро пакет возвращается. Он не показывает, насколько хорошо сеть передаёт поток данных.
N.A.src IP + src port + dst IP + dst port
Например, сервер слушает:
10.0.0.10:443А клиенты создают:
10.0.1.20:49152 → 10.0.0.10:443 10.0.1.21:49153 → 10.0.0.10:443 10.0.1.22:49154 → 10.0.0.10:443Все три соединения приходят на один
:443, но TCP воспринимает их как разные соединения.
И именно поэтому веб-сервер может одновременно обслуживать тысячи клиентов через один порт.
Но есть ещё интереснее.
Один и тот же порт 443 могут одновременно слушать несколько процессов, если используется SO_REUSEPORT.
Например:
ss -lntp | grep :443
несколько worker-процессов могут иметь собственные listening sockets на одном IP:443.
Ядро само распределяет новые соединения между ними.
При этом уже установленное соединение не прыгает между процессами: выбранный socket становится владельцем конкретного TCP-потока.Поэтому фраза «порт 443 занят веб-сервером» на практике скрывает сразу несколько уровней:
443 - номер порта
IP:443 - endpoint
4-tuple - конкретное TCP-соединение
socket - объект, через который процесс работает с этим соединением
Именно поэтому один:443 способен обслуживать огромное количество независимых TCP-соединений одновременно.
N.A.sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.eth1.rp_filter
2️⃣Почему это часто ломается
Особенно заметно при:
• нескольких uplink
• ECMP
• Policy-Based Routing
• VRF
• асимметричной маршрутизации
• балансировщиках и firewall-кластерах
Например:
Internet → eth1 → server server → eth0 → InternetМаршрутизация работает, но обратный путь отличается от входящего. 3️⃣Как увидеть проблему Сначала смотрим, куда ядро отправит ответ:
ip route get 10.20.30.50Затем проверяем фактический входящий трафик:
tcpdump -ni eth1 host 10.20.30.50
Если пакет виден на интерфейсе, но приложение его не получает, стоит проверить фильтрацию на уровне ядра.
4️⃣Какие значения бывают
rp_filter=0 — проверка отключена rp_filter=1 — strict mode, обратный маршрут должен совпадать с входящим интерфейсом rp_filter=2 — loose mode, достаточно существования маршрута до источникаДля сложной маршрутизации strict mode часто становится источником трудноуловимых проблем. 5️⃣Что важно проверить перед изменением
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.default.rp_filter
sysctl net.ipv4.conf.eth0.rp_filter
sysctl net.ipv4.conf.eth1.rp_filter
И обязательно смотреть не только all, но и параметры конкретного интерфейса - итоговое поведение зависит от них.
N.A.Все протоколы говорят, что выход есть, но трафик стабильно уходит через один uplink.Смотреть только
show ip route мало. Сначала интересно понять, что именно BGP считает лучшим кандидатом:
show ip bgp 0.0.0.0А затем сравнить это с тем, что OSPF держит у себя:
show ip ospf rib 0.0.0.0Здесь уже может выясниться, что оба протокола имеют рабочий default, но в общую RIB попадает только один. Дальше можно проверить конкретный поток:
show ip cef exact-route <src> <dst>И увидеть, через какой интерфейс и next-hop он реально будет отправлен. Самый интересный случай - когда выбранный маршрут не устанавливается в FIB из-за проблем с recursive next-hop, и forwarding продолжает использовать другой доступный путь.
show ip cef 0.0.0.0 internal👀 Получается несколько независимых решений: BGP выбирает свой best path, OSPF - свой, RIB выбирает источник, а FIB в итоге решает, куда уйдёт пакет. Именно на стыке этих уровней и появляются самые неприятные сюрпризы.
ss -tnpЕсли адреса backend’ов принадлежат разным зонам, следующий вопрос - действительно ли трафик идёт напрямую между ними.
traceroute -T -p 443 <backend-ip>
Но одного маршрута мало.
Интереснее сравнить latency до backend’ов в разных зонах:
mtr -T -P 443 <backend-ip>Иногда разница небольшая на одном запросе, но начинает сильно влиять на p95/p99, когда сервис делает несколько последовательных обращений к другим компонентам.
Ещё неприятнее, когда frontend находится в одной зоне, application - в другой, а database - снова в первой. Один пользовательский запрос превращается в несколько cross-zone переходов.⚡️В итоге проблема может выглядеть как “медленный backend”, хотя приложение просто постоянно гоняет данные между зонами. При масштабировании такие вещи легко пропустить, если смотреть только на CPU, RPS и средний latency. N.A.
netdev_budget: сколько пакетов kernel может обработать за один проход NAPI.
Посмотреть текущее значение:
sysctl net.core.netdev_budgetЕсли входящий поток постоянно превышает этот лимит, обработка переносится на следующие проходы. В результате растут очереди и latency, а CPU может выглядеть вполне нормально. Посмотреть, есть ли проблема именно на уровне softnet:
cat /proc/net/softnet_stat
Особенно интересны drops и количество обработанных пакетов. Если счётчики начинают быстро расти, проблема уже ближе к обработке пакетов ядром, а не к приложению.
Ещё один параметр связан со временем, которое kernel готов потратить на один такой проход:
sysctl net.core.netdev_budget_usecsИ вот здесь начинается интересный баланс: слишком маленький budget может оставить пакеты ждать следующего прохода, а слишком большой - позволить сетевой обработке надолго занять CPU и повлиять на остальные задачи. На загруженном сервере поэтому полезно смотреть не только bandwidth, но и PPS, softirq, softnet drops и NAPI budget. N.A.
На графике LB всё выглядит подозрительно: три backend’а работают, healthcheck зелёный, но один получает 80–90% запросов.Проверять сам алгоритм балансировки недостаточно. В L4 балансировке решение часто принимается для соединения, а не для каждого запроса. Для начала можно посмотреть распределение TCP-сессий на backend’ах:
ss -Htn state established '( sport = :443 )' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
Если перекос уже здесь, проблема появилась до уровня HTTP.
Дальше интересно посмотреть, как LB выбирает backend для разных потоков. При ECMP или L4 hashing одинаковые параметры потока могут постоянно попадать в один и тот же bucket.
ipvsadm -Ln --stats
Для IPVS здесь хорошо видны реальные counters по backend’ам, а не только состояние healthcheck.
Ещё одна ловушка - connection reuse.
Несколько тысяч HTTP-запросов могут ехать внутри небольшого количества долгоживущих TCP-соединений.
ss -Htn state established | awk '{print $4}' | sort | uniq -c | sort -nr | head
Поэтому RPS между backend’ами может отличаться в разы даже при идеально работающем алгоритме распределения соединений.
Если используется persistence, sticky sessions или hash по source IP, перекос становится ещё сильнее: несколько крупных клиентов фактически могут “забрать” один backend целиком.
И тогда проблема выглядит как сломанный балансировщик, хотя LB честно выполняет выбранную ему стратегию.
N.A.RIB, но пакет всё равно уходит не туда. Особенно неприятно это становится после изменений BGP, ECMP или policy routing.
В Linux полезно сразу смотреть не только таблицу маршрутов, а конкретное решение forwarding для нужного адреса:
ip route get <ip> from <source-ip>Здесь уже учитываются source address и выбранная таблица маршрутизации. Результат может отличаться от того, что вы видите обычным
ip route.
Для нескольких routing tables:
ip ruleПотому что маршрут в
main может быть абсолютно правильным, но пакет до неё вообще не дойдёт.
А дальше начинается интересное: control plane может считать маршрут лучшим, а dataplane уже использовать другую запись.
На сетевом оборудовании это удобно проверять отдельно:
show ip route <prefix> show ip cef <destination>Первая команда показывает решение routing process, вторая - что реально установлено в forwarding table.
Если между ними есть расхождение, искать проблему уже нужно не в самом маршруте, а в процессе установки маршрутов в FIB, ECMP, next-hop resolution или policy routing.Именно поэтому “маршрут есть” ещё не означает, что пакет пойдёт по этому маршруту. N.A.
Хост просто не может быстро получить MAC адрес - и весь трафик встаёт на паузу. Особенно больно это бьёт по VoIP, SSH и интерактивным сервисам.Обычно такие таймауты не видны в обычных логах, поэтому отлавливать их нужно вручную. 1️⃣Проверяем, как часто хост делает ARP-запросы Если сосед «теряется», хост начнёт усиленно спрашивать его MAC. Linux:
tcpdump -ni eth0 arp
Если видишь 2–3 повторяющихся ARP Requests подряд → проблема.
Cisco:
debug arpили
show arpЕсли запись в ARP-таблице часто «флапает», это ненормально. 2️⃣Смотрим, что происходит в момент задержки Отслеживаем, пропадают ли ответы:
tcpdump -ni eth0 "arp or icmp"
Если ping висит, а в дампе есть ARP Requests без ARP Reply → таймаут найден.
3️⃣Проверяем ARP-таблицу на переполнения и expiry
Если ARP-таблица забилась или записи слишком быстро удаляются → будут постоянные timeouts.
Linux:
ip -s neigh
Подозрительные признаки:
• состояние FAILED
• резкий рост timeouts
• записи часто переходят FAILED → REACHABLE → FAILED
4️⃣Проверяем ARP кэш на коммутаторе
Иногда виноват L2 — коммутатор забывает MAC или шлёт фреймы не туда.
Cisco:
show mac address-table dynamic | include <MAC>Если MAC постоянно пропадает → проблема на сегменте. N.A.
Пинг проходит, TCP-соединение устанавливается, но большие файлы не скачиваются, HTTPS периодически зависает, а часть API-запросов просто уходит в таймаут.Во многих случаях причина оказывается не в самом MTU, а в том, что Path MTU Discovery (PMTUD) перестал работать где-то по пути. Проверить, какой максимальный размер пакета реально проходит без фрагментации, можно так:
ping -M do -s 1472 <ip>
Если пакет не проходит, постепенно уменьшайте размер. Это позволяет быстро найти реальный MTU на маршруте.
Полезно посмотреть и сам маршрут пакетов.
tracepath <ip>В отличие от обычного traceroute,
tracepath умеет определять PMTU и показывает, где он изменился.
Если используется TCP, можно проверить MSS, который стороны согласовали при установке соединения.
tcpdump -i <iface> 'tcp[tcpflags] & tcp-syn != 0'
Иногда именно здесь видно, что MSS неожиданно уменьшился или вообще не соответствует ожидаемому MTU.
Ещё один частый сценарий - ICMP Fragmentation Needed где-то фильтруется firewall’ом. В итоге PMTUD перестаёт работать, а соединение начинает “зависать” только на больших пакетах.
🔥Поэтому симптомы могут быть очень разными: открывается главная страница сайта, но не загружаются изображения, работает SSH, но зависает SCP, API отвечает на маленькие запросы и молчит на больших.
Когда проблема проявляется настолько выборочно, проверка PMTUD обычно экономит часы поиска “неисправной сети”.
N.A.При этом сами правила выглядят правильными, а нужные allow вообще присутствуют в конфигурации.Во многих firewall обработка идёт сверху вниз, и первое совпавшее правило завершает проверку. Всё, что находится ниже, уже не участвует.
iptables -L INPUT --line-numbers -n -v
Сразу видно порядок правил и счётчики срабатываний. Нередко оказывается, что трафик вообще не доходит до нужного ACCEPT.
Если используется nftables, полезнее смотреть итоговый ruleset, а не отдельные таблицы.
nft list rulesetТак проще заметить цепочки, jump’ы и правила, которые перехватывают трафик раньше ожидаемого. Когда причина всё ещё неочевидна, помогает трассировка обработки пакета.
nft monitor traceОна показывает, через какие цепочки проходит пакет и на каком именно правиле обработка заканчивается. Ещё один полезный приём - посмотреть, какое правило действительно набирает счётчики.
iptables -L -v -n
Иногда именно здесь выясняется, что проблема не в “неправильном” правиле, а в том, что до нужного правила пакет никогда не доходит.
В больших конфигурациях порядок правил зачастую важнее их содержания. Одно слишком общее DROP, REJECT или широкое условие в начале цепочки способно незаметно перечеркнуть десятки корректных правил ниже.
N.A.Две VPC связаны, маршруты настроены, Security Groups выглядят правильно, но часть сервисов всё равно не может обмениваться трафиком.Похожая картина возникает, когда путают возможности VPC Peering и PrivateLink - внешне они решают похожую задачу, но работают совершенно по-разному. Если используется Peering, сначала стоит убедиться, что маршрут действительно существует.
ip routeНо даже при корректной маршрутизации может оказаться, что нужная сеть недоступна из-за отсутствия transitive routing. Через Peering нельзя “пройти транзитом” в третью VPC - каждая связь строится напрямую. Если используется PrivateLink, полезно проверить, к какому Endpoint вообще подключён сервис.
aws ec2 describe-vpc-endpointsЗдесь часто выясняется, что доступ есть только к опубликованному сервису, а не ко всей сети. PrivateLink вообще не предназначен для полноценного сетевого взаимодействия между VPC. Ещё один момент - DNS.
dig <service-endpoint>При отключённом Private DNS часть клиентов продолжает обращаться по публичному имени, даже находясь внутри VPC, и диагностика начинает выглядеть очень запутанной. В итоге обе технологии соединяют VPC, но с разной логикой: VPC Peering даёт сетевую связность между подсетями без транзитной маршрутизации, а PrivateLink публикует конкретный сервис, вообще не открывая доступ к остальной сети. Именно из-за этого ограничения чаще всего всплывают уже в проде, а не на этапе настройки. N.A.
