Home » Продвинутая отладка сети с помощью pwru в 2025 году
Продвинутая отладка сети с помощью pwru в 2025 году

Продвинутая отладка сети с помощью pwru в 2025 году

О чём этот пост и зачем он нужен?

Если ты когда-нибудь ловил себя на мысли, что стандартные инструменты для отладки сети типа tcpdump или wireshark уже не вывозят, а в ядре крутится целый зоопарк современных фич вроде eBPF, nftables, tc, XDP и прочих страшных аббревиатур — добро пожаловать в клуб. Сегодня расскажу про pwru — свежий и реально продвинутый инструмент для сетевой отладки, который в 2025 году стал чуть ли не стандартом для тех, кто хочет видеть, что происходит с пакетами на всех этапах их пути через ядро Linux.

В статье разберём, как pwru работает, зачем он вообще нужен, как быстро его прикрутить к своему серверу (будь то VPS, Docker, bare metal — не важно), какие проблемы решает, а где может подставить. Примеры, грабли, лайфхаки, сравнения с другими тулзами — всё будет. Ну и конечно, как его автоматизировать и встраивать в свои скрипты.

Почему pwru стал важен именно сейчас?

С каждым годом сетевой стек Linux становится всё сложнее. eBPF, XDP, контейнеризация, overlay-сети, всякие mesh-сети, ingress/egress фильтрация, DDoS mitigation на уровне ядра — всё это не просто buzzwords, а реальный рабочий инструментарий. Но вот беда: когда что-то ломается, стандартные тулзы показывают только вершину айсберга. Пакет может быть отброшен или модифицирован на любом уровне — и понять, где именно, часто почти невозможно.

Вот тут и выстреливает pwru (Packet Walkthrough), который позволяет видеть путь пакета прямо через все слои ядра, с точными точками входа-выхода и даже аргументами функций ядра. Это не просто sniffer, а настоящий traceroute для ядра.

Как работает pwru? Алгоритмы и структура

pwru — это инструмент, построенный на базе eBPF (extended Berkeley Packet Filter). Он внедряет eBPF-программы в ключевые точки сетевого стека ядра Linux, чтобы отслеживать, как каждый пакет проходит через функции ядра.

Кратко, архитектура pwru выглядит так:

  • Находит точки (tracepoints, kprobes) в сетевом стеке, куда можно повесить eBPF-программу.
  • Вешает eBPF-программы, которые собирают информацию о каждом пакете: где он был, что с ним сделали, какие параметры были у функции и т.д.
  • Собирает логи и выводит их в удобочитаемом виде (терминал, JSON, Prometheus и т.д.).

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

Что можно отследить с помощью pwru?

  • В какой функции ядра пакет был отброшен (например, iptables, nftables, XDP, eBPF-программы, routing).
  • Какие параметры были у этой функции (например, IP-адреса, порты, флаги TCP, состояние соединения).
  • Какой путь прошёл пакет: входящий, локальный, форвардинг, выходящий.
  • Как работают ваши eBPF-программы, если они есть.
  • Почему не работает DNAT/SNAT, где теряются пакеты при контейнеризации, почему не работает overlay-сеть и т.д.

Как быстро и просто всё настроить?

Сразу к делу. Для работы pwru нужен современный Linux (ядро 5.10+), поддержка eBPF и clang/llvm для компиляции. В большинстве свежих дистрибутивов всё это уже есть.

Установка pwru

Самый простой способ — использовать официальный репозиторий:

https://github.com/cilium/pwru


# Установим зависимости (пример для Ubuntu / Debian)
sudo apt update
sudo apt install clang llvm libelf-dev gcc make git

# Клонируем репозиторий
git clone https://github.com/cilium/pwru.git
cd pwru

# Собираем
make

# Устанавливаем бинарник (по желанию)
sudo cp pwru /usr/local/bin/

Минимальная настройка и запуск


# Запустить pwru для отслеживания всего трафика на интерфейсе eth0
sudo pwru -i eth0

# Фильтровать по IP и порту (например, только пакеты на 10.0.0.5:80)
sudo pwru -i eth0 --src-ip 10.0.0.5 --src-port 80

# Смотреть только дропнутые пакеты (очень полезно!)
sudo pwru --drop

# Выводить в JSON для последующего анализа
sudo pwru --json > packets.json

pwru по умолчанию показывает огромный поток событий — фильтруйте по интерфейсу, IP, порту, дропам, чтобы не утонуть в логе.

Схема работы pwru

[Входящий пакет]
    ↓
[eBPF hook в точке netif_receive_skb]
    ↓
[Маршрутизация, firewall, eBPF, XDP, nftables, iptables ...]
    ↓
[eBPF hook на каждом этапе]
    ↓
[Выходной интерфейс или drop]

pwru позволяет видеть, на каком этапе и по какой причине пакет был дропнут или изменён.

Примеры и кейсы: что может пойти не так и как pwru это решает

