Network Admin
12.5K subscribers
1.03K photos
13 videos
8 files
1.06K links
Обучающий канал по сетевому и системному администрированию.

Сотрудничество: @dad_admin
Биржа: https://telega.in/c/networkadm

РКН: https://bit.ly/4ioc61C
Download Telegram
Разное поведение DNS у разных клиентов

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


Снаружи всё выглядит одинаково, но поведение разъезжается по группам клиентов.

Первое, что обычно всплывает — не сами ответы DNS, а то, как они кешируются и переиспользуются в системе.

resolvectl query <domain>


Тут уже видно, что один и тот же домен может жить разными TTL-состояниями в зависимости от клиента и момента запроса, и это начинает разносить поведение по времени.

Дальше полезно посмотреть не “что резолвится”, а как именно система выбирает адреса и в каком порядке.

getent ahostsv4 <domain>


Иногда всплывает, что порядок IP разный между клиентами, и это уже влияет на то, какой backend они фактически выбирают, даже если DNS “одинаковый”.

Следующий слой - системные кеши и библиотечный резолвинг, который вообще не виден через обычные проверки.

strace -e trace=network -f curl -s <url>


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

N.A.
👍9
Service работает через IP, не через DNS

Сервис открывается по IP нормально, но по доменному имени начинает вести себя странно: таймауты, разные ответы, иногда вообще “не тот” backend.

Часто это, когда клиент и DNS живут разной жизнью: IP уже поменялся, а часть систем продолжает ходить по старым записям.

resolvectl status


Здесь часто видно, что разные интерфейсы или сети используют разные резолверы, и ответы начинают расходиться по источникам.
Дальше полезно посмотреть, что реально возвращается не “в теории”, а в контексте системы.

getent hosts <domain>


Иногда всплывает, что домен резолвится в несколько IP, и выбор происходит неочевидно - часть клиентов стабильно попадает на один адрес, часть на другой.

ip route get <ip>


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

curl -v --resolve <domain>:443:<ip> https://<domain>


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

N.A.
👍8
Неравномерное распределение трафика LB

Снаружи всё выглядит нормально: LB живой, backend’ы подняты, трафик есть, но один инстанс стабильно перегружен, а остальные почти пустые.

Распределение часто ломается не на уровне новых подключений, а на уровне уже установленных сессий и того, как они “прилипают” к backend’ам.

ss -s


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

Если разложить соединения глубже, становится заметно, что часть клиентов держит длинные сессии и фактически закрепляется за конкретным backend’ом.

ss -tn sport = :80


И именно эти долгоживущие соединения начинают создавать перекос: новые запросы уже не успевают “выровнять” баланс.

Иногда эффект усиливается просто из-за того, что клиенты создают разное количество соединений и неравномерно их переиспользуют.

curl -I <url>


При повторных запросах можно заметить, что ответы стабильно приходят с одних и тех же backend’ов, даже если ожидается равномерное распределение.

ipvsadm -Ln


На этом уровне уже видно реальную картину: LB не распределяет каждый запрос заново, а работает с уже закреплёнными потоками, из-за чего часть нод оказывается перегруженной просто статистически.

N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
5 команд, которые реально помогают ловить “невидимые” сетевые проблемы
1️⃣TCP-состояние и скрытые retransmit’ы
Когда сервис “живой”, но всё тормозит - обычные проверки ничего не показывают. Тут полезно смотреть, что происходит прямо в TCP-очередях.

ss -ti state all


Сразу видно RTT, retrans, cwnd - вещи, которые обычно не попадают ни в метрики, ни в логи.
2️⃣Реальное поведение маршрута ядра (а не “как должно быть”)
Иногда проблема не в сети, а в том, куда система на самом деле отправляет трафик.

ip route get <ip>


Показывает конкретный интерфейс, source IP и next-hop для одного пакета - часто всплывает неожиданный путь.

