Надо было мне разобраться получше с iptables и ansible, а для этого нужна задачка. Задачка была выбрана такая: поднять свой VPN сервер с возможностью резки рекламы и прочего spyware. Но если просто хотите то же самое и намного лучше и больше, рекомендую pfSense.
Суть происходящего при резке рекламы с помощью DNS сервера состоит в том, что когда клиент спрашивает сервер какой IP адрес сопоставлен имени хоста, то DNS сервер отвечает ему 0.0.0.0 В итоге клиент ходит сам к себе и быстро получает отказ, так что не пользуется для этого модемом связи в случае с телефоном. Что экономит батарейку не просто на процент, а при моем режиме использования телефона время автономной работы выросло с 8-10 часов до 23.5. А после доделки плейбука как описано в конце еще больше! Специально засекал и был мягко говоря удивлен. Как показала практика 85% запросов от телефона это spyware. Телефон Google Pixel 7 Pro, пользуюсь я им не активно, пока работаю лежит на столе, вечером что то почитать и когда гуляю карту посмотреть, в общем я фильмы не смотрю круглосуточно или соцсети.
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 Когда же мне надо что то разблочить, то захожу в админку и добавляю в вайтлист домен. Таких у меня пока пять штук всего, которые были заблокированы, а мне не надо.
UPD: После некоторых раздумий я сделал дополнительно логирование p2p трафика, выяснилось, что часть спайвари ходит на прямые айпишники и никакой DNS их не зарежет, но VPN может, что собственно я и сделал. Сейчас для p2p запросов, которые не опознавались через DNS запрещены tcp порты [123,443,5228,80,8009] и udp [137]. То, что удалось отловить сразу, позже список будет меняться. Так что теперь даже они никуда не постучат. Хитрый aliexpress китайский среди тех кого я опознал как умного стукача. Тут надо признать, что запрос от спайвари уходит до VPN, так что первый пакет таки тратит батарейку, но все следующие из за неустановленного соединения не полетят. Плюс судя по логам, пытается спайварь без связи реже чем с ней. Так что тем не менее кажется это хорошо. В итоге сейчас приложение, которое батарейку мерит показывает, что в режиме ожидания телефон проработает 66ч! Так же пока телефон лежит на столе, он остывает до комнатной температуры и чувствуется, как и должен, холодным. В этом недостаток когда он в кармане штанов :) Телефон в итоге после внедрения контроля над p2p трафиком проработал от одного заряда 47ч. Повторю, при моем режиме использования. Большую часть времени лежал где-то конечно. Вообще я затеял все это не ради батарейки, это случайный результат.
Выходит ваш телефон на 90% не ваш, такие дела.
![](https://habrastorage.org/getpro/habr/upload_files/ec6/33c/261/ec633c261d86119ced094835584a7bc4.png)