Снимаем дамп на Huawei за минуту: диагностика трафика без остановки продакшена
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. Сценарий, который повторяется у меня раз в месяц: клиент звонит в пятницу вечером — у них в филиале перестал работать 1С, но «в офисе всё нормально». Диагностика показывает, что пакеты уходят в маршрутизатор Huawei NE40 на границе провайдера, а оттуда не возвращаются. Без дампа трафика на самом железе не разобраться, а SPAN-порт и Linux-сервер рядом поставить никто не даст до понедельника. Расскажу, как за пять минут снять pcap прямо с Huawei через SSH и открыть его в Wireshark на своём ноутбуке. Техника простая, но знает её не каждый сетевой админ.
Почему обычный tcpdump не подходит
Классический сценарий диагностики: настраиваете SPAN (в терминах Cisco) или mirror-port (в терминах Huawei), подключаете к зеркальному порту Linux-сервер с tcpdump, снимаете дамп, открываете в Wireshark. Работает отлично — но требует:
- Свободный порт на коммутаторе. В большинстве филиалов все порты заняты.
- Сервер с Linux в той же L2-сети. На удалённой площадке обычно один UPS и охлаждение — места для ноутбука нет.
- Физический доступ к оборудованию. В 22:00 пятницы — забудьте.
Встроенная команда capture-packet на Huawei решает все три проблемы: дамп снимается самим маршрутизатором, результат выводится в hex прямо в терминал SSH. На ноутбуке у вас копия пакетов за 30 секунд — разбирайте спокойно.
VRP5 и VRP8: разница есть
Huawei VRP (Versatile Routing Platform) встречается в двух основных версиях:
- VRP5 — старшие серии NE40E, NE80E, AR-серии ранних выпусков. Синтаксис команды чуть сложнее, нужно сначала найти instance-id для нужного VRF.
- VRP8 — новые NE40E-X8/X16, NE9000, CE-серии, AR современных поколений. Упрощённый синтаксис, capture-packet работает из-под pt-view.
Разбирать буду оба варианта на реальных примерах.
VRP8: минимальный рабочий пример
Подключаемся по SSH к роутеру, заходим в system-view:
<NE40-BRANCH> system-view
[NE40-BRANCH] capture-packet forwarding interface GigabitEthernet1/0/1.300 \
packet-num 30 packet-len 64 \
time-out 60 match-condition acl 3001
Что здесь:
forwarding— снимаем пакеты на уровне forwarding engine (ASIC). Это дешевле по CPU чем control-plane capture.interface Gi1/0/1.300— конкретный сабинтерфейс (dot1Q 300 VLAN). Можно указывать физический интерфейс целиком.packet-num 30— максимум 30 пакетов. После их снятия команда завершается.packet-len 64— только первые 64 байта каждого пакета. Остальное обрезается (защита конфиденциальности).time-out 60— прервать через 60 секунд, даже если 30 пакетов не набралось.match-condition acl 3001— фильтр по заранее созданному ACL. Без этого будет снят весь трафик интерфейса — можно захлебнуться.
ACL 3001 можно создать заранее:
[NE40-BRANCH] acl number 3001
[NE40-BRANCH-acl-adv-3001] rule 10 permit ip source 10.10.0.50 0 destination 10.99.0.10 0
[NE40-BRANCH-acl-adv-3001] rule 20 permit ip source 10.99.0.10 0 destination 10.10.0.50 0
[NE40-BRANCH-acl-adv-3001] quit
Вывод hex прямо в терминал
После завершения capture смотрим результат:
[NE40-BRANCH] display capture-packet file
Packet 1 at 2026-01-15 18:42:17.123, length=82
0000 00 24 68 aa bb cc 00 1a 2b cc dd ee 81 00 01 2c
0010 08 00 45 00 00 50 1f 34 40 00 3f 06 a2 df 0a 0a
0020 00 32 0a 63 00 0a 0b b8 1f 90 5e 3c 11 22 00 00
0030 00 00 a0 02 fa f0 8a 9d 00 00 02 04 05 b4 04 02
0040 08 0a ff ff ff ff 00 00
Packet 2 at 2026-01-15 18:42:17.234, length=82
0000 00 1a 2b cc dd ee 00 24 68 aa bb cc 81 00 01 2c
...
Копируем весь вывод в буфер (прямо из putty/kitty/terminal) и сохраняем в файл capture.hex на ноутбуке.
Импорт в Wireshark: главная хитрость
Wireshark умеет импортировать hex-дампы, но нужно правильно указать настройки. Открываем Wireshark → File → Import from Hex Dump.
Параметры:
- Filename: выбираем наш capture.hex.
- Offsets: Hexadecimal (потому что наши offsets идут как
0000,0010). - Timestamp format: оставляем пустым (дата берётся из новой метки или можно парсить из «at 2026-01-15 18:42:17.123» через регулярку).
- Encapsulation type: Ethernet.
- Maximum frame length: 64 (как в capture-packet).
Важное: если пакет короче 64 байт (например, ARP), его нужно дополнить нулями до 64 байт вручную — иначе Wireshark будет парсить повреждённым. Я для этого написал маленький python-скрипт:
#!/usr/bin/env python3
import re, sys
with open(sys.argv[1]) as f:
txt = f.read()
out = []
for line in txt.splitlines():
m = re.match(r'\s*([0-9a-f]{4})\s+(.+)', line, re.I)
if m:
hex_part = re.sub(r'[^0-9a-f]', '', m.group(2), flags=re.I)
# добить нулями до чётности
hex_part = hex_part + '00' * ((128 - len(hex_part)) // 2) if len(hex_part) < 128 else hex_part
out.append(f"{m.group(1)} {hex_part}")
else:
out.append(line)
print('\n'.join(out))
VRP5: чуть сложнее
На старых NE40 команда та же, но сначала нужен instance-id:
<NE40-V5> display capture-packet-instance
Instance ID: 17
И затем:
[NE40-V5] display capture-packet file instance-id 17
Без instance-id получите пустой вывод или ошибку. На NE80E старого поколения дополнительно нужно быть в режиме hidden-cmd для доступа к forwarding engine — _hidecmd и тогда работает.
MPLS и почему он отдельная боль
Если роутер в филиале — CE/PE в MPLS-сети провайдера, дамп с интерфейса покажет MPLS-заголовки, под которыми зашит ваш IP. Wireshark по умолчанию MPLS разбирает, но может путаться в:
- Количестве меток (одна/две/три).
- Payload type после самой внутренней метки — IPv4, IPv6 или Ethernet (L2-VPN).
- Control Word — в L2-VPN иногда идёт дополнительный 4-байтный заголовок между меткой и payload.
Лечение: в Wireshark на первом MPLS-пакете → правая кнопка → Decode As → MPLS → Next protocol → выбираем IPv4, IPv6 или Ethernet. Для L2-VPN с Control Word ставим галочку «Has Control Word».
У одного клиента — логистика, 40 рабочих мест, филиал в Твери через MPLS-провайдер — я разбирался с тем, что MPLS-метка внезапно менялась на одной из десятков связок. Дамп показал, что ISP пометил пакет с двумя лейблами вместо одной (внешняя для transport, внутренняя для L3VPN). Без явного указания Decode As Wireshark думал, что это IPv6 — и всё было непонятно. После правильной расшифровки увидели, что один из ISP-роутеров менял метку, и связались с провайдером.
SIP и VoIP — почему 64 байта иногда мало
В классическом сценарии VoIP-проблемы «телефоны звонят, но абоненты не слышат друг друга». Типовая причина — RTP идёт не туда. Чтобы понять куда, нужен дамп с достаточной длиной. 64 байта покроют IP-заголовок (20) + UDP (8) + RTP-header (12) = 40 байт, останется 24 байта на payload — недостаточно, но RTP headers видны.
Для SIP-сигнализации обычно нужно 256-512 байт на пакет (SDP встроенный в INVITE-пакет может быть большим). На Huawei можно поднять packet-len:
[NE40-BRANCH] capture-packet forwarding interface Gi1/0/2 \
packet-num 50 packet-len 256 \
match-condition acl 3010
# ACL 3010 ловит SIP (UDP 5060)
Осторожно: больший packet-len — больше нагрузки на forwarding engine. Не оставляйте такой capture надолго.
Когда capture-packet не работает
Встречается, что на какой-то модели команда не существует. Варианты:
- S-серия младшие свитчи (S5700-28). Там используется
display observeи собственный механизм port-mirror. Менее удобно, но работает. - MA5600-серия OLT. Команды специфичны для GPON, capture-packet не всегда доступен. Обычно ограничиваемся
display acu statisticи zone-based debug. - Старые AR-серии на VRP3. Нужен
debugging ip packetс отправкой в info-center logbuffer — неудобно, но работает.
В крайнем случае — внешний tap device (типа Profitap P-V80 или Dualcomm) в разрыв линка. Это дорого (~80 тыс руб), но если проблема серьёзная и гигабайтная, без этого не обойтись.
Кейс: диагностика MPLS-проблемы за 40 минут
В январе 2026 мне позвонили в субботу: «у нас в филиале в Калуге пропала связь с 1С-сервером в Москве, но интернет ходит». Клиент — строительная компания, 34 рабочих места в Калуге, SIP-телефония через Москву, 1С через MPLS-туннель от провайдера.
Не выезжая на объект, через SSH подключился к Huawei AR2200 в калужском офисе. Последовательность:
display interface GigabitEthernet0/0/1.100— интерфейс в MPLS, пакеты уходят, ответы частично приходят.- Создал ACL 3030 на трафик 10.10.1.50 (1С-клиент) → 10.99.2.20 (1С-сервер).
capture-packet forwarding interface Gi0/0/1.100 packet-num 50 packet-len 128 match-condition acl 3030 time-out 30.- Скопировал hex-вывод на ноут, импортировал в Wireshark.
- Увидел: исходящие пакеты от клиента уходят с одной MPLS-меткой, а входящие возвращаются с МЕТКОЙ НА ДРУГОМ VC. Это значит, провайдер у себя «сломал» L2VPN-сессию — pseudowire разрезан.
- Написал ISP-тикет с указанием конкретных меток и времени. Через 20 минут они подтвердили: у них сломалась MPLS LSP на одном из сегментов. Восстановили за 10 минут.
Общее время от звонка клиента до восстановления — 40 минут. Без capture-packet я бы час разбирался, что такое «пропала связь, интернет есть», и ещё час убеждал ISP, что проблема у них. С дампом в руках разговор с ISP занимает две минуты.
Общие рекомендации
- Всегда используйте ACL — без него получите поток, который не успеете прочитать.
- Ставьте
time-outобязательно — иначе capture может остаться висеть неделю. - Не делайте
packet-lenбольше необходимого — это нагрузка. - Для SIP/RTP лучше снимать на PE-роутере провайдера с разрешения ISP — они видят всю трассу.
- Сохраняйте дампы в git — накапливается практическая база для расследований.
- Для удалённой диагностики через RDP/VPN к Windows-коллеге — используйте PuTTY log session to file, потом вытаскиваете hex оттуда.
Разберём вашу сетевую проблему — от 6 500 руб/час
Я лично провожу срочную диагностику сетевых проблем на корпоративной инфраструктуре в Москве и области. Huawei, Cisco, Eltex, Mikrotik, Juniper — чтение дампов, MPLS, SIP, BGP, OSPF. Выезд на объект или удалённо через SSH/VPN. Типовой инцидент разбирается за 1-3 часа. Есть круглосуточный hot-line для клиентов на поддержке.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — диагностика на Huawei
- Зачем снимать дамп прямо на маршрутизаторе, если есть SPAN-порт?
- SPAN нужен свободный порт + сервер с tcpdump в том же сегменте. На удалённых площадках (магазин, производственный цех) обычно ни того, ни другого нет. Встроенный capture-packet снимает трафик прямо на железе и передаёт дамп в hex через SSH-сессию — ничего физически везти не нужно.
- Почему ограничение 64 байта на пакет?
- Это защита от перехвата полных данных — особенно SIP/RTP, где 64 байта покрывают заголовки, но не аудио. Для диагностики проблем с установлением соединения, маршрутизацией, MPLS-метками этого хватает с запасом. Если нужен полный пакет — нужна отдельная разрешительная логика или внешний tap.
- Как разобрать MPLS-трафик на Huawei?
- При импорте pcap в Wireshark нужно явно указать Decode As для нужных L2-VPN меток — Ethernet, IP, или Control Word для pseudowire. Также включить расшифровку для Label в SubProtocol. На VRP5 дополнительно нужно знать instance-id, без которого capture не даст правильный VRF.
- Можно ли оставить capture включённым надолго?
- Нет. capture-packet заметно нагружает forwarding engine на NE40/NE80 и CX-серии. Держите не дольше 30-60 секунд. Для длительного анализа используйте Mirror-сессию на отдельный порт с внешним tcpdump — капле-сервер на Linux в ту же L2-сеть.
- Какие альтернативы capture-packet, если он не работает?
- На старых VRP3 / младших S-серии capture-packet может отсутствовать. Варианты: traffic-mirror на SPAN-порт с подключенным Linux-tcpdump, info-center + debug ip traffic с разбором в syslog, или внешний tap device в разрыв линка (для критичных расследований). Для Huawei MA-серии (oemvlan) используется display observe.