3️⃣Где именно ломается соединение (DNS / connect / TLS / HTTP)
Когда всё “медленно”, важно понять, на каком этапе зависает запрос.

curl -w "@-" -o /dev/null -s <url>


Показывает breakdown по времени: DNS, connect, TLS, first byte. Быстро отделяет сеть от приложения.
4️⃣Потери, которые не видно через ping
ICMP может быть чистым, а TCP уже страдает. Нужен более честный взгляд на поток.

mtr -T -P 443 <host>


TCP-traceroute часто показывает деградацию там, где обычный ICMP ничего не замечает.
5️⃣Реальная картина очередей и backpressure
Когда система “не падает, но не отвечает” - это почти всегда очереди.

ss -ltnp


Смотришь backlog, количество established, и становится видно, где начинается давление — на accept, kernel или приложение.

N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍6
Traceroute не совпадает с реальным путём

Сервис ведёт себя так, будто трафик идёт по одному маршруту, но traceroute показывает совсем другую картину.

При этом ping может быть стабильным, а задержки появляться “внезапно” и без логики.

traceroute <ip>


Дело в том, что traceroute показывает не путь пакета, а поведение промежуточных узлов, которые могут по-разному отвечать на TTL-expired. В реальности трафик часто идёт через ECMP или policy routing, которые в traceroute просто не видны.

ip route get <ip>


Здесь обычно всплывает реальный next-hop для конкретного пакета — и он может отличаться от того, что ожидается из схемы сети или из traceroute-вывода.

Иногда расхождение усиливается из-за балансировки на уровне ядра или оборудования, когда разные потоки уходят по разным линкам, а traceroute показывает только один из возможных путей.

mtr -T <ip>


TCP-traceroute часто даёт более близкую к реальности картину, потому что имитирует реальный трафик, а не ICMP-ответы.

tracepath <ip>


N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
VTP - почему его лучше отключить и как безопасно мигрировать без него

VTP (VLAN Trunking Protocol) автоматически синхронизирует VLAN-базу между коммутаторами. Звучит удобно, но по факту это бомба замедленного действия.

Главная проблема, что любой коммутатор с более высоким revision number перезапишет VLAN-базу на всех остальных. Подключил старый свич из кладовки, и все VLAN на продакшене слетели.

Почему отключают:
Один неверный свич уничтожает всю VLAN-конфигурацию сети
Сложно контролировать изменения - нет нормального аудита
VTP v1/v2 не поддерживает extended VLAN (1006–4094)
В современных сетях проще и безопаснее управлять VLAN вручную или через автоматизацию

Как безопасно мигрировать

1️⃣Сначала зафиксируй текущую VLAN-базу на VTP Server

show vlan brief
show vtp status


Сохрани список всех активных VLAN - это твой эталон.

2️⃣Переводи коммутаторы в VTP Transparent по одному, начиная с краёв сети

vtp mode transparent


Transparent не синхронизирует VLAN с другими, но передаёт VTP-объявления дальше - сеть не ломается сразу.

3️⃣Убеждаешься, что VLAN-база на каждом свиче совпадает с эталоном

show vlan brief


4️⃣Когда все переведены в Transparent - можно отключить VTP полностью (VTP v3)

vtp mode off


В v1/v2 режима off нет, Transparent - финальная точка.

5️⃣ Дальше VLAN управляются вручную на каждом свиче или через Ansible/Netmiko.

⚡️ Revision number обнуляется при смене VTP domain или переключении в Transparent. Если срочно нужно обезвредить «опасный» свич перед подключением - меняй domain name на любой другой.

N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2🔥2
OSPF: сосед завис в EXSTART/EXCHANGE

EXSTART/EXCHANGE - это этап, где два OSPF-соседа договариваются об обмене LSA. Если сосед завис здесь, база топологии не синхронизируется и маршруты не появятся.

Три главные причины: MTU mismatch (самая частая, DD-пакеты не проходят если MTU разный), дублирующийся Router ID (два роутера с одинаковым RID не могут завершить negotiation), проблемы аутентификации (пакеты уходят, но отклоняются на другой стороне).

