networkadm | Unsorted

Telegram-канал networkadm - Network Admin

12157

Обучающий канал по сетевому и системному администрированию. Сотрудничество: @dad_admin Биржа: https://telega.in/c/networkadm РКН: https://bit.ly/4ioc61C

Subscribe to a channel

Network Admin

Как stateful firewall ломает VoIP NAT: conntrack, sip-helper и ALG под капотом

VoIP через NAT — это боль. Даже если вы пробросили нужные порты и открыли RTP, звонки могут не работать.

Причина — stateful firewall и особенности его работы с динамическими протоколами.


Основная беда — это SIP. Протокол передаёт IP-адреса и порты в теле пакетов, а не в заголовке. Stateful-фильтры, вроде conntrack, пытаются понять, как работает SIP, и вмешиваются: перенаправляют порты, переписывают IP, и даже создают свои правила.

Это делает отладку почти невозможной, особенно если подключены SIP ALG или sip-helper.

На Linux это может проявляться так:

входящий звонок идёт, но голос односторонний или пропадает;
conntrack создаёт странные сессии, которые живут не по правилам;
звонки перестают работать после перезагрузки роутера, хотя конфигурация не менялась.

Вот к примеру:

Проверка conntrack-сессий:

conntrack -L | grep sip


Отключение sip-helper в iptables:

modprobe -r nf_conntrack_sip


В nftables sip-helper уже не подгружается по умолчанию — и VoIP работает стабильнее, но требует ручной настройки NAT.

Что делать
1️⃣Отключайте ALG и sip-helper везде, где можете. Они только мешают.
2️⃣Контролируйте TTL и время жизни conntrack-сессий — SIP может ждать ответа дольше, чем сессия живёт.
3️⃣Используйте STUN и ICE у клиентов, особенно на NAT’ах.
4️⃣Если VoIP работает через VPN — выключите SIP-оптимизации совсем.

N.A. ℹ️ Help

Читать полностью…

Network Admin

Huawei VRP. Часть 2: передача файлов, удаление и установка ПО

Продолжаем работу с CLI на оборудовании Huawei. В этой части — как загрузить или скачать файлы по TFTP/FTP, удалить ненужное и установить новую прошивку.

Передача файлов через TFTP

Простейший способ передать файлы — через TFTP-сервер. На ПК можно использовать tftpd32 или встроенный сервер в Linux.

На Huawei VRP:

tftp 192.168.0.10 get vrpcfg.zip


— забрать файл с сервера.

tftp 192.168.0.10 put vrpcfg.zip


— отправить на сервер.

Убедитесь, что TFTP разрешён в настройках и нет блокировки межсетевым экраном.

Передача через FTP

FTP удобен, когда нужен логин/пароль или работаете с защищённым сегментом.

ftp 192.168.0.10


После логина можно использовать команды:

get vrpcfg.zip
put backup/vrpcfgbak.zip


Удаление файлов

Очистка памяти бывает критична перед обновлением прошивки:

delete vrpcfg.zip


или папки:

rmdir backup


Система спросит подтверждение — отвечайте Y.

Установка ПО и настройка автозагрузки

Загрузите прошивку в корень:

dir


Найти файл .cc, например:

vrp-basic.cc


Задать прошивку по умолчанию:

startup system-software vrp-basic.cc


Указать конфигурацию:

startup saved-configuration vrpcfg.zip


Проверить настройки загрузки:

display startup


И перезагрузить устройство:

reboot

Читать полностью…

Network Admin

Huawei VRP. Часть 1: Telnet и файловая система вживую

В этом посте разбираемся, как удалённо зайти на оборудование Huawei по Telnet, проверить состояние устройства и поработать с его файловой системой. Всё — через CLI.

Подключение через Telnet

По умолчанию Telnet работает на порту 23. На Huawei VRP устройство может быть и сервером, и клиентом Telnet. В простом сценарии с ПК на Windows можно подключиться так:

telnet 10.137.217.177


После ввода логина и пароля вы получите приглашение командной строки:

<Huawei>


Минимальный набор команд после входа:
• display version — показывает прошивку и версию ПО.
• display current-configuration — текущая конфигурация.
• display interface brief — список интерфейсов и их состояния.

Файловая система Huawei VRP

На маршрутизаторах это чаще всего флэш и SD, на коммутаторах — флэш и CF. Основной конфиг — vrpcfg.zip, системное ПО — *.cc.

Посмотреть содержимое хранилища:

dir


Создать каталог:

mkdir backup


Скопировать и переименовать файл:

copy vrpcfg.zip backup/vrpcfgbak.zip


Проверить, что копия на месте:

cd backup
dir


N.A. ℹ️ Help

Читать полностью…

Network Admin

Имба: в сети обнаружили мегашпаргалку с самыми полезными нейросетями на все случаи жизни.

Сохраняем самое крутое:
🤩Claude 3.7 Sonnet — мастхев для программистов
🤩Same New — быстрая копия интерфейса сайта
🤩Openrouter — доступ ко всем ИИ
🤩Suno AI — своя музыка с нейросетью

Подпишись и находи для себя крутые нейросети бесплатно: /channel/+pn8vPUiMNWw4MWJi

Читать полностью…

Network Admin

💰Вопрос безопасности в разработке становится всё более актуальным. Но как обосновать инвестиции в безопасность для бизнеса? Как оценить её финансовую сторону?

🗓Открытый вебинар 23 апреля в 20:00 мск даст ответы на самые важные вопросы. Мы расскажем, как сэкономить на долгосрочных потерях, внедряя эффективные меры безопасности с самого начала разработки.

🧑‍💻Спикер Максим Чащин — директор по информационной безопасности в ГК «Девелоника».

