Инструкция по использованию ZloyTrinity
Обзор
ZloyTrinity — это сетевой инструмент для проксимейкеров с реальной подменой p0f-отпечатка на всех этапах соединения. Использует TUN-интерфейс для модификации TCP-трафика согласно указанным профилям. Опционально он может запускать 3proxy с привязкой к tun-интерфейсу для предоставления SOCKS/HTTP-прокси.
Опции командной строки
Доступные флаги
-h— Показать справку-v— Показать версию-c <путь>— Путь к файлу конфигурации (по умолчанию:config.yml)-l <уровень>— Уровень логирования (по умолчанию: 0)
Конфигурация
Создайте файл config.yml со следующими настройками:
id— строковый идентификатор конфигурации. Если в системе будет запущено несколько инстансов ZloyTrinity, то у каждого инстанса должен быть свой индификатор.3proxy— настройки для 3proxy сервера:config_path— путь к файлу конфигурации 3proxyenabled— флаг включения/выключения 3proxy (если fase - 3proxy запускаться не будет)rewrite_config— флаг перезаписи конфигурационного файла (если false, то ZloyTrinity не будет пытаться перезаписать файл конфигурации 3proxy, и можно будет использовать свою конфигурацию)socks_port— порт для SOCKS-прокси (uint16) для генерации 3proxy-конфигаwork_dir— рабочая директория 3proxyinternal_interface— название внутреннего сетевого интерфейса для генерации 3proxy-конфига (должен соответствовать tun_name уровня выше)external_interface— название внешнего сетевого интерфейса для генерации 3proxy-конфига (должен соответствовать uplink_interface уровня выше)tun_name— имя TUN-интерфейсаtun_addrs— настройки IP-адресов для TUN-интерфейса:ipv4_enabled— флаг включения IPv4ipv4_internal— внутренний IPv4 адрес TUN-интерфейса (с этого адреса будут идти исходящие TCP-соединения)IpV4System— системный IPv4 адрес (который назначается tun-интерфейса на стороне системы)
ipv6_enabled— флаг включения IPv6ipv6_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
...
Просмотр логов:
FAQ
Проверить прохождение трафика через zloytrinity
Используя привязку к интерфейсу:
Используя 3proxy (если вы его включили, например на порту 1080):
Используя 3proxy (если вы его включили, например на порту 1080) с резолвингом адреса домена на стороне прокси:
ipv4_enabled=false ipv6_enabled=true
В данном режиме zloytrinity пропускает IPv6, но не пропускает IPv4.
Как сделать curl-запрос именно IPv6
Если используете просто привязку к интерфейсу, то можно просто использовать ключ -6:
Если используете прокси, то сперва нужно узнать 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 работает, а в браузере почти ничего не открывается (через прокси)
Наиболее вероятные тут 2 проблемы:
- Ваш браузер пытается через прокси подключаться к IPv4-адресам, в то время как IPv4 на уровне zloytrinity отключён.
Нужно каким-то образом заставить его в прокси отправлять IPv6 адреса, или доменные имена. На macOS мне удалось добиться этого только путём получения IPv6-адреса и отключения default IPv4 route. - Адрес сайта или отдельных его компонентов (редиректы, CDN, API, шрифты, аналитика) не имеют AAAA-записей, из-за чего загрузка страницы частично или полностью ломается.