Диагностика

Смотрим состояние соседа:

show ip ospf neighbor


Если сосед висит в EXSTART/EXCHANGE больше нескольких секунд, уже проблема.

1️⃣Проверяем MTU

show interfaces Gi0/0 | include MTU


На обоих роутерах значение должно совпадать. Либо выравниваем MTU, либо отключаем проверку:

interface Gi0/0
ip ospf mtu-ignore


2️⃣Проверяем дублирующийся Router ID

show ip ospf | include Router ID


RID должен быть уникальным в домене. Меняем вручную и перезапускаем процесс:

router ospf 1
router-id 1.1.1.1

clear ip ospf process


3️⃣Проверяем аутентификацию

show ip ospf interface Gi0/0


Тип аутентификации и ключ должны совпадать на обоих концах. Если используется MD5:

interface Gi0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 <key>


N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Wireshark фильтры для диагностики VLAN-трафика

Быстрая шпаргалка для тех, кто разбирает проблемы на trunk-портах или отлавливает трафик конкретного VLAN.

Базовые фильтры

Показать все 802.1Q фреймы, сузить до конкретного VLAN ID или до трафика одного хоста внутри него. Отправная точка для любой диагностики:

vlan
vlan.id == 10
vlan.id == 10 && ip.addr == 192.168.10.5


ARP, DHCP, STP

ARP помогает отловить конфликты IP и посмотреть кто отвечает на запросы. DHCP покажет, доходят ли Discover-пакеты до сервера. STP нужен когда подозреваешь петлю или нестабильную топологию:

vlan.id == 10 && arp
vlan.id == 10 && bootp
vlan.id == 10 && stp


Трафик между двумя хостами и очистка от служебного

Первый фильтр изолирует сессию между конкретными хостами. Второй убирает CDP, LLDP и STP, когда нужно смотреть только на пользовательский трафик без шума:

vlan.id == 20 && ip.addr == 192.168.20.1 && ip.addr == 192.168.20.2
vlan.id == 10 && !stp && !cdp && !lldp


Double-tag и QoS

Первый фильтр ловит QinQ-фреймы или признаки VLAN hopping, когда внутри тегированного фрейма есть ещё один тег. Второй фильтрует по значению CoS, полезно при диагностике приоритизации трафика:

vlan.id == 100 && vlan
vlan.priority == 5


N.A.
👍81
LACP vs Static LAG: когда что использовать

LAG (Link Aggregation Group) объединяет несколько физических линков в один логический. Два способа это сделать: статически или через LACP. Разница принципиальная.

Static LAG просто объединяет порты без какого-либо согласования. Коммутатор не знает, что происходит на другой стороне, линк считается активным даже если там ничего нет. Быстро настраивается, но слепо.

LACP (802.3ad) согласовывает агрегат через обмен LACPDU-пакетами. Оба конца знают о состоянии линков, при падении одного порта трафик перераспределяется автоматически. Чуть сложнее в настройке, но надёжнее.

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

Настройка на Cisco
Static LAG:


interface range Gi0/1 - 2
channel-group 1 mode on


LACP (active инициирует согласование, passive ждёт):

interface range Gi0/1 - 2
channel-group 1 mode active


Проверка агрегата
Смотрим статус Port-Channel и какие порты в него входят:

show etherchannel summary
show lacp neighbor


В выводе show etherchannel summary флаги говорят всё: P - порт в бандле, D - порт упал, S - suspended. Если видишь I (individual) вместо P, порт не попал в агрегат, скорее всего несовпадение настроек speed/duplex или native VLAN.

N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2
Bonding на Linux: mode 802.3ad и проверка активных линков

Bonding в Linux это аналог LAG на уровне ОС. Mode 802.3ad (LACP) объединяет интерфейсы в агрегат с динамическим согласованием, как на Cisco mode active.

