Работа TrackerControl через Wireguard и различные прокси и немного о фаерволах
“Android Firewall” by Uncalno is licensed under CC BY 2.0
Замечательная программа контроля трафика приложений TrackerControl на андроиде с возможностью резать всевозможные трекеры и рекламу, которую мне необходимо было заставить работать через Wireguard и я нашёл, как. Делюсь инструкцией на своём примере.
По крайней мере из всех вариантов приложений для контроля трафика установленных андроид приложений именно TrackerControl мне показался самым удобным. Но вот незадача: TrackerControl для фильтрации трафика использует VPN слот, создавая собственный локальный (псевдо- или фейковый, как его многие называют) VPN и благодаря ему выходит в интернет в обход установленного Wireguard со всеми драйверами. Хоть стандартное приложение Wireguard, как я уже понял, не использует андроидовский VPN слот и работает параллельно TrackerControl, заставить TrackerControl пропускать трафик через стандартное приложение Wireguard не представляется возможным.
Или я чего-то здесь не знаю.
В любом случае контролировать трафик приложений необходимо, причём помимо полного запрета доступа приложений в интернет пользоваться удобным частичным запретом с блокировкой встроенных в приложения трекеров, за что я и полюбил именно TrackerControl. Но при этом надо как-то обеспечить соединение со своим собственным VPN и какие в этом случае у меня есть варианты?
Итак, вариант первый и немного о фаерволах
Одним из вариантов решения данной ситуации - использовать вместо TrackerControl фаервол, не использующий vpn слот, фильтрующий трафик на системном уровне (на уровне ядра). Без рут доступа тут, конечно же, не обойтись и такие фаерволы очень даже приветствуются, ибо считаются гораздо надежнее фаерволов, обходящихся без рута.
Одним из таких приложений является AdAway. По сути неплохая обертка для редактирования файла hosts с возможностью добавлять кастомные hosts файлы, но с вытекающими из этого недостатками: невозможностью выставления правил для отдельных приложений, невозможностью блокировки запросов напрямую к ip и обязательной перезагрузкой после каждого изменения правил. Несмотря на это его все же можно использовать совместно с нашим TrackerControl с его базовыми списками блокировки: просто один раз настроить (по сути просто включить и активировать) и забыть. У AdAway также есть анализ трафика, с помощью которого можно по желанию проследить, куда какое приложение стучится и вручную также внести их в hosts через тот же AdAway.
Насчет соединений напрямую по ip, их блокировка точно невозможна в AdAway, но вот насчет TrackerControl… Заявлено о блокировке по спискам в файлах hosts и не только, а также по анализу трекеров в коде приложений, что вроде как ставит под сомнение способность приложения блочить по ip, однако, в одном ишью, когда разработчика спросили о такой возможности, исходя из его ответа, если я правильно понял, приложение прежде всего блочит по IP, а по конкретным доменам уже опционально. И тут я вспомнил, что в настройках есть опция включения дополнительно более точной блокировки по доменам и все стало на свои места.
Еще один фаервол на системном уровне - AFWall+. Эта, пожалуй, целая машина по контролю трафика на основе iptables с достаточно широким разграничением доступа к интернету отдельных приложений: доступ через Wi-Fi, доступ к LAN и localhost, доступ к интернету через мобильную связь, доступ к интернету через VPN, доступ к сети Tor. Там уже какие хочешь перенаправления, приземления и пр. с iptables правилами, скриптами, если знать, как это все прописывать. Есть отдельно мониторинг, чтоб видеть куда стучится то или иное приложение, чтоб в дальнейшем этот сайт заблочить, прописав домен в hosts через AdAway, либо заблокировав трафик на конкретный ip адрес через iptables (через пользовательские скрипты). И эта вся возня по итогу рассчитана на весьма опытных пользователей.
И на этом моменте можно сделать следующие выводы:
1) вам подойдет TrackerControl если:
- в телефоне нет рут доступа
- использования vpn слота андроида не нужно ни вам, ни вашим приложениям
- вы не разбирайтесь, что там в сети происходит или просто не хотите заморачиваться с настройкой правил для сети
2) вам подойдет AFWall+ если:
- в телефоне есть рут доступ
- вам нужен vpn слот
- вы опытный человек в настройке сетевых правил и готовы возиться с ними достаточно долго (а при связке с VPN действительно появляется с этим некоторая возня)
И у этих двух приложений есть один существенный недостаток: программа запускается не самой первой при загрузке устройства, что может приводить к утечке данных со стороны какого-либо приложения. У AFWall+ в этом плане есть в экспериментальных настройках “Fix startup data leak” (“Исправить утечку данных при запуске”), но для этого нужно в первую очередь установить “Startup directory path for script” (“Путь к папке загрузки для скриптов”).
У TrackerControl же такого и близко нет и без рут прав единственным решением данной проблемы является выключение Wi-Fi и мобильного интернета до перезагрузки или выключения телефона. С рутом же, говорят, некоторые умельцы могут умудриться написать скрипт, блочащий включение Wi-Fi и мобильного интернета после включения самого устройства.
Если вопрос использования VPN не стоит, то можно сделать работу TrackerControl совместно с AFWall+. Как все же оказалось они вполне замечательно совместно работают, еще и хорошо дополняют друг друга в том плане, что у AFWall+ нет такого приятного бонуса, как выборочная “интеллектуальная” блокировка трекеров, как у TrackerControl.
Upd 09.03.2023:
Важное уточнение! При использовании AFWall+ совместно с TrackerControl и ему подобными в самом AFWall+ необходимо в настройках дополнительно включить контроль соединения с VPN, иначе при настройке доступа в AFWall+ к приложениям по схеме “запрещено все что не разрешено” просле активации локального VPN TrackerControl все правила доступа к сети AFWall+ игнорируются. Кроме доступа к VPN. Проверено!
Но опять же это если есть рут права. Без рута тут помогут только TrackerControl и ему подобные, использующие для фильтрации трафика локальный VPN, такие, как NetGuard и DNS66.
Вариант два
Другой путь - заставить TrackerControl работать с подключением через … через что?
У TrackerControl есть возможность работы через SOCKS5 прокси и есть какие-то ячейки для ввода данных о VPN (VPN IP и VPN DNS, но я так понял это про собственный локальный VPN) и на этом моменте я в итоге все же загуглил про возможность работы TrackerControl через Wireguard и нашёл одно ишью, где был вопрос примерно по этой теме. Спрашивали про работу TrackerControl совместно с различными протоколами и не забыли про Wireguard. И тут сам разработчик предложил очень хорошее решение: работу TrackerControl через SagerNet.
Решение оказалось даже чересчур хорошее, ибо SagerNet помимо Wireguard поддерживает разные другие протоколы, например Shadowsocks, который может помочь при условно тотальной блокировке внешнего интернета (в Беларуси в 2020 при такой блокировке, говорят, многим помог). Правда не знаю насчёт популярной возможности его работы в связке с Cloak, но к Cloak, в случае чего, можно будет подключиться отдельно от SagerNet, с помощью приложения Shadowsocks, который не то, чтобы также умеет поднимать локальный прокси, как и SagerNet … ИНТЕРФЕЙСЫ И ФУНКЦИОНАЛ ИДЕНТИЧНЫ, за исключением поддерживаемых протоколов, конечно.
Уж не знаю, кто у кого стырил, но факт в том, что SagerNet умеет работать с кучей разных протоколов, а Shadowsocks лишь с Shadowsocks, но плагин Cloak есть только к нему.
Недавно поднималась тема по поводу того, что есть страны, которые вроде как и не отгородились от всего интернета, тем не менее успешно блокируют как различные VPN по протаколам, так и Shadowsocks. В этом случае конкретно для десктопов спасает sshuttle, который пускает весь трафик через туннель ssh, ибо уж что что, а блочить конкретно ssh на постоянке может быть достаточно губительно для бизнеса и различных предприятий. Дак вот, в SagerNet тоже есть возможность пустить трафик через ssh, но это так, к слову.
SagerNet умеет предоставлять доступ к подключаемым прокси как через свое локальное прокси, так и через локальный VPN, занимающий андроидовский vpn слот. Но нужен именно его локальный прокси сервер, адрес которого можно вписать в настройки TrackerControl, заставив его работать через этот прокси. И в итоге получится такая цепочка соединений: любое android приложение TrackerControl (локальный vpn) SagerNet (локальный прокси) Wireguard.
С такой длинной цепочкой не обошлось и без существенных недостатков, касающихся самого SagerNet:
- приложение иногда, но все же может просто завершится и приходится его перезапускать и переподключаться;
- при разрыве основного подключения к интернету и его возобновлении не подключается к Wireguard, хотя пишет, что подключено и приходится переподключаться, что не очень удобно, но привыкнуть можно.
Пока дописывал эту статью, наткнулся на приложение Matsuri - форк SagerNet, который призван решить некоторые его проблемы. Судя по упоминанию ограничения энергопотребления, возможно, там уже решили недостатки, описанные мной выше (ибо именно такие недостатки, обычно, и связывают с режимом энергопотребления приложений), но я этого пока не проверял. В любом случае там почти все то же самое, что и в SagerNet и все, что будет написано про SagerNet можно повторить и в Matsuri.
UPD: Проверил! Matsuri лишен недостатков, описанных выше! Настоятельно рекомендую его!
Разработчик TrackerControl расписал по шагам, что и как настраивать, я же покажу почти каждый шаг на собственном примере со скриншотиками.
Собственно сама настройка
После прошивки своего устройства можно заранее найти, скачать и установить нужные нам TrackerControl и SagerNet. Как я написал выше, все же лучше вместо SagerNet установить Matsuri, но тогда для Wireguard необходим отдельный плагин. Скрины же останутся конкретно для SagerNet, интерфейс и настройки у SagerNet и у Matsuri практически идентичны.
Если вы доверяете установленной операционной системе, вы можете врубить интернет и найти альтернативный маркет для андроид приложений F-droid и уже в нем найти, скачать и установить наши TrackerControl и SagerNet (или Matsuri).
Если кто не знает, то в двух словах: приложения, попадающие в этот маркет, тщательно проверяются разработчиками на наличие вредоноса и всяких трекеров и приложения хоть с какими-никакими трекерами, закладками в официальный репозиторий не попадает. Впрочем, от разработчиков, придумавших предупреждать даже о приложениях, оригинальный код которых был полностью почищен от несвободных проприетарных компонентов, ничего другого ждать и не приходится. Приложения собирают и тестируют сами разработчики f-droid в изолированных виртуальных машинах, которые после сборки удаляются, что вроде ахренеть как обнадеживает, тем не менее даже при таких условиях разработчики не могут дать стопроцентную гарантию вашей безопасности и конфиденциальности.
Вам. Никто. Не. Может. Гарантировать. Безопасность. И. Конфиденциальность. Кроме. Вас. Самих.
Заходим в SagerNet или Matsuri.
Для начала зайдем в настройки самого приложения (значок “≡” в верхнем левом углу -> Настройки). В настройках необходимо врубить “Автоматическое подключение”. Сервисный режим - только прокси. В дальнейшем разраб TrackerControl предлагает все остальные настройки вырубить нахрен, однако у меня без автоматического MTU ничего не работало и я его оставил. Как-то так:
А далее вырубать то можно все, но до настроек DNS сервера. Имейте в виду, что SagerNet и Matsuri не подхватывают адрес DNS сервера из конфига Wireguard-а и вам его придется прописывать самим ручками и явно. Особенно, если у вас есть кэширующий DNS на том же сервере, что и ваш Wireguard.
Далее (т.е. ниже) во входящих настройках выставляем следующее:
Порт прокси SOCKS5: 2080
Локальный порт DNS: 6450
Теперь, когда мы настроили SagerNet или Matsuri, можем добавить в него wireguardовский конфиг. Из настроек выходим к списку конфигов, снова нажав на значок “≡”, потом “Конфигурация” и нажимаем на значок документа с плюсиком в правом верхнем углу.
Ну а там на выбор можно добавить конфиг несколькими способами: из файла, из буфера, через qr код либо каждую строку конфигурации ввести вручную. На этом моменте, думаю, что-то скринить и объяснять нет необходимости.
Если нажмете на “Ручные настройки”, то можете полюбоваться, сколько всякого интересного существует для обхода блокировок и не только.
Ну и в общем то после добавления конфигурации можно подключиться к нашему Wireguard, нажав на кнопочку с бумажным самолетиком в правом нижнем углу (в средине у Matsuri) и проверить соединение, нажав на всплывающее уведомление о подключении.
Далее переходим в TrackerControl.
Перед вами список ваших приложений. Прежде всего находим в нем приложение SagerNet (или Matsuri), нажимаем на него и отключаем его от мониторинга.
Потом выходим из этой настройки для SagerNet, нажимаем на настройки самого TrackerControl в правом верхнем углу,
заходим в “Pасширенные настройки”, находим строчки про SOCKS5 и вводим следующее:
Адрес SOCKS5: 127.0.0.1
Порт SOCKS5: 2080
В этих же настройках находим и заходим в “Перенаправление портов”,
нажимаем на “⊕” и задаем следующее:
Протокол: UDP
Порт источника: 53
Адрес назначения: 127.0.0.1
Порт назначения: 6450
Целевое приложение: никто
Обратите внимание, что даже если поля вам кажутся заполненными, мол типо “наверное это установится значение по умолчанию”, то нет, поля на самом деле пустые и нужно вводить все ручками:
После нажатия на “ОК” должна появиться следующая строчка:
Естественно можем уже включить “Использовать прокси SOCKS5”
и попробовать проверить свой ip, например, введя “ip” в поиск duckduckgo:
Не доверяйте duckduckgo? На любом инстансе searx можно ровно также узнавать свой ip, предварительно поставив в дополнительных настройках searx галочку на Self Informations во вкладке Advanced или Special Queries.
Должен быть ip вашего VPN. Ну и разработчик далее рекомендует проверить утечки ip и DNS. Штош… Если это кому надо, то популярный чекер утечек DNS - dnsleaktest.com, а самые известные чекеры утечек ip - Cover Your Tracks и ipleak.net.
Кстати об утечках (Upd 09.03.2023)
Не за долго до публикации данной статьи, помню, многих взбудоражила новость о том, что в андроиде обнаружены серьезные утечки при использовании VPN. Прям вот очень серьезные, способные раскрыть некоторую конфиденциальную инфу и деанонимизировать.
Естественно если такая хрень творится с реальными VPN, то и с локальными, созданными приложениями типа TrackerControl и ему подобными для фильтрации трафика будет также.
Новость дошла до быдлоджаза, а тот в свою очередь пояснил, что эту тему его команда ковыряла очень давно, там гребаная дыра с Captive Portal и вот ее решение:
-
Для устройств без рут доступа в фаерволе, работающем через свой локальный VPN, прописывается переадресация на на свой localhost (запрещается, приземляется) для следующих доменов:
connectivitycheck.gstatic.com
,connectivitycheck.android.com
. Может поломать соединения на стоковых прошивках, но по другому никак. -
Для устройств с рут доступом скачивайте Termux и в нем сначала прописывайте команду
su
для получения рут прав, а после прописывайте следующую команду:settings put global captive_portal_mode 0
И все.
Итоги и нахрена это все
Изначально планировалось написать простенькую сухую статейку просто по настройке соединения TrackerControl с Wireguard, но меня, как обычно, понесло не в те дебри и со своим рвением досконально разжевывать многие моменты я расписал чуть ли не весь пак опенсорсных фаерволов на андроид и кучи некоторой другой инфы (многое уже удалил). При этом я очень сильно сомневаюсь в релевантности данной статьи и есть уверенность, что данная инструкция кроме меня никому нахрен не нужна.
Зато получилось интересное чтиво.
Закончить итоги хочу рассуждениями о том, на кой хрен кому-то это все может быть необходимо. Конкретно имею в виду фаерволы и VPN - главную тему статьи по сути.
Фаерволы, блокировщики трекеров вполне себе понятно на кой хрен используются. Даже в свободных “чистых” прошивках какое-нибудь системное приложение возьмет да и отправит неизвестные вам данные о вас на серверы гугла, не говоря уже о стоковых прошивках, где помимо трекеров от гугла есть трекеры от производителя смартфона. Ну вот реально, на кой хрен в моем старом мейзу греебаная системная клавиатура постоянно отправляет какие-то данные на хрен знает какие сервера?
Люди просто не хотят, чтоб за ними хоть сколько-то следили, из-за чего в своё время от части и набрала свою популярность такая операционка, как LineageOS. Только вот LineageOS лишь основан на открытом исходном коде андроида (AOSP), ничего гугловского из прошивки не вырезается и приходится после прошива устройства предварительно, с отключенным интернетом, блочить доступ системных приложений к сети. Ну и кроме системного софта есть еще и всякого рода сторонний софт. Тут, думаю, объяснять нечего, все и так понятно.
VPN же может быть необходим по разным причинам. Самая популярная - обход блокировок, что я не одобряю, ибо для просто обхода блокировок существуют куда более примитивные и порой более надежные штуки - различные прокси на любой вкус и цвет. Особенно те, что способны спрятаться от поля зрения вашего провайдера, притворяясь каким угодно типом трафика.
Эти ваши ВПНны используются во всяких фирмах, предприятиях как собственная защищенная сеть и ассоциируются прежде всего с корпоративным использованием. На некоммерческом бытовом уровне люди её используют для объединения в одну сеть своих устройств, находящихся за многие километры друг от друга для управления ими. Еще как вариант: для объединения компов своих знакомых в одну сеть абсолютно для чего угодно - от общения и совместной работы над проектом, до игры по локалке как в древние добрые.
Лично мне, например, собственный VPN даёт возможность писать эту статью с разных устройств не прибегая к помощи сторонних сервисов с весьма сомнительной политикой конфиденциальности. Ахиренная возможность хостить какие угодно сервисы на выбор из огромного их разнообразия внутри своей собственной сети, иметь доступ к ним с разных устройств и уже за это я бесконечно благодарен специалистам по интернет безопасности за такое ахирительное изобретение, как VPN.
09.01.2023