Об этом проекте

dsnitch — это легковесный однобинарный инспектор исходящего сетевого трафика и DNS, предназначенный специально для Docker-контейнеров. Он использует современную технологию Linux eBPF для обеспечения видимости в реальном времени всей исходящей сетевой активности контейнеров, включая TCP/UDP-соединения, ICMP-пинги и DNS-запросы, без необходимости модификации сетевых стеков контейнеров, sidecar-контейнеров или тяжелых телеметрических демонов. Инструмент подключает пассивные eBPF-пробы непосредственно к единой иерархии cgroup v2 хоста и tracepoint состояния TCP-сокетов ядра. Он перехватывает исходящие запросы на соединение, ICMP-пинги уровня 3 и сырые DNS-данные на порту 53, сопоставляя сокеты с метаданными Docker-контейнеров и разрешенными именами хостов в пользовательском пространстве через безблокировочные BPF-кольцевые буферы с почти нулевой нагрузкой на CPU (менее 1%). Ключевые возможности включают атрибуцию контейнеров без вмешательства через прямое подключение к cgroup v2, перехват DNS в ядре с декодированием в пользовательском пространстве через Hickory DNS для полного разрешения цепочек CNAME, детерминированное отслеживание состояний сокетов с использованием указателей памяти ядра (skaddr) для бесконфликтного отслеживания параллельных соединений и сетевых пространств имен, нативную поддержку ICMP, двойные колонки назначения и физического IP, показывающие как DNS-разрешенные имена хостов, так и конечные IP-адреса, а также интеллектуальную фильтрацию шума glibc, пропускающую фиктивные POSIX-запросы getaddrinfo() на UDP порт 0 для поиска маршрутов. Интерактивный TUI с разделенными панелями, построенный на Ratatui, предоставляет дерево иерархии контейнеров с живыми счетчиками соединений слева и поток исходящего трафика с цветовой кодировкой в реальном времени справа, с мгновенным поиском, блокировкой контейнеров и переключением хостового трафика. Режим потоковой передачи без интерфейса (-s) поддерживает неинтерактивный вывод в виде простого текста для логирования, CI/CD пайплайнов или передачи в другие CLI-инструменты. Установка проста: предварительно собранные бинарники доступны для архитектур x86_64 и ARM64 Linux, либо инструмент можно собрать из исходников с использованием nightly-тулчейна Rust с компонентом rust-src. Инструмент требует ядро Linux 5.8+ с едиными cgroups v2 и включенным BTF, а также доступ к демону Docker. Для непривилегированных пользователей dsnitch рекомендует использовать setcap для предоставления минимальных Linux-возможностей (cap_sys_admin, cap_net_admin, cap_dac_read_search), чтобы любой пользователь из группы docker мог запускать его без sudo. Альтернативно, его можно запускать с обычным повышением привилегий через sudo. Инструмент включает как модульные тесты в памяти, так и автоматизированный набор интеграционных тестов end-to-end, работающий с живыми Docker-контейнерами. Проект лицензирован под GNU General Public License v3.0 и поддерживается Infomaniac.