Об этом проекте
pktc — это CLI-инструмент и компилятор на основе укладки деревьев, позволяющий описать структуру пакета, ожидаемую в сети, и автоматически вывести соответствующую конфигурацию туннельных устройств ядра Linux.
В отличие от netplan, systemd-networkd и NetworkManager, где сначала указывается тип устройства, а затем заполняются параметры, pktc действует наоборот: вы описываете стек инкапсуляции в виде дерева, а инструмент определяет, какое ядерное примитивное устройство его реализует.
Основная идея — выбор инструкций путём укладки деревьев. Стек инкапсуляции уплощается до хребта — линейного списка уровней протоколов, который затем покрывается тайлами в форме устройств. Техника зеркально отражает то, как back-end компиляторов выбирает машинные инструкции, за исключением того, что тайлы — это туннельные устройства Linux, а выдаваемый код — команды iproute2.
Поддерживаемые тайлы включают IPIP (ipv4 · ipv4), GRE (ipv4 · gre · ipv4), GRE tap (ipv4 · gre · ethernet) и VXLAN (ipv4 · udp · vxlan · ethernet). Вложенные туннели композируются естественно, как несколько тайлов, без специального кода.
Ключевые команды:
- pktc lower — выводит команды ip link / ip addr для создания устройства
- pktc mirror — выводит симметричную конфигурацию для удалённого конца
- pktc expect — выводит, как должен выглядеть трафик подложки для проверки
- pktc parse — выводит инкапсуляционный хребет из файла описания
Особенностью является тестовый режим замыкания контура: make netns создаёт два сетевых namespace на veth-паре, настраивает оба конца из одного описания, пропускает трафик и захватывает подложку. Золотой тест доказывает, что выдача команд верна; ядерный тест доказывает, что устройство создано; захват доказывает, что устройство несёт именно то, что утверждало дерево.
Установка: go install github.com/vinodhalaharvi/pktc/cmd/pktc@latest либо сборка из исходников с помощью make check, make demo и make netns.
Проект находится на ранней стадии, имеет четыре тайла и один backend. Geneve, VLAN, XFRM и WireGuard намеренно опущены, поскольку их модули ядра отсутствовали в период разработки.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.