Создание виртуального адаптера для заворота всего трафика в TOR
Май 142021Существует множество гайдов по завороту трафика в TOR, виртуальные машины, захват трафика, VPN и даже гайдов подобных этому. Данный гайд описывает один из способов торификации трафика вашей машины через SOCKS прокси TOR.
Внимание! Вы можете раскрыть себя (деанонимизировать) войдя в свои личные аккаунты соц. сетей, сайты, где были авторизованы или же отправив UDP пакет не через TOR, т.к. он не умеет передавать UDP, а работает именно с TCP.
Нам понадобятся:
- Windows 7-10 и подобная ОС
- Tor Windows Expert Bundle (Скачать win32 | Скачать win64 | С оф. сайта)
- TAP Virtual Ethernet Adapter (Сборки)
- Tun2socks (Скачать TAP + T2s | BadVPN | GitHub)
- DNSCrypt (Скачать win32 | Скачать win64 | GitHub)
Все действия в гайде написаны на примере виртуальной машине Windows 7 x64 Ultimate SP2 VMWare.
С установкой ОС всё ясно, тут проблем возникнуть не должно, приступим к настройке Tor Expert Bundle.
Действия будем выполнять в директории %programdata%. Поэтому создадим там папку tor и распакуем туда содержимое архива Expert Bundle.
Теперь нам понадобится файл torrc создадим его в папке Tor со следующим содержимым:
DataDirectory C:\ProgramData\tor\Data\Tor
GeoIPFile C:\ProgramData\tor\Data\Torr\geoip
GeoIPv6File C:\ProgramData\tor\Data\Tor\geoip6
Log notice file C:\ProgramData\tor\Data\Tor\notice.log
#Socks5Proxy 127.0.0.1:8119
HTTPTunnelPort 8118
SocksListenAddress 0.0.0.0
SocksPort 0.0.0.0:9999
SocksPort 0.0.0.0:9150
SocksPolicy accept 10.0.0.0/8
SocksPolicy accept 192.0.0.0/8
SocksPolicy accept 127.0.0.0/8
SocksPolicy reject *
Разберём файл конфигурации torrc:
DataDirectory C:\ProgramData\tor\Data\Tor
GeoIPFile C:\ProgramData\tor\Data\Torr\geoip
GeoIPv6File C:\ProgramData\tor\Data\Tor\geoip6
Log notice file C:\ProgramData\tor\Data\Tor\notice.log
- Здесь указана директория программы, файлы данные GeoIP и файл логов notice.log, в данном гайде этот раздел не требует изменений.
#Socks5Proxy 127.0.0.1:8119
- Необходимо, если требуется подключение через локальный SOCKS5 proxy, например, через SSH. В данном руководстве не требуется, поэтому закомментирован.
HTTPTunnelPort 8118
- Создание HTTP прокси туннеля на порту 8118.
SocksListenAddress 0.0.0.0
SocksPort 0.0.0.0:9999
SocksPort 0.0.0.0:9150
SocksPolicy accept 10.0.0.0/8
SocksPolicy accept 192.0.0.0/8
SocksPolicy accept 127.0.0.0/8
SocksPolicy reject *
- SocksPort открывает порты 9999 и 9150 как к SOCKS прокси серверу. С помощью SocksPolicy мы разрешаем или запрещаем доступ для определённого диапазона IP. Данный раздел может не пригодиться, если вам не требуется локальный SOCKS прокси сервер, но в таком случае прокси тора будет работать только на порту 9050.
Проверим работу Tor'a, запустив tor.exe.
Для проверки работоспособности нашего прокси сервера можно воспользоваться программой SocksCap64:
Теперь, для удобства и автоматизации создадим службу из Tor'a. Для создания службы я использовал cmd файл torservice.cmd, содержимое:
"C:\ProgramData\tor\Tor\tor.exe" --service install -options -f "C:\ProgramData\tor\Tor\torrc"
pause
Теперь мы можем использовать свой Tor как локальный прокси сервер аж по двум портам (9999 и 9150) и использовать эту машину, как локальный SOCKS прокси сервер. Приступим к созданию виртуального адаптера, установим TAP Virtual Ethernet Adapter от OpenVPN.
Теперь распакуем tun2socks в папку tor и обратим внимание на t2s_start.bat. t2s_start.exe является скомпилированным приложением батника (для удобства), поэтому если необходимо произвести кастомизацию tun2socks редактировать и запускать нужно именно t2s_start.bat.
"%CD%\t2s.exe" --tundev "tap0901:taplan:100.64.0.1:100.64.0.0:255.192.255.0" --netif-ipaddr 100.64.0.2 --netif-netmask 255.192.255.0 --socks-server-addr 127.0.0.1:9150
pause
- В t2s_start.bat мы создаём туннель TAP -> Tor, т.е. от виртуального адаптера в SOCKS5 proxy Tor. В конфигурации torrc мы указали порт 9150 поэтому его и используем. Я использовал IPv4 100.64.0.0/10, т.к. остальные диапазоны у меня уже используются.
А теперь главный ньюанс! Прежде чем запускать t2s_start нам необходимо переименовать наш виртуальный адаптер, иначе после запуска посыпятся ошибки, поэтому идём в Сетевые подключения и переименовываем адаптер в taplan, как указано в батнике.
Теперь можно запускать tun2socks через t2s_start.bat или t2s_start.exe. Если всё прошло успешно, приступаем к следующему шагу.
Адаптер запущен, но трафик через него не идёт, да и какой то он странный, адрес не получает, сеть неопознанная. Именно на этом этапе я застрял и чуть не бросил идею виртуального адаптера, а всего-то надо было вручную прописать настройки в адаптере, согласно созданному tun2socks:
IPv4-адрес. . . . . . . . . . . . : 100.64.0.1
Маска подсети . . . . . . . . . . : 255.192.0.0
Основной шлюз. . . . . . . . . : 100.64.0.2
На этом этапе можно перенаправить наш трафик на виртуальный адаптер с помощью метрики маршрута. У каждого свой шлюз маршрутизатора, и от него нужно строить метрику. В моём случаем шлюзом маршрутизатора является 192.168.1.1, а шлюзом виртуального адаптера 100.64.0.2.
Проверим, что это так с помощью командной строки:
route PRINT
Теперь нам необходимо поменять метрики маршрутов, чем меньше метрика, тем выше приоритет маршрута (можно использовать add.bat, с теми же командами):
route CHANGE 0.0.0.0 MASK 0.0.0.0 192.168.1.1 METRIC 400
route -p ADD 0.0.0.0 MASK 0.0.0.0 100.64.0.2 METRIC 10
С этого момента трафик пойдёт через виртуальный адаптер taplan, а на сайтах типа 2ip.ru будет IP-адрес сети Tor. Сразу можно менять поисковик на duckduckgo.com, т.к. в гугле и яндексе вас завалит капчей.
Для перехода на основной адаптер нужно воспользоваться аналогичной командой смены метрики:
route CHANGE 0.0.0.0 MASK 0.0.0.0 100.64.0.2 METRIC 400
route CHANGE 0.0.0.0 MASK 0.0.0.0 192.168.1.1 METRIC 10
В файле route.txt находится список с примерами команд, чтобы не искать их в интернете.
Остался последний пункт - DNSCrypt, необходимый для предотвращения утечки DNS.
Распаковываем содержимое папки в архиве соответствующей разрядности ОС в папку %programdata%\DNSCrypt, переименовываем example-dnscrypt-proxy.toml в dnscrypt-proxy.toml и устанавливаем службу с помощью service-install.bat. По необходимости настраиваем dnscrypt-proxy.toml и запускаем службу.
Для большей безопасности можно направить DNSCrypt через Tor, для этого в конфинурации dnscrypt-proxy.toml необходимо внести изменения в соответствии с прокси сервером нашего тора:
## Always use TCP to connect to upstream servers.
## This can be useful if you need to route everything through Tor.
## Otherwise, leave this to `false`, as it doesn't improve security
## (dnscrypt-proxy will always encrypt everything even using UDP), and can
## only increase latency.
force_tcp = true
## SOCKS proxy
## Uncomment the following line to route all TCP connections to a local Tor node
## Tor doesn't support UDP, so set `force_tcp` to `true` as well.
proxy = 'socks5://127.0.0.1:9150'
Теперь на обоих адаптерах (виртуальный и основной) необходимо указать DNS сервер 127.0.0.1, как на скриншоте виртуального адаптера.
Tor работает только с TCP и UDP 53 (DNS) пакетами, ICMP и прочие UDP пакеты он пропускать не умеет.
Для отправки UDP в t2s используется параметр tun2socks --udpgw-remote-server-addr 127.0.0.1:7300 (вместо сокета 127.0.0.1:7300 - свои данные), но в таком случае на другой стороне (куда пойдут пакеты) должен быть запущен принимающий сервер udpgw. Таким образом мы заворачиваем UDP в TCP и разворачиваем его на udpgw с последующей отправкой в сеть интернет, где находится udpgw.
В этом случае теряется анонимность сети, в которой мы работаем, и единственным решением пока остаётся блокировка всех пакетов, кроме пропущенных через шлюз Tor'a.
Так же существует обход трафика виртуального адаптера при падении t2s (при отсутствии сети виртуального адаптера трафик пойдёт через основной адаптер).
Для исправления обнаруженных проблем нам понадобится Брандмауэр Windows. Если он отключен, то необходимо включить данную службу, это будет основной инструмент фильтрации. Так же можно настроиться альтернативный файрволл, например simplewall, но у меня не удалось его настроить для нормальной работы сети.
Первое что необходимо сделать, это запретить все подключения (как исходящие, так и входящие), на всех профилях и отключить все правила для входящих и исходящих подключений:
С этого момента все обмены пакетами заблокированы, создаем правила фильтрации так, чтобы трафик мог идти только через тор. Добавляем новое правило - разрешить приложению tor.exe выход в интернет как для входящих, так и для исходящих подключений:
Правило должно быть указано для всех протоколов, IP-адресов, профилей, интерфейсов и узлов. После активации правила и перезапуска службы tor нужно убедиться что подключение к сетям тора прошло успешно (до применения этого правила тор к сети подключаться не должен, если он каким-то образом подключен, то необходимо проверить что все соединения блокированы и ни одно из правил не активно). Если это так, то в логе notice.log должно появиться свежее сообщение об успехе ... [notice] Bootstrapped 100% (done): Done.
Теперь нужно добавить правило для исходящих подключений, разрешающее подключаться через наш виртуальный адаптер tap:
Для этого правила требуется добавить только область локальных IP-адресов 127.0.0.0/8 и 100.64.0.0/10. Можно обойтись и одним виртуальным адресом 100.64.0.1, но я предпочитаю добавлять подсети как планы на будущее. Правило должно быть указано для всех программ, служб, протоколов, профилей, интерфейсов и узлов, т.е. в столбцах, которые не видны на скриншоте стоит пометка Любой.
Теперь можно проверить работу браузеров и программ - они должны получать адреса сети Tor, а netstat должен показывать локальный адрес 100.64.0.1, кроме tor.exe, который принял IP-адрес основного адаптера.
Для того, чтобы убедиться в правильности работы правил достаточно закрыть tun2socks, после его закрытия виртуальный адаптер taplan будет отключен, а браузер или иная программа с выходом в интернет должна выдавать ошибку подключения.
Можно проверять результат вышеописанного. Я использовал сервисы, найденные через duckduckgo:
Дополнительные меры
Расширения для браузера, в качестве дополнительной меры защиты
- Adblock Plus - Блокировщик рекламы (Самостоятельная установка | Оф. сайт)
- dotOnion - позволяет открывать .onion и .exit домены (Самостоятельная установка | Из магазина chrome)
- WebRTC Control - отключает WebRTC протокол (Самостоятельная установка | Из магазина chrome)
Для проверки браузера на утечки воспользуйтесь сервисом browserleaks.com.
Основные проблемы
- После перезагрузки ОС маршрутизация может сброситься как и некоторые настройки самих адаптеров (DNS, шлюз)
- Возможны потери маршрута основного адаптера при многократном изменении метрики, поэтому необходимо его добавить через route -p ADD ...
- После закрытия и открытия tun2socks иногда требуется снова добавить маршрут или изменить метрику (особенности Win 7)
Для последнего пункта рекомендуется вручную выставлять метрику адаптеров в их настройках. Так же существует альтернативный проект Tallow (TorWall), использующий немного другой способ торификации сети.