Ситуация Что видит tcpdump Что видит pwru Рекомендация
Пакеты не доходят до приложения Пакеты приходят на интерфейс, дальше — тишина Показывает, что пакет дропнут на уровне nftables с деталями Проверь правила nftables/iptables, исправь ошибку
DNAT/SNAT не работает в Docker Пакеты видно на внешнем интерфейсе, но не в контейнере Показывает, где происходит NAT, где пакет теряется Проверь настройки iptables, bridge и Docker network
eBPF/XDP фильтрует пакеты tcpdump ничего не показывает — пакет не дошёл до стека pwru показывает, что пакет отброшен на уровне XDP/eBPF Проверь eBPF-программы, убери или исправь фильтр

Реальный пример: почему не работает overlay-сеть в Kubernetes

  1. В кластере K8s overlay-сеть (например, Cilium или Calico) — пакеты между подами не проходят.
  2. tcpdump видит пакеты на физическом интерфейсе, но не в поде.
  3. pwru показывает, что пакет дропается на eBPF-программе Cilium с ошибкой из-за неправильной маркировки.
  4. Исправляем конфиг Cilium — всё работает.

Ошибки новичков и мифы

  • Миф: pwru — это просто продвинутый tcpdump.
    Факт: pwru работает на уровне ядра, а не только на интерфейсах, и показывает события, которые tcpdump не увидит никогда.
  • Ошибка: Запускать pwru без фильтров на продакшене.
    Факт: Можно получить гигабайты логов и нагрузить ядро. Фильтруйте по интерфейсу, IP, порту, дропам!
  • Миф: pwru нужен только для eBPF.
    Факт: Он помогает и с классическим routing, iptables, nftables, bridge, Docker и т.д.
  • Ошибка: Использовать старое ядро (<5.10) — не работает или работает криво.

Похожие решения и сравнение

Инструмент Что делает Плюсы Минусы
tcpdump Сниффит пакеты на интерфейсах Просто, быстро, везде есть Не видит, что происходит в ядре, не показывает дроп/фильтрацию
wireshark Графический анализатор трафика Удобно для анализа протоколов То же, что tcpdump, не видит ядро
trace-cmd, perf Трассировка функций ядра Глубокий анализ, но сложно Не заточено под сеть, много ручной работы
bpftool Управление eBPF-программами Гибко, мощно Сложно для новичков, нет сетевого фокуса
pwru Трассировка пакетов на всех этапах ядра Видит всё, что происходит с пакетами, удобен для сетевой отладки Нужно новое ядро, нагрузка при больших потоках

Интересные факты и нестандартные способы использования

  • pwru можно интегрировать с Prometheus/Grafana — строить графики по дропам, задержкам, трассировке пакетов.
  • Можно запускать pwru в контейнере, если дать ему доступ к /proc/kcore и BPF — удобно для временной отладки.
  • Используется для анализа DDoS-атак: показывает, где именно ядро дропает пакеты, и какие фильтры срабатывают.
  • Можно подключить pwru к CI/CD пайплайнам — ловить регрессии в сетевой логике сразу при деплое.
  • В режиме JSON pwru отлично дружит с jq, ELK, Loki и любыми log-агрегаторами.

Новые возможности для автоматизации и скриптов

  • pwru поддерживает вывод в JSON — можно парсить события в скриптах на bash, python, go, что угодно.
  • Можно автоматически запускать pwru при возникновении ошибки (например, через systemd или cron) и сохранять логи для последующего анализа.
  • В связке с ansible/terraform можно автоматизировать сетевую диагностику в облаке или на выделенных серверах.
  • Можно строить алерты: если выросло количество дропов на определённом этапе ядра — шлём уведомление в Slack/Telegram.

Выводы и рекомендации

pwru — это must-have для тех, кто работает с современными Linux-серверами, контейнерами, облаками и хочет реально понимать, что происходит с трафиком в ядре. Если ты держишь VPS, выделенный сервер или облачную инфраструктуру, pwru поможет быстро найти и пофиксить сетевые баги, которые раньше были почти неуловимыми.

Рекомендации:

  • Используй pwru для сложных случаев: когда tcpdump уже не помогает, а баг явно где-то в ядре.
  • Не запускай без фильтров на продакшене — фильтруй по нужным IP, портам, дропам.
  • Интегрируй pwru с лог-агрегаторами и мониторингом для автоматизации.
  • Следи за обновлениями: инструмент активно развивается, появляются новые фичи и точки трассировки.

Если ты ещё не пробовал pwru — самое время начать. Это реально экономит часы (а иногда и дни) на поиске сетевых проблем.

Официальный репозиторий: https://github.com/cilium/pwru

Ну а если ищешь, где всё это развернуть — VPS или выделенный сервер — как всегда к твоим услугам.

Удачной отладки и пусть пакеты всегда доходят до цели!


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

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

Leave a reply

Your email address will not be published. Required fields are marked