Вы узнаете, сколько стоит устранение уязвимостей, как принцип «shift left» влияет на итоговую производительность и как измерять эффективность мер безопасности. Это поможет вам убедить руководство инвестировать в безопасность на всех уровнях разработки.

👉Присоединяйтесь к открытому уроку и получите скидку на большое обучение «Внедрение и работа в DevSecOps»: https://otus.pw/L8gYc/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Network Admin

🔍 Больше, чем Kafka — для тех, кто не хочет терять контроль

Чем сложнее инфраструктура, тем выше риски. Kafka запускается быстро, но требует постоянного внимания и ресурсов: кластеры, ZooKeeper, ручное масштабирование — всё это вы и так знаете.

YDB Topics — альтернатива, созданная для тех, кто привык держать всё под контролем. Это брокер сообщений, встроенный в базу данных, с транзакциями между топиками и таблицами, отказоустойчивостью по умолчанию и без лишнего зоопарка сервисов.

🕛 23 апреля в 12:00 - вебинар не просто про продукт, а про философию: надёжность — не "фича", а норма.

Читать полностью…

Network Admin

23 апреля встречаемся на хардкорном митапе «Метрокластер на отечественном»

Что в программе?
▪️Разбор архитектуры и нюансов технологии метрокластера, особенностей проектирования и реализации
▪️Live-demo работы решения на отечественном оборудовании и ПО

Вы увидите, как ведет себя прикладное ПО при выходе из строя отдельных компонентов кластера и продуктивной площадки целиком.

В составе стенда два набора оборудования:
▪️СХД Аэродиск
▪️Сервер виртуализации Aquarius под управлением zVirt
▪️Коммутатор Qtech

и один набор ПО:
▪️СУБД Postgres Pro под синтетической нагрузкой
▪️Платформа анализа данных Visiology с рабочим местом администратора и руководителя ИТ-инфраструктуры и панелью по анализу данных

Между двумя площадками эмулируется расстояние 60 км. Отслеживать состояние комплекса будет система мониторинга «Пульт».

🗓 Когда?

23 апреля, 16:00

Регистрация

Читать полностью…

Network Admin

🔌 Нужно железо без лишних вопросов?

Когда хочется развернуть проект быстро и без лишней зависимости от соседей по хостингу — можно взять BareMetal от Yandex Cloud. Это физический сервер под вашу задачу: ставите нужную ОС, свою виртуализацию, подключаетесь через SSH, KVM или API.

Плюс готовая интеграция с облаком: можно распределять нагрузку между выделенными серверами и облачной инфраструктурой. Всё изолировано, размещено в дата-центрах в РФ, безопасность по стандартам. Поддержка — 24/7, если что, помогут.

Попробовать BareMetal и подобрать нужную конфигурацию можно тут. Всё быстро, понятно и без лишних движений.

Читать полностью…

Network Admin

Прокачай свои навыки Kubernetes

Kubernetes — это мощь. Но по-настоящему он раскрывается в руках тех, кто знает, как с ним обращаться.

Хотите уверенно управлять кластерами, настраивать сеть, разруливать инциденты и держать инфраструктуру под контролем? ➡️Тогда вам на курс «Kubernetes Мега» от Слёрма.

На обучении вы: 

👉 Освоите перенос продукта на Kubernetes
👉 Научитесь разворачивать отказоустойчивые кластеры
👉 Ускорите траблшутинг и будете решать инциденты как профи
👉 Повысите стабильность и безопасность инфраструктуры
👉 Настроите автоматическую ротацию сертификатов, автодеплой и защищённое хранение секретов

Это не просто курс. Это путь к профессиональному уровню в K8s.

Старт — 21 апреля, вы как раз успеваете!

Посмотрите программу и забронируйте место ➡️ по ссылке

#реклама
О рекламодателе
erid: 2W5zFJJ5t3J

Читать полностью…

Network Admin

Как утечка MTU ломает SSH, туннели и мониторинг

Если вы замечали, что SSH с VPN «висит» после логина, HTTPS дёргается, а Zabbix теряет метрики без причины — проблема может быть не в приложении, а в MTU. 


Причём даже если ping работает нормально.

MTU (Maximum Transmission Unit) — это максимальный размер пакета на уровне канала. И если он больше, чем реально проходит через узлы между клиентом и сервером, пакеты начинают теряться без уведомлений, особенно если где-то по пути ICMP заблокирован (так называемый ICMP blackhole).

Как это выглядит на практике
1️⃣SSH коннектится, но команды «висят» после логина
2️⃣ HTTP-ответ не доходит до клиента (особенно при больших заголовках)
3️⃣ VPN соединение создаётся, но трафик не проходит
4️⃣ Zabbix или Prometheus теряют отдельные метрики
5️⃣ curl/telnet зависают, ping — работает
6️⃣ ICMP Fragmentation Needed не приходит из-за фильтрации

Диагностируем:

tracepath сразу показывает проблемный узел:

tracepath 8.8.8.8


Там, где TTL доходит, но MTU резко падает — и есть узкое место.

ping с флагом “не фрагментировать”:

ping -M do -s 1472 1.1.1.1


Если на 1472 пинг не проходит, а на 1400 — всё ок, MTU завышен.

3️⃣ tcpdump покажет проблему в TCP и ICMP:

tcpdump -ni wg0 icmp or tcp port 443


Смотрите на недостающие ACK или неожиданные RST.

Как лечить

Уменьшаем MTU на интерфейсе VPN (WireGuard, OpenVPN):
Для WireGuard:

ip link set wg0 mtu 1380


Клэмпим MSS через iptables (актуально, если не можете влиять на клиента):

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu


Проверка mtu через ifconfig/ip:

ip link show dev wg0


На сетевом оборудовании — настраиваем MSS clamping или активируем Path MTU Discovery.

N.A. ℹ️ Help