Для работы нужен пакет ifenslave и загруженный модуль bonding:

modprobe bonding
apt install ifenslave


Настройка через systemd-networkd

Создаём bond-интерфейс:

# /etc/systemd/network/bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad
LACPTransmitRate=fast
MIIMonitorSec=100ms


Привязываем физические интерфейсы к бонду:

# /etc/systemd/network/bond-slave.network
[Match]
Name=eth0 eth1

[Network]
Bond=bond0


Назначаем IP на bond0:

# /etc/systemd/network/bond0.network
[Match]
Name=bond0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1


Проверка

Статус агрегата и активных линков:

cat /proc/net/bonding/bond0


Покажет режим, активные интерфейсы, состояние LACP и MII каждого слейва. Если слейв показывает MII Status: down, физический линк не поднят или коммутатор не согласовал LACP.

Быстрая проверка через ip:

ip link show bond0
ip -d link show bond0


N.A.
👍6
📂Как правильно документировать сеть, чтобы не потерять конфиги

Документирование сети кажется рутинной задачей, но на практике - это ключ к быстрому восстановлению, анализу и масштабированию. Вот как делать это по шагам.

1️⃣Сбор данных
Фиксируем все устройства, IP, VLAN, интерфейсы и протоколы маршрутизации.
Команды:

ip addr show          # список интерфейсов
ip route show # таблица маршрутов
vtysh -c "show running-config" # конфиги роутеров
show vlan brief # VLAN на коммутаторах

2️⃣Структурирование: Систематизируем данные: топология, IP-план, протоколы, ACL/Firewall.
Пример таблицы IP:

Устройство | Интерфейс | IP | VLAN | Примечание
-----------|-----------|--------------|------|------------
r1 | eth0 | 10.0.1.1/24 | 10 | WAN
sw1 | vlan10 | 10.0.1.2/24 | 10 | серверная зона
sw2 | vlan20 | 10.0.2.1/24 | 20 | офисная зона
server1 | eth1 | 10.0.1.10/24 | 10 | база данных
server2 | eth1 | 10.0.1.11/24 | 10 | веб-сервер


3️⃣Version control: Сохраняем конфиги в Git. Каждый коммит с комментарием: что и зачем изменилось.

git init
git add configs/
git commit -m "Добавлен новый VLAN 20 на sw2"


4️⃣Визуализация топологии: Diagram-as-code (Mermaid/Graphviz) или инструменты типа NetBox/Draw.io.
Пример Mermaid:

graph TD
R1 --> SW1
SW1 --> Server1
SW1 --> Server2


5️⃣Автоматизация и backup: Скрипты для снятия конфигов и их сохранения в репозиторий или на NAS. Проверка актуальности backup.

Полезные команды для контроля

git log --oneline --graph   # история изменений
diff old_config new_config # что изменилось
ping 10.0.1.2 # проверить доступность после изменений


N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
STP Port States: почему порт долго висит в Listening/Learning

STP переводит порт через несколько состояний перед тем как начать передавать трафик. Blocking, Listening, Learning, Forwarding. В норме переход занимает 30 секунд (15 сек Listening + 15 сек Learning). Если порт завис и не переходит в Forwarding, сеть на этом сегменте не работает.

Чаще всего дело в одном из трёх: некорректно выбран Root Bridge и порт пересчитывает топологию, на порту включён TCN (Topology Change Notification) и STP постоянно переинициализируется, или PortFast не включён там где должен быть.

Диагностика

Смотрим состояние портов и кто Root Bridge:

show spanning-tree
show spanning-tree detail


Проверяем TCN, частые topology change говорят о нестабильном линке или петле:

show spanning-tree detail | include topology change


Что делать?
Если порт ведёт к конечному устройству (PC, сервер, принтер), включаем PortFast. Порт сразу переходит в Forwarding, минуя Listening/Learning:

interface Gi0/1
spanning-tree portfast


