Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
phantun — Преобразует UDP-поток в (фальшивые) TCP-потоки, которые могут проходить через межсетевые экраны/NAT уровня 3 и уровня 4 (NAPT). | Kitploit
Инструменты/GitHubGitHub/dndx/phantun
Обход IDS/IPSСетевая безопасность
GitHubdndx/phantun

phantun

Преобразует UDP-поток в (фальшивые) TCP-потоки, которые могут проходить через межсетевые экраны/NAT уровня 3 и уровня 4 (NAPT).

Репозиторий
2.4k217620 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Phantun

Легкий и быстрый обфускатор UDP в TCP.

GitHub Workflow Status docs.rs

Содержание

  • Phantun
  • Последний релиз
  • Обзор
  • Использование
    • 1. Включить пересылку IP-пакетов ядра
    • 2. Добавить необходимые правила брандмауэра
      • Клиент
        • Использование nftables
        • Использование iptables
      • Сервер
        • Использование nftables
        • Использование iptables
    • 3. Запуск бинарных файлов Phantun без прав root (Опционально)
    • 4. Запуск демона Phantun
      • Сервер
      • Клиент
  • Издержки MTU
    • Расчёт MTU для WireGuard
  • Совместимость версий
  • Документация
  • Производительность
Планы на будущее
  • Сравнение с udp2raw
  • Лицензия
  • Последний релиз

    v0.8.1

    Поддержка архитектуры MIPS для Phantun

    Rust предоставляет только Tier 3 поддержку для платформ на базе MIPS начиная с 2023 года. Сборки Phantun для MIPS, таким образом, собираются с использованием nightly инструментария Rust и предоставляются только по принципу "насколько это возможно".

    Обзор

    Phantun — это проект, который обфусцирует UDP-пакеты в TCP-соединения. Он нацелен на достижение максимальной производительности с минимальными издержками обработки и инкапсуляции.

    Обычно используется в средах, где UDP заблокирован/ограничен, а TCP разрешён.

    Phantun просто преобразует поток UDP-пакетов в обфусцированные пакеты TCP-потока. Стек TCP, используемый Phantun, спроектирован для прохождения через большинство L3/L4 stateful/stateless брандмауэров/NAT устройств. Он не сможет пройти через L7 прокси. Однако преимущество этого подхода в том, что ни один из типичных "убийц" производительности UDP-over-TCP, таких как повторные передачи и управление потоком, не возникает. Свойства базового UDP, такие как доставка с нарушением порядка, полностью сохраняются, даже если соединение выглядит как TCP с точки зрения брандмауэров/NAT.

    Phantun означает "Призрачный TUN", так как это обфускатор для UDP-трафика, который делает ровно столько, чтобы заставить его проходить через stateful брандмауэры/NAT как TCP-пакеты.

    Phantun написан на 100% безопасном Rust. Он был тщательно оптимизирован для хорошего масштабирования на многоядерных системах и без проблем насыщает все доступные ресурсы CPU на быстром соединении. См. раздел Производительность для результатов бенчмарков.

    Результаты бенчмарка Phantun Диаграмма трафика

    Использование

    В приведённом ниже примере предполагается, что Сервер Phantun ожидает входящие подключения от клиентов Phantun на порту 4567 (опция --local для сервера) и пересылает UDP-пакеты на UDP-сервер по адресу 127.0.0.1:1234 (опция --remote для сервера).

    Также предполагается, что Клиент Phantun ожидает входящие UDP-пакеты на 127.0.0.1:1234 (опция --local для клиента) и подключается к серверу Phantun по адресу 10.0.0.1:4567 (опция --remote для клиента).

    Phantun создаёт TUN-интерфейс как для клиента, так и для сервера. Для клиента Phantun по умолчанию назначает себе IP-адрес 192.168.200.2 и fcc8::2. Для сервера он по умолчанию назначает 192.168.201.2 и fcc9::2. Следовательно, в вашем ядре должна быть включена пересылка IPv4/IPv6, и должны быть настроены соответствующие правила iptables/nftables для NAT между адресом вашей физической сетевой карты и адресом Tun-интерфейса Phantun.

    Вы можете изменить имя Tun-интерфейса, создаваемого Phantun, и назначенные адреса. Запустите исполняемый файл с опциями -h, чтобы узнать, как их изменить.

    Другой способ понять эту сетевую топологию (см. диаграмму выше для иллюстрации этой топологии):

    Клиент Phantun подобен машине с частным IP-адресом (192.168.200.2/fcc8::2) за роутером. Чтобы он мог выйти в Интернет, вам нужно выполнить SNAT частного IP-адреса перед тем, как его трафик покинет сетевой интерфейс.

    Сервер Phantun подобен серверу с частным IP-адресом (192.168.201.2/fcc9::2) за роутером. Чтобы получить к нему доступ из Интернета, вам нужно выполнить DNAT его порта прослушивания на роутере и изменить IP-адрес назначения на тот, где сервер ожидает входящие подключения.

    В этих случаях машина/iptables, на которой работает Phantun, выступает в роли "роутера", который позволяет Phantun общаться с внешним миром, используя его частные IP-адреса.

    Начиная с Phantun v0.4.1, IPv6 полностью поддерживается как для TCP, так и для UDP сторон. Для указания IPv6-адреса используйте следующий формат: [::1]:1234 с опциями командной строки. Также поддерживается разрешение AAAA-записей. Запустите программу с -h, чтобы увидеть подробные опции управления поведением IPv6.

    Назад к содержанию

    1. Включить пересылку IP-пакетов ядра

    Отредактируйте /etc/sysctl.conf, добавьте net.ipv4.ip_forward=1 и выполните sudo sysctl -p /etc/sysctl.conf.

    Специфичная конфигурация для IPv6

    net.ipv6.conf.all.forwarding=1 также необходимо установить.

    Назад к содержанию

    2. Добавить необходимые правила брандмауэра

    Клиент

    Клиенту просто нужно включить SNAT на физическом интерфейсе, чтобы преобразовать адрес Phantun в адрес, который можно использовать в физической сети. Это можно сделать просто с помощью маскарадинга.

    Примечание: измените eth0 на фактическое имя физического интерфейса.

    Назад к содержанию

    Использование nftables

    root@kitploit:~
    table inet nat {
        chain postrouting {
            type nat hook postrouting priority srcnat; policy accept;
            iifname tun0 oif eth0 masquerade
        }
    }
    

    Примечание: приведённое выше правило использует inet в качестве типа семейства таблиц, поэтому оно совместимо как с IPv4, так и с IPv6.

    Назад к содержанию

    Использование iptables

    root@kitploit:~
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    

    Назад к содержанию

    Сервер

    Серверу нужно выполнить DNAT порта прослушивания TCP на адрес TUN-интерфейса Phantun.

    Примечание: измените eth0 на фактическое имя физического интерфейса и 4567 на фактический номер TCP-порта, используемый сервером Phantun.

    Назад к содержанию

    Использование nftables

    root@kitploit:~
    table inet nat {
        chain prerouting {
            type nat hook prerouting priority dstnat; policy accept;
            iif eth0 tcp dport 4567 dnat ip to 192.168.201.2
            iif eth0 tcp dport 4567 dnat ip6 to fcc9::2
        }
    }
    

    Назад к содержанию

    Использование iptables

    root@kitploit:~
    iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
    ip6tables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination fcc9::2
    

    Назад к содержанию

    3. Запуск бинарных файлов Phantun без прав root (Опционально)

    Не рекомендуется запускать сетевые приложения от имени пользователя root. Phantun может быть запущен полностью от имени обычного пользователя с возможностью cap_net_admin.

    root@kitploit:~
    sudo setcap cap_net_admin=+pe phantun_server
    sudo setcap cap_net_admin=+pe phantun_client
    

    Назад к содержанию

    4. Запуск демона Phantun

    Примечание: Запустите исполняемый файл Phantun с опцией -h, чтобы увидеть полный список подробных опций.

    Назад к содержанию

    Сервер

    Примечание: 4567 — это TCP-порт, на котором должен слушать Phantun, и он должен соответствовать правилу DNAT, указанному выше. 127.0.0.1:1234 — это UDP-сервер, к которому нужно подключаться для новых соединений.

    root@kitploit:~
    RUST_LOG=info /usr/local/bin/phantun_server --local 4567 --remote 127.0.0.1:1234
    

    Или используйте имя хоста с --remote:

    root@kitploit:~
    RUST_LOG=info /usr/local/bin/phantun_server --local 4567 --remote example.com:1234
    

    Примечание: Сервер по умолчанию назначает как IPv4, так и IPv6 частные адреса на Tun-интерфейс. Если вы не хотите использовать IPv6, вы можете просто пропустить создание правила IPv6 DNAT, указанного выше, и наличие IPv6-адреса на Tun-интерфейсе не должно иметь побочных эффектов для сервера.

    Назад к содержанию

    Клиент

    Примечание: 127.0.0.1:1234 — это UDP-адрес и порт, на котором должен слушать Phantun. 10.0.0.1:4567 — это сервер Phantun, к которому подключаться.

    root@kitploit:~
    RUST_LOG=info /usr/local/bin/phantun_client --local 127.0.0.1:1234 --remote 10.0.0.1:4567
    

    Или используйте имя хоста с --remote:

    root@kitploit:~
    RUST_LOG=info /usr/local/bin/phantun_client --local 127.0.0.1:1234 --remote example.com:4567
    
    Специфичная конфигурация для IPv6
    root@kitploit:~
    RUST_LOG=info /usr/local/bin/phantun_client --local 127.0.0.1:1234 --remote [fdxx::1234]:4567
    

    Также поддерживается доменное имя с AAAA-записью.

    Назад к содержанию

    Издержки MTU

    Phantun стремится свести к минимуму издержки туннелирования. Издержки по сравнению с обычным UDP-пакетом следующие (на примере IPv4 ниже):

    Стандартный UDP-пакет: 20 байт заголовок IP + 8 байт заголовок UDP = 28 байт

    Обфусцированный пакет: 20 байт заголовок IP + 20 байт заголовок TCP = 40 байт

    Обратите внимание, что Phantun не добавляет никаких дополнительных заголовков, кроме IP- и TCP-заголовков, чтобы проходить stateful проверку пакетов!

    Дополнительные издержки Phantun: 12 байт. Другими словами, при использовании Phantun полезная нагрузка для UDP-пакета уменьшается на 12 байт. Это минимальные возможные издержки при таком типе обфускации.

    Диаграмма заголовков пакетов

    Назад к содержанию

    Расчёт MTU для WireGuard

    Для тех, кто использует Phantun для туннелирования UDP-пакетов WireGuard®, вот несколько рекомендаций по определению правильного MTU для вашего интерфейса WireGuard.

    root@kitploit:~
    MTU WireGuard = MTU канала - заголовок IPv4 (20 байт) - заголовок TCP (20 байт) - накладные расходы WireGuard (32 байта)
    

    или

    root@kitploit:~
    MTU WireGuard = MTU канала - заголовок IPv6 (40 байт) - заголовок TCP (20 байт) - накладные расходы WireGuard (32 байта)
    

    Например, для сетевого канала с MTU 1500 байт MTU интерфейса WireGuard должен быть установлен как:

    IPv4: 1500 (MTU канала) - 20 - 20 - 32 = 1428 байт

    IPv6: 1500 (MTU канала) - 40 - 20 - 32 = 1408 байт

    Полученный TCP-пакет данных Phantun будет размером 1500 байт, что не превышает MTU интерфейса 1500.

    Пожалуйста, обратите внимание: Phantun не может корректно работать, если размер пакета превышает MTU канала, так как Phantun не выполняет никакой IP-фрагментации и сборки. По той же причине Phantun всегда устанавливает бит DF (Don't Fragment) в IP-заголовке, чтобы предотвратить фрагментацию пакета промежуточными устройствами.

    Также настоятельно рекомендуется использовать одинаковый MTU интерфейса на обоих концах туннеля WireGuard, иначе могут возникнуть непредвиденные потери пакетов, и эти проблемы, как правило, очень трудно диагностировать.

    Назад к содержанию

    Совместимость версий

    Хотя стек TCP довольно стабилен, ожидается, что вы должны запускать одинаковые минорные версии сервера/клиента Phantun на обоих концах, чтобы обеспечить максимальную совместимость.

    Назад к содержанию

    Документация

    Для пользователей, желающих использовать библиотеку fake-tcp в своих проектах, обратитесь к документации по библиотеке по адресу: https://docs.rs/fake-tcp.

    Назад к содержанию

    Производительность

    Производительность тестировалась на двух экземплярах AWS t4g.xlarge с 4 vCPU и 5 Гбит/с сетевым интерфейсом через локальную сеть. nftables использовался для перенаправления UDP-потока iperf3 через туннель Phantun/udp2raw между двумя тестовыми экземплярами, и MTU был настроен для избежания фрагментации.

    Использовались Phantun v0.3.2 и udp2raw_arm_asm_aes 20200818.0. Это были последние выпуски обоих проектов по состоянию на апрель 2022 года.

    Команда тестирования: iperf3 -c <IP> -p <PORT> -R -u -l 1400 -b 1000m -t 30 -P 5

    РежимСкорость отправкиСкорость приёмаОбщая загрузка CPU
    Прямое соединение (1 поток)3.00 Гбит/сек2.37 Гбит/сек25% (1 ядро на 100%)
    Phantun (1 поток)1.30 Гбит/сек1.20 Гбит/сек60% (1 ядро на 100%, 3 ядра на 50%)
    udp2raw (cipher-mode=none auth-mode=none disable-anti-replay) (1 поток)1.30 Гбит/сек715 Мбит/сек40% (1 ядро на 100%, 1 ядро на 50%, 2 ядра простаивают)
    Прямое соединение (5 потоков)5.00 Гбит/сек3.64 Гбит/сек25% (1 ядро на 100%)
    Phantun (5 потоков)5.00 Гбит/сек2.38 Гбит/сек95% (все ядра задействованы)
    udp2raw (cipher-mode=none auth-mode=none disable-anti-replay) (5 потоков)5.00 Гбит/сек770 Мбит/сек50% (2 ядра на 100%)

    Статья о некоторых техниках, использованных в Phantun для достижения такого результата производительности: Writing Highly Efficient UDP Server in Rust.

    Назад к содержанию

    Планы на будущее

    • Балансировка нагрузки одного UDP-потока на несколько TCP-потоков
    • Интеграционные тесты
    • Автоматическое добавление/удаление необходимых правил брандмауэра

    Назад к содержанию

    Сравнение с udp2raw

    udp2raw — ещё один популярный проект от @wangyu-, который очень похож на возможности Phantun. На самом деле, я вдохновлялся Phantun от udp2raw. Самая большая причина для разработки Phantun — это недостаточная производительность при работе udp2raw (особенно на многоядерных системах, таких как Raspberry Pi). Однако цель никогда не состояла в том, чтобы быть настолько же функционально полным, как udp2raw, а только поддерживать наиболее распространённые сценарии использования. В частности, режимы UDP over ICMP и UDP over UDP не поддерживаются, и нет ни анти-повтора, ни поддержки шифрования. Преимущество этого — гораздо лучшая производительность в целом и меньшие издержки MTU из-за отсутствия дополнительных заголовков внутри полезной нагрузки TCP.

    Вот краткий обзор сравнения между ними, чтобы помочь вам выбрать:

    Phantunudp2raw
    Обфускация UDP через FakeTCP✅✅
    Обфускация UDP через ICMP❌✅
    Обфускация UDP через UDP❌✅
    Многопоточность✅❌
    Пропускная способностьЛучшеХорошо
    Режим уровня 3TUN-интерфейсRaw-сокеты + BPF
    Издержки MTU туннелирования12 байт44 байта
    Отдельные TCP-соединения для каждого UDP-соединенияКлиент/СерверТолько сервер
    Анти-повтор, шифрование❌✅
    IPv6✅✅

    Назад к содержанию

    Лицензия

    Copyright 2021-2025 Datong Sun ([email protected])

    Лицензировано на условиях Apache License, Version 2.0 <LICENSE-APACHE или https://www.apache.org/licenses/LICENSE-2.0> или лицензии MIT <LICENSE-MIT или https://opensource.org/licenses/MIT>, по вашему выбору. Файлы в проекте не могут быть скопированы, изменены или распространены иначе, чем в соответствии с этими условиями.

    Назад к содержанию

    Скачать инструмент