Читать полностью…

Network Admin

Как нейтральные узлы ломают QoS: когда DSCP обнуляется, а VoIP задыхается

На бумаге приоритизация VoIP выглядит идеально: помечаем трафик DSCP EF, настраиваем очереди, наслаждаемся стабильной связью.

На практике — где-то по пути эти метки теряются, и звонки начинают лагать. Почему?


Одна из главных причин — “сетевые нейтралки”, то есть промежуточные узлы, которые не обязаны заботиться о вашем QoS.

Это могут быть CG-NAT-узлы провайдера, контроллеры Wi-Fi, туннельные интерфейсы, плохо настроенные маршрутизаторы.

Они могут обнулять DSCP в ноль, затирать его своими политиками или просто игнорировать вообще всё, что связано с приоритетом.

В продакшене это выглядит так: звонки между офисами через туннель — и внезапно лаги.

Начинаем копать — оказывается, WireGuard не передаёт DSCP. Или MPLS-сеть оператора зачищает приоритеты на выходе. Или пограничный маршрутизатор просто не сконфигурирован сохранять метки.

Иногда даже корпоративный DPI-фильтр может сбросить DSCP “на всякий случай”, если видит неизвестное приложение.


Решения тут нетривиальные.

Во-первых, стоит тщательно оттрассировать путь трафика — tcpdump, mtr, tracepath -V — и посмотреть, где именно пропадают метки.

Во-вторых, нужно проверять настройки всех туннелей и интерфейсов — во многих случаях параметр сохранения DSCP нужно включать явно.

Если не помогает — спасают отдельные VLAN и приоритет на уровне 802.1p, чтобы хотя бы на L2 звонки шли быстрее. И конечно, не мешает написать провайдеру и спросить напрямую: “А вы DSCP вообще не трогаете?”

В итоге: QoS по DSCP — не магия, а тонкая настройка всей цепочки. Один узел без поддержки — и весь план по приоритизации VoIP рушится.

N.A. ℹ️ Help

Читать полностью…

Network Admin

Сквозной QoS для VoIP: приоритезация трафика через VLAN и DSCP

Голосовой трафик чувствителен к задержкам и потере пакетов. Чтобы звонки не превращались в кашу, QoS (качество обслуживания) должен быть реализован сквозным — от телефона до сервера.

Это делается с помощью сочетания VLAN и DSCP на L2 и L3 уровнях.

Схема:
1️⃣Телефон/софтфон маркирует VoIP-пакеты (DSCP 46 — Expedited Forwarding).
2️⃣Коммутатор помечает трафик в VLAN с нужным CoS.
3️⃣Маркировка сохраняется и передаётся на маршрутизаторы.
4️⃣На выходе в интернет или VPN трафик попадает в приоритетные очереди.

DSCP (L3):
Это поле в IP-заголовке, которое указывает приоритет пакета. Для VoIP используется DSCP 46 (EF). Пример iptables-маркировки:

iptables -t mangle -A OUTPUT -p udp --dport 5060 -j DSCP --set-dscp-class EF


Или с tc и приоритезацией через qdisc:

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit ceil 10mbit prio 0
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dscp 46 0xfc flowid 1:10


VLAN + CoS (L2):
Если оборудование поддерживает 802.1p, можно использовать VLAN и CoS-биты. Настройка зависит от модели, но общая идея:
• Выделить VoIP-трафик в отдельную VLAN
• Назначить приоритет (обычно 5 или 6)
• На маршрутизаторе сопоставить CoS и DSCP

Пример (Cisco-like):

mls qos
interface FastEthernet0/1
switchport voice vlan 100
mls qos trust dscp


N.A. ℹ️ Help

Читать полностью…

Network Admin

Схема построения overlay-сети с WireGuard и BGP

Наша цель: объединить три удалённых площадки (A, B, C) в одну защищённую L3-сеть с маршрутизацией между всеми участниками без головной боли от десятков туннелей.

Архитектура
• Каждая площадка — это нода с Linux-сервером.
• На каждой ноде:
• работает WireGuard — создает защищённый туннель;
• крутится FRRouting (или Bird) — обменивается маршрутами с соседями по BGP;
• Получается mesh-топология, где каждый может видеть всех, и BGP сам решает, куда как идти.

Схематично:

      [ Site A ]
192.168.10.0/24
|
[ wg0: 10.10.0.1 ]
|
BGP (AS65001)
/ \
/ \
/ \
[ Site B ]------[ Site C ]
192.168.20.0 192.168.30.0
wg0: 10.10.0.2 wg0: 10.10.0.3
BGP: AS65002 BGP: AS65003


WireGuard пример на A (10.10.0.1):

[Interface]
Address = 10.10.0.1/32
PrivateKey = <keyA>
ListenPort = 51820

[Peer]
PublicKey = <keyB>
AllowedIPs = 10.10.0.2/32
Endpoint = B:51820
PersistentKeepalive = 25

[Peer]
PublicKey = <keyC>
AllowedIPs = 10.10.0.3/32
Endpoint = C:51820
PersistentKeepalive = 25


FRRouting (на той же A):

router bgp 65001
bgp router-id 10.10.0.1
neighbor 10.10.0.2 remote-as 65002
neighbor 10.10.0.3 remote-as 65003

network 192.168.10.0/24


Аналогично — на остальных узлах (только меняются IP и AS).

Как это работает:
1. WireGuard шифрует весь межплощадочный трафик.
2. FRRouting обменивается маршрутами и строит таблицы.
3. Внутри площадки используется обычная внутренняя сеть (например, 192.168.10.0/24).
4. Сеть становится самонастраивающейся: маршруты появляются/пропадают в зависимости от доступности узлов.

N.A. ℹ️ Help

Читать полностью…

Network Admin