Если TCN генерирует конкретный порт, включаем BPDU Guard. При получении BPDU порт уходит в err-disabled вместо того чтобы ломать топологию:

interface Gi0/1
spanning-tree bpduguard enable


Глобально для всех PortFast-портов:

spanning-tree portfast default
spanning-tree portfast bpduguard default


N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👌1
BGP Blackholing: как быстро дропать DDoS-трафик на уровне сети

Когда на сервер идёт DDoS, стандартный ответ: заблокировать на фаерволе.

Сложность в том, что трафик всё равно доходит до твоего канала и забивает его. Blackholing решает это на уровень выше, трафик дропается ещё у провайдера или на границе сети.

Идея простая: анонсируешь BGP-соседу маршрут до атакуемого IP с community-тегом, который говорит “дропай этот трафик”. Провайдер получает анонс и перенаправляет трафик в null на своей стороне до того как он дошёл до тебя.

Как это выглядит на практике

Создаём статический маршрут в null и анонсируем его через BGP с нужным community (значение уточняется у провайдера, обычно это RTBH community):

ip route 203.0.113.5 255.255.255.255 Null0

route-map BLACKHOLE permit 10
set community 65535:666 additive
set local-preference 200

router bgp 65001
neighbor 198.51.100.1 route-map BLACKHOLE out
network 203.0.113.5 mask 255.255.255.255


Проверяем что маршрут анонсируется соседу:

show bgp ipv4 unicast 203.0.113.5
show bgp neighbors 198.51.100.1 advertised-routes


Убираем blackhole когда атака закончилась

no ip route 203.0.113.5 255.255.255.255 Null0
clear ip bgp 198.51.100.1 soft out


N.A.
🔥94👍1
Anycast: как это работает за пределами DNS

Anycast это когда один и тот же IP-адрес анонсируется из нескольких точек одновременно. Клиент отправляет пакет, сеть сама выбирает ближайший узел по метрикам BGP.

Никакого DNS, никакого балансировщика между клиентом и сервером.


Большинство знает anycast по DNS: 8.8.8.8 это не один сервер, а сотни точек по всему миру. Но этим применение не ограничивается.

CDN используют anycast чтобы отдавать статику с ближайшего к пользователю POP-а. Cloudflare, Fastly, Akamai, все работают так. Пользователь в Берлине получает контент из Франкфурта, а не из Нью-Йорка, хотя обращается к одному IP.

DDoS-mitigation строится на том же принципе. Атака распределяется между всеми точками присутствия, ни одна не получает весь объём трафика.


NTP-серверы пула pool.ntp.org тоже anycast, клиент всегда попадает на географически близкий узел без какой-либо логики на своей стороне.

Как анонсируется anycast-префикс

Каждая точка присутствия поднимает BGP-сессию с апстримом и анонсирует один и тот же префикс:

router bgp 65001
network 192.0.2.0 mask 255.255.255.0

ip route 192.0.2.0 255.255.255.0 Null0


Маршрут в Null0 нужен чтобы BGP принял префикс для анонса, реальный трафик обрабатывается локально.

N.A.
👍8
Proxy ARP: когда роутер отвечает на чужие ARP-запросы

Обычно на ARP-запрос “кто такой 192.168.1.50?” отвечает сам хост с этим IP. Proxy ARP меняет это поведение: роутер перехватывает запрос и отвечает своим MAC-адресом, как будто этот IP находится на нём. Хост отправляет трафик на роутер, роутер форвардит дальше.

Изначально это придумали для соединения подсетей без настройки маршрутов на конечных устройствах. Актуально было в эпоху когда маски подсетей на хостах не совпадали с реальной топологией.


Где это реально используется сейчас

В облаках и гипервизорах Proxy ARP используется постоянно. Когда виртуальная машина получает IP из одной подсети, а физически находится на хосте в другой, гипервизор отвечает на ARP-запросы за неё. VMware, KVM с определёнными сетевыми конфигурациями, AWS при определённых настройках VPC, всё это Proxy ARP под капотом.

