Перейти к содержанию

Инструкция по использованию ZloyTrinity

Обзор

ZloyTrinity — это сетевой инструмент для проксимейкеров с реальной подменой p0f-отпечатка на всех этапах соединения. Использует TUN-интерфейс для модификации TCP-трафика согласно указанным профилям. Опционально он может запускать 3proxy с привязкой к tun-интерфейсу для предоставления SOCKS/HTTP-прокси.

Опции командной строки

zloytrinity [опции]

Доступные флаги

  • -h — Показать справку
  • -v — Показать версию
  • -c <путь> — Путь к файлу конфигурации (по умолчанию: config.yml)
  • -l <уровень> — Уровень логирования (по умолчанию: 0)

Конфигурация

Создайте файл config.yml со следующими настройками:

  • id — строковый идентификатор конфигурации. Если в системе будет запущено несколько инстансов ZloyTrinity, то у каждого инстанса должен быть свой индификатор.
  • 3proxy — настройки для 3proxy сервера:
  • config_path — путь к файлу конфигурации 3proxy
  • enabled — флаг включения/выключения 3proxy (если fase - 3proxy запускаться не будет)
  • rewrite_config — флаг перезаписи конфигурационного файла (если false, то ZloyTrinity не будет пытаться перезаписать файл конфигурации 3proxy, и можно будет использовать свою конфигурацию)
  • socks_port — порт для SOCKS-прокси (uint16) для генерации 3proxy-конфига
  • work_dir — рабочая директория 3proxy
  • internal_interface — название внутреннего сетевого интерфейса для генерации 3proxy-конфига (должен соответствовать tun_name уровня выше)
  • external_interface — название внешнего сетевого интерфейса для генерации 3proxy-конфига (должен соответствовать uplink_interface уровня выше)
  • tun_name — имя TUN-интерфейса
  • tun_addrs — настройки IP-адресов для TUN-интерфейса:
  • ipv4_enabled — флаг включения IPv4
  • ipv4_internal — внутренний IPv4 адрес TUN-интерфейса (с этого адреса будут идти исходящие TCP-соединения)
    • IpV4System — системный IPv4 адрес (который назначается tun-интерфейса на стороне системы)
  • ipv6_enabled — флаг включения IPv6
  • ipv6_ndp — флаг включения NDP (Neighbor Discovery Protocol) для IPv6. Нужен, если в системе не настроен ndppd.
  • ipv6_internal — внутренний IPv6 адрес TUN-интерфейса (с этого адреса будут идти исходящие TCP-соединения)
  • ipv6_system — системный IPv6 адрес (который назначается tun-интерфейса на стороне системы)
  • os_profile — профиль модификации TCP-соединений
  • uplink_interface — название сетевого интерфейса для исходящего соединения
  • web_listen_addr - адрес и порт для веб-интерфейса API (например, 127.0.0.1:8080)

Запуск

# Базовое использование с конфигом по умолчанию
zloytrinity

# Указать свой конфиг
zloytrinity -c /путь/к/config.yml

# Включить подробное логирование
zloytrinity -l 1 -c config.yml

Остановка

Нажмите Ctrl+C или отправьте сигнал SIGTERM для корректного завершения работы. Инструмент:
- Закроет файловый дескриптор TUN
- Удалит TUN-интерфейс
- Остановит 3proxy, если он был запущен

API

В конфигурационном файле указывается обязательный параметр web_listen_addr - это адрес:порт, на котором будет слушать веб-API.

На текущий момент API не имеет авторизации. В целях безопасности рекомендуется указывать локальный адрес, и не давать доступ к локальным адресам пользователям Proxy или VPN.

Доступные эндпоинты:
- /ping - проверка доступности сервиса
- /api/os_profile - получение текущего профиля ОС
- /api/os_profile?profile=macos - установка профиля ОС (в конфиге не сохраняется)

Запуск несколько инстансов через systemd

В директории ./example/ приведён пример конфигурации. Тут предполагается, что сам исполняемый файл ZloyTrinity будет находиться в /usr/local/sbin/, а его конфигурации и конфигурации 3proxy - в /srv/zloytrinity/.

После того как конфигурация будет скопирована на сервер и адаптирована под свои нужды, нужно будет активировать systemd сервис, и запустить инстансы.

systemctl daemon-reload

systemctl enable --now zloytrinity@00.service
systemctl enable --now zloytrinity@01.service
...

Просмотр логов:

journalctl -f -u zloytrinity@00.service -u zloytrinity@01.service

FAQ

Проверить прохождение трафика через zloytrinity

Используя привязку к интерфейсу:

curl -v --interface tun0 https://www.google.com

Используя 3proxy (если вы его включили, например на порту 1080):

curl -v -x socks5://127.0.0.1:1080 https://www.google.com

Используя 3proxy (если вы его включили, например на порту 1080) с резолвингом адреса домена на стороне прокси:

curl -v -x socks5h://127.0.0.1:1080 https://www.google.com

ipv4_enabled=false ipv6_enabled=true

В данном режиме zloytrinity пропускает IPv6, но не пропускает IPv4.

Как сделать curl-запрос именно IPv6

Если используете просто привязку к интерфейсу, то можно просто использовать ключ -6:

curl -6 -v --interface tun0 https://www.google.com

Если используете прокси, то сперва нужно узнать IPv6 адрес домена:

host -t AAAA www.google.com
curl -v -x socks5://127.0.0.1:1080 --resolve "www.google.com:443:[2607:f8b0:4004:c1b::93]" https://www.google.com

Либо просто использовать SOCKS5H, тогда резолвинг будет происходить на стороне прокси (прокси должен быть настроен для приоритетного резолвинга IPv6):

curl -v -x socks5h://127.0.0.1:1080 https://www.google.com

curl работает, а в браузере почти ничего не открывается (через прокси)

Наиболее вероятные тут 2 проблемы:

  1. Ваш браузер пытается через прокси подключаться к IPv4-адресам, в то время как IPv4 на уровне zloytrinity отключён.
    Нужно каким-то образом заставить его в прокси отправлять IPv6 адреса, или доменные имена. На macOS мне удалось добиться этого только путём получения IPv6-адреса и отключения default IPv4 route.
  2. Адрес сайта или отдельных его компонентов (редиректы, CDN, API, шрифты, аналитика) не имеют AAAA-записей, из-за чего загрузка страницы частично или полностью ломается.