Сквозной QoS через VLAN и DSCP: как дать VoIP трафику приоритет во всей сети

Если звонки через SIP или WebRTC в вашей сети начинают «задыхаться», причина почти всегда — отсутствие приоритизации.

QoS помогает отделить важный трафик от остального и гарантировать, что голос не будет конкурировать с YouTube и бэкапами.

L2: приоритет через 802.1p (CoS)
Работает в пределах VLAN. Используется приоритизация пакетов по значению CoS в VLAN-теге (0–7).

На Cisco:

mls qos
interface FastEthernet0/1
switchport access vlan 10
mls qos trust cos.


Убедитесь, что телефон или SIP-клиент выставляет CoS. Если нет — настройте политику на коммутаторе, которая маркирует трафик по MAC или порту.

L3: DSCP-маркировка и приоритет в маршрутизаторах
На сетевом уровне трафик помечается DSCP-маркером в IP-заголовке. Для VoIP — обычно EF (код 46).

Пример на Cisco:

ip access-list extended VOIP
permit udp any any range 16384 32767

class-map match-any VOIP
match access-group name VOIP

policy-map VOIP-POLICY
class VOIP
set dscp ef
priority percent 20

interface GigabitEthernet0/0
service-policy output VOIP-POLICY


DSCP сохраняется между маршрутизаторами. Главное, чтобы промежуточные устройства не обнуляли метку.

В Linux тоже можно
Маркировка через tc или iptables:

iptables -t mangle -A OUTPUT -p udp --dport 5060 -j DSCP --set-dscp-class EF


Или с помощью tc:

tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 64kbps ceil 128kbps


N.A. ℹ️ Help

Читать полностью…

Network Admin

Запускаем цикл вебинаров и открытых демонстраций – «Basisный интенсив с Merlion»!

В течение года мы разберем функциональные особенности экосистемы продуктов ведущего российского разработчика решений для оказания облачных услуг, платформы динамической инфраструктуры и виртуализации – Basis:

Basis Dynamix Standard – гибкая платформа управления виртуализацией для контроля гипервизоров и виртуальных ЦОД на базе виртуальных машин.
Basis Dynamix Enterprise – высокопроизводительная платформа на базе динамической инфраструктуры для управления виртуальными серверами и контейнерами.
Basis Workplace – ПО для создания инфраструктуры виртуальных рабочих столов с возможностью выбора сценария использования.

Вы узнаете, как решения помогают управлять виртуальными серверами, обеспечивать контроль гипервизоров и создавать инфраструктуры виртуальных рабочих столов.

