Надо было мне разобраться получше с iptables и ansible, а для этого нужна задачка. Задачка была выбрана такая: поднять свой VPN сервер с возможностью резки рекламы и прочего spyware.
Суть происходящего при резке рекламы с помощью DNS сервера состоит в том, что когда клиент спрашивает сервер какой IP адрес сопоставлен имени хоста, то DNS сервер отвечает ему 0.0.0.0 В итоге клиент ходит сам к себе и быстро получает отказ, так что не пользуется для этого модемом связи в случае с телефоном. Что экономит батарейку не просто на процент, а при моем режиме использования телефона время автономной работы выросло с 8-10 часов до 23.5. Специально засекал и был мягко говоря удивлен. Как показала практика 85% запросов от телефона это spyware.
Ansible был выбран потому, что для настройки всего даже на настраиваемый сервер заходить не надо, просто нужен доступ по ssh к нему. После настройки конфиги для подключения к VPN будут лежать в папке с плейбуком. Да и сам запуск это одна команда. Не люблю я запоминать, что я там пять лет назад настроил и Ansible для того что бы этого не делать идеален, не говоря уже о прочих его достоинствах. Запустил у себя на ноуте плейбук, он все тебе на сервере настроил, потом отсканил QR код на телефоне, работает. Конечно подключить можно не только телефон, конфиги делаются и просто текстовые для любого клиента.
В качестве DNS сервера с возможностью резать телеметрию и прочую гадость был выбран Pi-hole DNS. Просто потому, что он очень не требователен к ресурсам и мне хватает на амазоне t3.nano ноды, которую мне дали бесплатно на год. При этом я видел на DigitalOcean готовый дрополет Pi-hole VPN, но он прибит к этому провадйеру, а мой плейбук я пробовал уже на двух разных и он просто пашет, плюс там видно все, что он делает. Плюс ко всему при установке он закачивает более 5млн бан записей в DNS что бы не искать их потом.
VPN же был выбран Wireguard, так как он прост как палка и настраивается соответственно очень просто.
В итоге порядок действий:
Сделать себе VPS где-то с ubuntu 22.04. Может и на другом заработает деб дистре, не проверял.
Сделать доступ на нем по ssh.
Открыть нужные порты на брандмауре провайдера.
Запустить плейбук задав пару настроек (на гите все описано). Я это с ubuntu делаю, не знаю где еще будет работать.
Подрубить телефон по QR коду.
Наслаждаться.
Сам плейбук опубликован тут
Я в очередной раз экспериментами сломал VPN, так как у меня есть возможные планы по развитию плейбука небольшому. Перед поездкой на выходные надо было поднять снова. Минута времени и все готово. Старый VPS я просто прибил и поднял пустой, задал в настройках новый адрес и все. В поездке очень полезно было то, что телефон не садится пока в кармане лежит. Может кому пригодится. Ну и в целом личный VPN сервер штука не бесполезная ;)
P.S. от статистики же в 85% запросов в блоке я просто был в шоке небольшом. Это не сразу так будет, а постепенно, потому, что spyware долбит все время, а вы нет. Особо злобный в этом плане branch.io Когда же мне надо что то разблочить, то захожу в админку и добавляю в вайтлист домен. Таких у меня пока пять штук всего, которые были заблокированы, а мне не надо их блочить.
Комментарии (18)
Grey83
22.08.2023 19:36+1В принципе таким же методом блочится реклама на устройствах без рута: ставится прога, которая пропускает весь трафик через VPN. Только сервер находится на самом устройстве, а не где-то в инете.
С рутом ещё проще: можно повырубать программам все рекламные активити/службы/провайдеры помимо использования фаерволла и резалки рекламы. Кстати службам гугла это делать тоже нужно: они как бы не больше всего трафик и батарейку жрут (потому что много рекламы именно через них в прогах подключено).
А если проге для работы инет не нужен, то можно просто отрубить ей разрешение пользоваться инетом в настройках. Правда будет при запуске ругаццо, что ей кровь из носу нуно инет (чтобы рекламу скачать).
anonym0use
22.08.2023 19:36P.S. от статистики же в 85% запросов в блоке я просто был в шоке небольшом. Это не сразу так будет, а постепенно, потому, что spyware долбит все время, а вы нет. Особо злобный в этом плане branch.io Когда же мне надо что то разблочить, то захожу в админку и добавляю в вайтлист домен. Таких у меня пока пять штук всего, которые были заблокированы, а мне не надо их блочить.
Поздравляем с принятием красной пилюли, продолжайте в том же духе :) Чтобы улучшить ситуацию, самый лучший способ для телефона это поставить на него кастомноую ОС, лучше GrapheneOS, также можно CalyxOS, на крайняк какой нибудь LineageOS или вообще упороться и поставить какой нибудь линукс, но к этим ОС нужно и телефон покупать на котором они могут работать.
Grey83
22.08.2023 19:36Ну не обязательно именно линейку: можно и AOSP или модификацию на их основе, главное чтобы были прошивки FOSS или vanilla (то есть без встроенного гугломусора).
anzay911
22.08.2023 19:36+1А Настройка -> Подключение и общий доступ -> Частный DNS сервер: dns.adguard.com чем хуже?
3draven Автор
22.08.2023 19:36Тем, что в телефоне у меня ее нет, тем, что я описал полноценный впн, который можно одной командой поставить, тем, что я имею контроль над своим сервером, вайтлисты и прочее и если у меня например что то заблочено, а не надо могу отключить, тем, что если какой то спайварь пойдет напрямую на 8.8.8.8 настройка не поможет, а с впн он все равно попадет на мой резак ну и еще много чем ;)
hullaballoo
22.08.2023 19:36Я дополнительно рядом сажаю контейнер unbound c практически дефолтными настройками (qname-minimisation: yes), в который мапится файл конфигурации из примера отсюда: https://docs.pi-hole.net/guides/dns/unbound/
3draven Автор
22.08.2023 19:36Бэком я сделал quad9 dns, он малварь опознает и режет.
hullaballoo
22.08.2023 19:36У вас в списках уже есть anti-malware, если не полагаться на дефолтное обновление PiHole раз в неделю, а гонять его кроном почаще - будет, как мне кажется, не хуже quad9, но quad9 тогда не будет знать про ваши запросы.
Кстати, SNAFU в моём случае достаточно много всего ломает, так что его из всей когорты списков имеет смысл использовать осторожно.
atrost
Для себя выбрал вариант автоматизации - tasker
Разблокировка устройства - запуск VPN, отключён экран более 10 минут - остановка.
Через 4 часа остановка синхронизации, её включение при включении экрана. При этом, push будут работать через google push service. Получаем почти iPhone по живучести :)
3draven Автор
Мне кажется вы описываете перпендикулярную вышеописанному штуку. Но, пусть будет, может кому понравится и это. Одно другому не мешает.
atrost
Я долго экспериментировал с adguard, могу заверить, что в режиме VPN (это не совсем VPN) телефон расходует заряд сильно больше*. А некоторые приложения, не получив ответ от сервера, начинают яростно долбиться не раз в час (когда был интернет), а раз в 5 минут, попутно пробуждая систему.
При этом они отслеживает два флага в системе: включена ли синхронизация и есть ли сеть. Если какого то нет, то они замирают.
*у меня установлено 500 приложений.
3draven Автор
Мне кажется вы не знаете как работает эта схема. Я кратко описал как мне кажется понятно. Но спорить не стану, лень мне.
atrost
В adguard есть штатный dns фильтр
только эта фильтрация работает локально на устройстве