Когда это ломает сеть

Если Proxy ARP включён на роутере по умолчанию (на Cisco он включён), а в сети несколько роутеров, начинается хаос.

Несколько устройств отвечают на один ARP-запрос разными MAC-адресами, трафик уходит не туда, сессии рвутся.
Вторая проблема: хосты кешируют ARP-ответы. Если роутер ответил за чужой IP, хост будет слать трафик через него даже когда прямой маршрут появился.

Проверяем на Cisco:

show ip interface Gi0/0 | include proxy


Отключаем если не нужен:

interface Gi0/0
no ip proxy-arp


На Linux:

cat /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 0 > /proc/sys/net/ipv4/conf/eth0/proxy_arp


N.A.
👍7
Как коммутатор строит CAM-таблицу и что происходит при переполнении

CAM-таблица это то, за счёт чего коммутатор работает как коммутатор, а не как хаб. Без неё каждый фрейм уходил бы на все порты.

Как строится таблица

Коммутатор учится пассивно: когда фрейм приходит на порт, смотрит на source MAC и записывает на каком порту он находится.

Когда нужно отправить фрейм, ищет destination MAC. Нашёл, отправил на конкретный порт. Не нашёл, flooding на все порты кроме входящего. Записи живут 300 секунд по умолчанию, потом удаляются.

show mac address-table
show mac address-table aging-time


Что происходит при переполнении

CAM хранится в аппаратной памяти фиксированного размера. Когда таблица полна, новые записи не добавляются и любой фрейм с неизвестным MAC уходит флудом. Коммутатор деградирует до хаба.

На этом построена атака MAC flooding: генерируются фреймы с тысячами случайных source MAC, таблица забивается, и весь трафик начинает идти на порт атакующего тоже.

Защита

Port Security ограничивает количество MAC на порту:

interface Gi0/1
switchport port-security
switchport port-security maximum 2
switchport port-security violation restrict

show port-security interface Gi0/1


N.A.
👍6
Почему MTU 1500 в реальности никогда не 1500?

MTU 1500 это максимальный размер payload в Ethernet-фрейме. Цифра знакомая, но в реальной сети между твоим приложением и получателем почти всегда есть что-то, что откусывает от этого значения.

Иногда немного, иногда достаточно чтобы сломать крупные передачи.


Туннели

Любой туннель оборачивает оригинальный пакет в новый и добавляет свои заголовки. GRE забирает 24 байта, IPsec в tunnel mode от 50 до 70 байт в зависимости от алгоритмов шифрования, WireGuard 60 байт, VXLAN 50 байт.

Если на пути несколько туннелей, байты суммируются. Итоговый MTU внутри может оказаться 1400 и ниже, при этом интерфейс снаружи честно показывает 1500.

PPPoE

PPPoE используют большинство провайдеров на последней миле. Протокол добавляет 8 байт заголовка к каждому фрейму, реальный MTU на интерфейсе становится 1492. 


Если роутер не учитывает это и анонсирует клиентам MSS под 1500, крупные TCP-сегменты начинают фрагментироваться или молча дропаться на пути.

Делаем вторую часть с более подробным разбором на практике?

N.A.
1👍45
Как работает TCAM и почему правила ACL влияют на производительность железа

Обычная RAM ищет данные по адресу: дай адрес, получи значение. TCAM работает наоборот: дай значение, получи результат за один такт. Content Addressable Memory, и T означает Ternary: каждый бит может быть 0, 1 или X (don’t care). Именно X позволяет матчить префиксы и маски.

Благодаря этому коммутатор находит совпадение для любого пакета за одну операцию, независимо от размера таблицы. Именно поэтому железо форвардит трафик на линейной скорости.


Почему TCAM дорогой и ограниченный