Регистрация (https://tglink.io/c202fd30dd4f?erid=2W5zFJEfNCp) осуществляется 1 раз – и вы получаете доступ ко всей серии вебинаров.

#реклама

О рекламодателе

Читать полностью…

Network Admin

Многие отечественные компании по-прежнему используют зарубежные opensource-решения TACACS+ для управления доступом к сетевому оборудованию. При этом есть большой риск столкнуться с внезапным прекращением развития продуктов, отсутствием оперативной поддержки и исправлений уязвимостей.

Eltex предлагает современное ПО для контроля доступа к сети и сетевому оборудованию – систему NAICE с гарантированной технической поддержкой, мультивендорностью, развитием функциональности под требования заказчиков. В версии 0.8 была добавлена поддержка TACACS+, теперь NAICE может выступать как сервер управления доступом к сетевому оборудованию.

Присоединяйтесь к нашему техническому вебинару 29 апреля в 10:00 (МСК) и узнайте всё о новом функционале в системе.

Что будет:

• Демонстрация установки NAICE и настройки TACACS+
• Возможности TACACS+ в NAICE: политики доступа, авторизации команд, интеграции с AD и др.
• Примеры на реальном оборудовании
• Ответы на вопросы от экспертов Eltex
• Лицензирование NAICE и функционала TACACS+

Вебинар будет полезен техническим специалистам, отвечающим за сетевую инфраструктуру и безопасность.

Зарегистрируйтесь, чтобы не пропустить.

Реклама. ООО "ПРЕДПРИЯТИЕ "ЭЛТЕКС". ИНН 5410108110. erid: 2W5zFJYtkeC

Читать полностью…

Network Admin

Deckhouse — разработчик лидирующей платформы контейнеризации — проводит свой первый инженерный митап: Deckhouse User Community.

Когда: 20 мая, сбор гостей с 18:15, начало в 19:00 (мск)
Где: в Москве и онлайн.
Для кого: DevOps-инженеры, SRE, сисадмины и платформенные разработчики.
О чём: работа Cilium и распределённый инференс LLM с K8s в домашних условиях.
Сколько стоит: бесплатно, но регистрация обязательна — на такое событие рекомендуем поторопиться с бронью места.

Зарегистрироваться на DUC

Читать полностью…

Network Admin

SFTP как точка отказа: когда libssh зависает при логине из-за отсутствия энтропии

На слабых VPS, embedded-хостах и в dev-контейнерах можно столкнуться с неожиданной проблемой: sftp (через libssh) виснет при подключении.

Никаких логов, таймаутов, ошибок. Просто «залипло».


Обычно дело не в сервере, а в недостатке энтропии в системе. libssh по умолчанию использует /dev/random, а не /dev/urandom, и если пул энтропии пустой — генерация ключа блокируется.

Особенно это критично в headless-системах без клавиатуры, мыши, звуковой карты и других источников «шумов».

Как диагностировать:
1️⃣Проверить текущее состояние энтропии:

cat /proc/sys/kernel/random/entropy_avail


Если значение меньше 100–200 — уже плохо.

2️⃣Пробуем strace sftp user@host и замечаем, что процесс застрял на чтении /dev/random.

Что делать:
В контейнерах и VPS — установить haveged или rng-tools, чтобы генерировать энтропию:

apt install haveged
systemctl enable --now haveged


• Если вы собираете libssh сами — используйте флаг LIBSSH_USE_URANDOM.
• Для тестов — можно подменить /dev/random на /dev/urandom через LD_PRELOAD (не для продакшна):

LD_PRELOAD=./fake-random.so sftp user@host


где fake-random.so — небольшая заглушка, перенаправляющая open("/dev/random") на "/dev/urandom".

N.A. ℹ️ Help

Читать полностью…

Network Admin

Когда ICMP нужен: как его отсутствие ломает MSS и PMTU discovery

Во многих инфраструктурах ICMP считают «ненужным» и отрубaют его на периметре — мол, безопасность, чтобы никто не пинговал.

В результате получаем баги, которые тяжело отлаживать: от медленного SSH до обрыва TLS.


Path MTU Discovery (PMTUD) в TCP/IP полагается на ICMP Type 3 Code 4 (Fragmentation Needed).

Когда по пути есть узел с меньшим MTU, он должен прислать ICMP-ошибку и сообщить, какой размер пакета возможен. Если ICMP блокируется, пакеты просто молча теряются.

Признаки в продакшене:
• SSH или HTTPS зависает сразу после подключения
• TLS соединение срывается без ошибки
• ping до узла работает, но curl или scp — нет
• MTU выше по цепочке (например, GRE или IPsec) не согласуется

Как диагностировать
Проверка MTU:

ip link | grep mtu  
ip route get <dst>
ping -M do -s 1472 <dst> # для MTU 1500 с учетом IP+ICMP


Анализ через tcpdump:

tcpdump -i eth0 icmp or tcp port 443


Если нет ICMP Fragmentation Needed — значит, он кем-то фильтруется.

Проверка firewall’ов:
Убедитесь, что правила (например, в iptables или cloud security group) не блокируют ICMP Type 3.

Как лечить
Пропустить ICMP Type 3 на периметре (или хотя бы Code 4):

iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT


Уменьшить MSS вручную на туннелях или при NAT:

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu


Проверить, не отключен ли PMTU discovery в системе:

sysctl net.ipv4.ip_no_pmtu_disc


N.A. ℹ️ Help

Читать полностью…

Network Admin

Когда conntrack не спасает: потерянные state’ы при NAT failover

Вы строите отказоустойчивую NAT-схему с двумя Linux-хостами. На обоих — iptables с маскарадингом, conntrack и failover через VRRP (например, с keepalived).

Всё выглядит нормально — пока один узел не уходит в оффлайн. После этого все существующие подключения падают, хотя fallback сработал, IP переехал, и сервис вроде доступен.


Что происходит:
NAT работает только при наличии state о соединении. Таблица состояний conntrack привязана к ядру, и при смене хоста она теряется — второй сервер ничего не знает о старых сессиях. В результате:

TCP-потоки обрываются;
UDP перестаёт ходить (особенно заметно с DNS);
клиент пытается переподключиться, но если TTL на уровне приложения высокий — может повиснуть на retry.

Как это диагностировать:
1️⃣Проверяем текущие state’ы:

conntrack -L | grep 192.168.0.100


2️⃣Ловим сессии, потерявшиеся после failover:

conntrack -E | grep [ip-источника]


3️⃣Отслеживаем попытки соединений без состояния:

tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0'


Если SYN идёт, но SYN-ACK нет — вероятно, новый хост не знает об исходной сессии.

Как решить:
Синхронизация state’ов:
Установите conntrackd, настройте режим FT-FW (Failover). Он будет реплицировать таблицы состояний между узлами:

Sync {
Mode FTFW {
...
}
}


Сохранение/восстановление:
В некоторых сценариях (например, при перезагрузке) можно попробовать дампить state’ы:

conntrack -L > /var/lib/conntrack.backup


А потом — восстановить:

conntrack -I < /var/lib/conntrack.backup


Трюк для UDP: если потеря state критична (например, в VoIP), используйте NAT-keepalive, чтобы клиент сам инициировал переустановку state после фейловера.

Читать полностью…

Network Admin

ARP flux и виртуализация: когда Linux отвечает не с того интерфейса

Что это вообще за баг?
Виртуалки, бонды, VRRP, несколько интерфейсов на одном хосте — классическая среда для ловли ARP flux.

Это ситуация, когда ядро Linux отвечает на ARP-запрос не с того интерфейса, на который он пришёл.

Вроде мелочь, но внезапно: неправильный MAC, рушится failover, свитчи запоминают неправильные порты, и начинается магия.


Как это ловится?
Допустим, вы настраиваете keepalived с VRRP или делаете dual-homed сервер, и трафик вдруг уходит в никуда.

Проверяете tcpdump — ARP-ответ пришёл с другого интерфейса. Layer2-свитч делает неправильные записи в CAM-таблице, и VoIP, iSCSI или просто HTTP начинают флапать.

Почему это происходит?
По умолчанию ядро Linux считает, что интерфейсы — это просто физические каналы для одной общей таблицы маршрутов.

Оно не проверяет, что IP принадлежит конкретному интерфейсу — если IP есть в системе, он может быть “отвечен” с любого интерфейса. Это и есть ARP flux.

Как чинить?
Пара sysctl-параметров, которые спасают день:

# Запретить ядру отвечать на ARP-запросы с не того интерфейса
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_filter
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_filter


Если интерфейсов много — применяйте ко всем нужным. Можно прописать в /etc/sysctl.conf или /etc/sysctl.d/.

И как проверить, есть ли ARP flux прямо сейчас?

tcpdump -i any arp and ether src host <mac вашего сервера>


Если ARP replies приходят не с того интерфейса, с которого ожидали — вы его словили.

Где это особенно критично?
• VRRP и L3 failover’ы
• Сетевые storage, где важна предсказуемость ARP
• Виртуалки с несколькими интерфейсами
• Контейнерные среды с нестандартными bridge’ами

N.A. ℹ️ Help

Читать полностью…

Network Admin

MTU + TSO/GSO/UDP: когда пакеты разваливаются на границе VxLAN

VxLAN, jumbo frames и offload-механизмы вроде TSO/GSO — отличная штука, пока всё работает. 


Но стоит один компонент неправильно выставить MTU или забыть про особенности UDP в туннелях — и вы ловите странные таймауты, обрывы и падения производительности.

Что ломается:

Когда внутри туннеля передаётся большой сегмент TCP, рассчитанный на offload (TSO), а снаружи он должен быть помещён в VxLAN, происходит фрагментация.

UDP в ядре Linux с GSO не всегда корректно обрабатывает такие сценарии, особенно если на сетевой карте отключены нужные offload-флаги.

В некоторых сетях это приводит к такому:
• Nginx внезапно залипает на ответе;
• SSH отваливается при открытии tmux;
• tcpdump ничего не показывает, но ss висит в ESTABLISHED;
• а dmesg втихаря шепчет про “UDP: fragmentation failed”.

Как это отлавливать:
Проверка MTU:

ip link show dev eth0


Сравните с ip link show dev vxlan100. Виртуальный интерфейс часто выставляется на 1500, что не учитывает заголовки (VxLAN + UDP + IP).

Анализ GSO/TSO/SG:

ethtool -k eth0 | grep -i 'tcp-segmentation-offload'
ethtool -k vxlan100


Иногда приходится принудительно отключать gso на уровне интерфейса:

ethtool -K vxlan100 gso off


sysctl-трюки:
Проверка/отключение GRO:

sysctl net.core.netdev_max_backlog
sysctl net.ipv4.udp_rmem_min


tcpdump против правды:
Если tcpdump не видит проблему, попробуйте с -j adapter_unsynced -s 0 -n или через nstat, чтобы проверить, есть ли фрагментированные пакеты, падающие в ядре.

N.A. ℹ️ Help

Читать полностью…

Network Admin

Как TCP slow start ломает API-gateway после простоя

Когда API-шлюз долго простаивает, первый клиент после “засыпания” получает неприятный бонус — повышенную задержку.

Особенно это видно на малых payload: TCP начинает с минимального окна, передаёт несколько MSS, ждёт ACK… и только потом разгоняется. 


Так работает TCP slow start — и это может ломать весь UX.

Симптомы:
— Первый запрос к API после простоя обрабатывается в разы дольше.
— В логах видно нормальное время backend’а, но высокая TTFB у клиента.
— В pcap видно задержки между первым и вторым сегментом TCP.

Почему так происходит:
TCP после простоя теряет CWND (congestion window) до минимального значения. Если запрос не был отправлен “целиком” в одном сегменте, начинается игра в догонялки с ACK’ами.

Как это фиксится:

1️⃣Прогрев сокетов заранее
В Nginx можно запустить fake-запросы через curl к себе раз в N минут. Это сохранит живые соединения и CWND.
Также помогает настройка keepalive_timeout, чтобы соединения не рвались.

2️⃣ Твик tcp_notsent_lowat
Позволяет управлять, сколько данных можно держать в буфере, прежде чем TCP начнёт их отправку.
Установка маленького значения tcp_notsent_lowat ускоряет отправку данных, даже если окно ещё не полностью заполнено.

Пример настройки:

sysctl -w net.ipv4.tcp_notsent_lowat=4096


3️⃣ В HAProxy
Используйте tune.ssl.default-dh-param, tune.bufsize, а также timeout client и timeout server в разумных пределах, чтобы не терять соединения по idle.
Также помогает http-reuse always и option http-keep-alive для постоянных соединений.

Диагностика:
— tcpdump и wireshark покажут, сколько MSS передаётся на первом этапе.
— ss -i покажет текущие значения CWND и RTT.
— Прогрев + sysctl + reuse дают улучшения до 30–50 мс в холодных запросах.

N.A. ℹ️ Help

Читать полностью…

Network Admin

Трюки с ip rule и policy routing: поднимаем multi-WAN на голом Linux без дорогих железок

Наш сценарий: два провайдера, failover, и исходящая маршрутизация — с минимумом магии


Когда у вас два провайдера, а маршрутизатор — это обычный Linux-сервер, можно вполне обойтись без дорогих решений и поднять multi-WAN с failover и выбором маршрута в зависимости от исходящего интерфейса.

Главное — понимать, как работает policy routing (ip rule) и грамотно использовать ip route + conntrack.

Задача:
• Провайдер 1 (eth0, IP 192.0.2.10, шлюз 192.0.2.1)
• Провайдер 2 (eth1, IP 198.51.100.10, шлюз 198.51.100.1)
• Хотим, чтобы по умолчанию трафик шел через провайдера 1, но могли задать правила для выхода через провайдера 2. В случае падения первого — переключаемся.

Конфигурация таблиц маршрутизации:

# /etc/iproute2/rt_tables
100 isp1
200 isp2


Добавим маршруты в таблицы:

ip route add 192.0.2.0/24 dev eth0 src 192.0.2.10 table isp1
ip route add default via 192.0.2.1 dev eth0 table isp1

ip route add 198.51.100.0/24 dev eth1 src 198.51.100.10 table isp2
ip route add default via 198.51.100.1 dev eth1 table isp2


Политики маршрутизации:

ip rule add from 192.0.2.10 table isp1
ip rule add from 198.51.100.10 table isp2


Теперь хост знает, что если исходный IP — от провайдера 1, маршрутизировать через его шлюз. То же для второго провайдера.

Failover:

Базово можно использовать ip route с приоритетами:

ip route add default via 192.0.2.1 dev eth0 metric 100
ip route add default via 198.51.100.1 dev eth1 metric 200


Или более продвинуто: скрипт, который пингует внешний IP через eth0, и при недоступности временно удаляет маршрут и добавляет eth1.

Но есть нюанс:

Policy routing сам по себе не сохраняет “состояние” соединения. Если маршрут ушёл на другой интерфейс, текущие соединения могут поломаться. Для этого нужен conntrack, и маршруты на основе марки пакетов (fwmark).

С помощью iptables и fwmark:

iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 2
ip rule add fwmark 2 table isp2


N.A. ℹ️ Help

Читать полностью…

Network Admin

🔍 Учитесь находить атаки в трафике до того, как они нанесут ущерб

28 апреля стартует практикум «Анализ сетевого трафика» от Positive Education — с разбором реальных атак и облачным стендом для отработки навыков.

Практикум готовили эксперты Positive Technologies:

Алексей Леднев, PT Expert Security Center
Кирилл Шипулин, PT NAD
— другие практики с опытом расследования сложных инцидентов.

Что в программе:

— материалы для самостоятельного изучения
— облачный стенд: воспроизводите атаки, анализируйте трафик, тренируйтесь выявлять угрозы
— живой чат для общения и поддержки

Вы узнаете:

— какие следы оставляют хакеры в трафике
— как отличать шум от реальных угроз
— что важно при расследовании инцидентов на основе сетевых данных

Подробнее — на сайте программы

Читать полностью…

Network Admin

Анализ отказов TCP-соединений: читаем state machine через ss и tcpdump

Когда curl висит, telnet не коннектится, а система молчит — пора лезть в TCP state machine.

Разберём, как руками понять, где застряло соединение, и почему SYN_SENT и SYN_RECV не двигаются дальше.

Быстрый вход

ss -tan state syn-sent — соединения, где отправлен SYN, но нет SYN+ACK
ss -tan state syn-recv — пришёл SYN, ждем ACK

На сервере:

ss -tan state syn-recv


На клиенте:

ss -tan state syn-sent


Если соединение висит в SYN_SENT — либо сервер не отвечает, либо трафик теряется. Если в SYN_RECV — сервер получил SYN, ответил SYN+ACK, но ACK не пришёл обратно.

Читаем tcpdump

На клиенте:

tcpdump -i eth0 tcp and port 443 -n


Типичный диалог:

Client -> Server: SYN
Server -> Client: SYN+ACK
Client -> Server: ACK


Если видим только SYN, и ничего больше — проблема на пути к серверу.

Если видим SYN и SYN+ACK, но ACK не уходит — клиент режет ответ (например, из-за iptables или маршрутов).

Залипание в SYN_SENT: причины

– iptables блокирует входящие SYN+ACK
– asymmetric routing: ответ уходит в другую сторону
– ECMP с плохой балансировкой
– сервер silent drop (например, DROP вместо REJECT)
– broken MSS clamping — SYN уходит, но не доходит обратно

Проверь MTU:

ip link show
ping -M do -s 1472 1.1.1.1


SYN_RECV, а клиент говорит: “сервер молчит”

На сервере:

iptables -L -n -v | grep syn
ss -n state syn-recv | wc -l


Смотрим, не упираемся ли в somaxconn или backlog:

sysctl net.core.somaxconn


В приложении (listen(backlog)), особенно в Go/Node — можно случайно оставить значение 0 или 1.

Провалы после ESTABLISHED

Если соединение ушло в ESTABLISHED, а потом трафик “не идёт” — смотри в tcpdump:

– большое количество dup ack, retransmission
– RST после SYN+ACK — mismatch по IP, портам или TCP options
– разрыв соединения из-за idle timeout на NAT/Firewall

Настройки, которые помогают

# увеличить очередь на слушающем сокете
sysctl -w net.core.somaxconn=1024

# таймауты для half-open соединений
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_retries2=5


Пример кейса из жизни

– Подняли новый балансировщик
– Соединения висят в SYN_SENT
– tcpdump: SYN уходит, SYN+ACK не возвращается
– ip route: return трафик уходит через другой интерфейс
– Решение: настроили policy routing для обратного трафика по тому же интерфейсу

N.A. ℹ️ Help

Читать полностью…

Network Admin

Что делать, если проект идёт через ж@пу? А команда не выполняет задачи, срывает сроки и все ходят с недовольной мордой?

Можно всех уволить, а можно начать читать канал Александра Наливайко, и научиться правильно создавать и управлять командами.

Александр уже 20 лет строит масштабные проекты, управляет командами 100+ человек и обладает универсальным методом, который можно применить практически в любой сфере.

А еще на канале можно почитать статьи на тему:

😡 Что делать, если начальник чудит?

🥸 Нужны ли внешние консультанты?

📝 Как правильно выстроить коммуникацию с коллегами


Подписывайся, и получи в подарок шаблоны писем для коммуникации на всех этапах проекта: @pmnavru

Читать полностью…

Network Admin

Netfilter hooks в ядре Linux

Когда вы пишете iptables -A INPUT -j DROP или настраиваете правила через nftables, всё это обрабатывается внутри ядра Linux через систему Netfilter hooks.

Это не просто “магия iptables” — это набор точек (hooks) в сетевом стеке, куда можно «вставиться» и обработать трафик.

Вот как устроена цепочка прохождения пакета:

Основные Netfilter-хуки:
1️⃣PREROUTING
Точка входа — пакет только попал в систему. Здесь работают raw, mangle и nat.
2️⃣ INPUT
Пакет адресован локальному хосту. Обрабатывается после PREROUTING. Здесь обычно фильтруется входящий трафик.
3️⃣ FORWARD
Пакет проходит транзитом (маршрутизируется). Используется в маршрутизаторах или bridge’ах.
4️⃣ OUTPUT
Пакет генерируется локально. Здесь работают mangle, nat, filter.
5️⃣ POSTROUTING
Самая последняя точка. Пакет уже выходит из системы, но можно изменить адреса или теги.

Цепочки и таблицы:
raw — самая ранняя точка. Не используется для NAT. Можно исключить пакет из connection tracking (через NOTRACK).
mangle — модификация полей IP-пакета: TTL, DSCP, приоритет и т.д. Также работает с маркировками (MARK).
nat — переназначение IP и портов (SNAT, DNAT, REDIRECT).
filter — фильтрация трафика (ACCEPT, DROP). Это то, что делает firewall.
security — SELinux и прочие LSM-хуки.

Порядок прохождения (пример для входящего пакета снаружи):

PREROUTING → (routing decision) → INPUT


Для локально исходящего:

OUTPUT → POSTROUTING


Для транзитного:

PREROUTING → FORWARD → POSTROUTING


Примеры использования:
• Пометить трафик для QoS:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1


• Исключить пакет из conntrack:

iptables -t raw -A PREROUTING -p udp --dport 123 -j NOTRACK


• DNAT в PREROUTING:

iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.5:8080


N.A. ℹ️ Help

Читать полностью…

Network Admin

IPv6: защита от MITM внутри подсети

Как RA-guard, DHCPv6 snooping и NDP-фильтрация помогают отсечь атаки на первом хопе


IPv6 открывает новые возможности — и новые риски. Даже без доступа к маршрутизатору злоумышленник в вашей подсети может внедриться в трафик через фейковые RA (Router Advertisement), поддельные DHCPv6-ответы или NDP-спуфинг.

Но всё это можно блокировать ещё на уровне коммутатора или bridge’а.

Три ключевых механизма:

RA-Guard — фильтрует Router Advertisement-пакеты.
DHCPv6 Snooping — проверяет, откуда пришёл DHCPv6-ответ.
NDP-фильтрация / ND Inspection — защищает от фальшивых Neighbor Advertisement и Solicit.

1️⃣RA-Guard на коммутаторах Cisco:

ipv6 nd raguard policy SAFE_RA
device-role host

interface FastEthernet0/1
ipv6 nd raguard attach-policy SAFE_RA


Это разрешит RA только с доверенных портов (например, uplink). Все остальные будут отфильтрованы.

2️⃣ DHCPv6 snooping (на Cisco):

ipv6 dhcp snooping
ipv6 dhcp snooping trust

interface FastEthernet0/1
ipv6 dhcp snooping limit rate 10


Коммутатор блокирует DHCPv6-пакеты, пришедшие с недоверенных портов, и ограничивает rate.

3️⃣ RA-фильтрация на Linux с ebtables:

ebtables -A INPUT -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type 134 -j DROP


Это правило отсекает RA-пакеты на уровне Ethernet-bridge, работает до стека ядра. Можно применять и к другим ICMPv6 типам (например, 135/136 для NDP), но аккуратно — не все они вредны.

NDP защита в Linux через ndppd или nftables

Например, nftables с блокировкой поддельных Neighbor Advertisement:

nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; }
nft add rule inet filter input icmpv6 type {136} drop


N.A. ℹ️ Help

Читать полностью…

Network Admin

Глубокая изоляция сервисов через VRF в Linux: полный контроль сетевого трафика

Часть 2


В первой части мы рассмотрели базовую настройку VRF и его интеграцию с Docker и Kubernetes.

Теперь разберём более сложные сценарии, включая полное ограничение выхода в интернет, взаимодействие VRF с IPSec и WireGuard, а также расширенный мониторинг сетевого трафика.

5️⃣ Полное ограничение внешнего трафика для VRF

По умолчанию VRF позволяет маршрутизировать трафик, но если требуется запретить выход изолированных сервисов в интернет, можно использовать nftables для точного контроля.

Пример блокировки всего исходящего трафика из VRF:

nft add table inet vrf_secure
nft add chain inet vrf_secure output { type filter hook output priority 0 \; }
nft add rule inet vrf_secure output meta oifname "eth1" drop


Если нужно разрешить доступ только к определённым IP (например, для базы данных 192.168.50.10):

nft add rule inet vrf_secure output ip daddr 192.168.50.10 accept


6️⃣ Интеграция VRF с IPSec и WireGuard

Использование VRF с VPN позволяет ещё сильнее изолировать управление и внутренние сервисы.

IPSec с VRF

Допустим, нужно настроить IPSec-туннель только внутри VRF. Для этого при настройке strongSwan указываем конкретную таблицу маршрутизации:

ip xfrm policy add src 10.10.10.0/24 dst 192.168.50.0/24 dir out tmpl src 10.10.10.1 dst 192.168.50.1 proto esp mode tunnel table 100


А затем привязываем IPSec-интерфейс к VRF:

ip link set ipsec0 master vrf_secure


Теперь весь VPN-трафик маршрутизируется исключительно через VRF.

WireGuard внутри VRF

Для работы WireGuard через VRF настраиваем его интерфейс так, чтобы он находился в нужной таблице:

ip link add wg0 type wireguard
ip link set wg0 master vrf_secure


Далее настраиваем wg0.conf, добавляя маршрут в таблицу VRF:

[Interface]
Address = 10.100.100.1/24
PrivateKey = <PRIVATE_KEY>

[Peer]
PublicKey = <PEER_PUBLIC_KEY>
AllowedIPs = 192.168.50.0/24
Endpoint = 203.0.113.1:51820


Активируем интерфейс:

ip link set up dev wg0


N.A. ℹ️ Help

Читать полностью…
Subscribe to a channel