TCAM потребляет в 5-10 раз больше энергии и площади чристалла чем обычная SRAM. Поэтому его мало: на типичном enterprise-коммутаторе несколько десятков тысяч записей, и они делятся между маршрутами, ACL, QoS и MAC-таблицей.

Посмотреть сколько TCAM осталось на Cisco:

show platform tcam utilization
show sdm prefer


Как ACL влияют на TCAM

Каждая строка ACL это одна или несколько записей в TCAM. Правило с диапазоном портов разбивается на несколько записей потому что TCAM не умеет в диапазоны нативно.

Правило permit tcp any any gt 1024 может развернуться в десятки записей. На больших ACL это незаметно, но на коммутаторах с маленьким TCAM таблица заканчивается и новые правила просто не применяются.

show ip access-lists
show platform hardware capacity


Что делать при нехватке

Меняем SDM profile чтобы перераспределить TCAM между функциями. Например отдать больше под ACL за счёт MAC-таблицы:

sdm prefer acl
reload


N.A.
👍4🤯1
Почему MTU 1500 в реальности никогда не 1500. Часть 2

Почему фрагментация не всегда спасает:
Когда пакет не влезает в MTU промежуточного узла, тот должен отправить отправителю ICMP Fragmentation Needed.

Отправитель получает сообщение, уменьшает размер сегмента и пробует снова. Это называется Path MTU Discovery и работает хорошо в теории.


На практике многие сети и файерволы блокируют ICMP полностью. Сообщение Fragmentation Needed не доходит, отправитель продолжает слать большие пакеты, они дропаются без каких-либо уведомлений.

Симптом характерный: мелкие запросы проходят нормально, крупные зависают или обрываются.

Проверяем реальный Path MTU до хоста и тестируем конкретный размер пакета:

tracepath 8.8.8.8
ping -M do -s 1400 8.8.8.8


Если ping с -M do (don’t fragment) падает на определённом размере, MTU на пути именно там.

Как фиксить

Выставляем MTU вручную на туннельном интерфейсе:

ip link set dev tun0 mtu 1420


Для PPPoE на Cisco MSS clamp ограничивает размер TCP-сегментов на уровне роутера, не давая клиентам использовать значения выше допустимого:

interface Dialer0
ip tcp adjust-mss 1452


N.A.
👍62🔥1
Что такое IX и как трафик идёт внутри него

IX (Internet Exchange) это физическая точка где провайдеры, CDN и крупные сети подключаются друг к другу напрямую. Вместо того чтобы гонять трафик через транзитного провайдера и платить за каждый гигабит, участники обмениваются трафиком напрямую и бесплатно между собой.

Крупнейшие точки обмена: DE-CIX во Франкфурте, AMS-IX в Амстердаме, MSK-IX в Москве. Через DE-CIX проходит больше 10 Тбит/с в пике.


Как устроено внутри

Физически IX это один большой коммутатор (или несколько связанных), к которому все участники подключают свои роутеры. Эта общая среда называется IXP fabric. Каждый участник получает порт и IP-адрес в общей подсети IX.

Дальше всё через BGP. Каждый участник поднимает BGP-сессии с теми с кем хочет обмениваться трафиком, анонсирует свои префиксы и получает чужие. Никакой автоматики, только явные пиринговые договорённости.

Route Server

Чтобы не поднимать сотни BGP-сессий с каждым участником отдельно, большинство IX предоставляют Route Server.

Подключаешься к одному RS, получаешь маршруты от всех участников кто тоже подключён к RS. Можно фильтровать что принимать и что анонсировать.

router bgp 65001
neighbor 193.178.185.1 remote-as 65000
neighbor 193.178.185.1 description MSK-IX Route Server


Как трафик идёт внутри

Пакет от пользователя провайдера А до сервера в сети провайдера Б: роутер А смотрит BGP-таблицу, видит что префикс Б получен через IX, отправляет пакет напрямую на роутер Б через IXP fabric. Транзитный провайдер не участвует, задержка меньше, стоимость ниже.

N.A.
👍9