Примерно год назад я написал статью ChatGPT без VPN за 10 минут (и установка нативного приложения). Хотя она актуальна до сих пор, сегодня я хочу вам рассказать про еще один способ. Он основан на том же принципе, но использует другие подходы и инструменты.
Суть: мы делаем свой DNS-профиль в NextDNS или Cloudflare и автоматически актуализируем его раз в сутки.
Для этого я написал небольшую программу. Самое приятное: для ее работы вам не придется ничего устанавливать вообще.
Как это работает
Программа будет запускаться в GitHub Actions, каждую ночь обновляя записи DNS.
Для этого ей потребуются данные вашей учетки от выбранного DNS-провайдера и ссылки на файлы hosts, которые будут использованы для применения правил.
Где брать hosts?
За прошедшее время появилось несколько альтернатив DNS от Comss, которые сами предоставляют эти файлы (за что им большое спасибо). В рамках статьи мы воспользуемся файлом hosts от GeoHide DNS:
https://raw.githubusercontent.com/Internet-Helper/GeoHideDNS/refs/heads/main/hosts/hosts
Почему просто не использовать готовое чужое решение?
Вы вполне можете указать у себя в настройках адрес Comss, Xbox DNS, GeoHide или mafioznik. В этом случае, абсолютно все ваши DNS-запросы пойдут через их сервера. Проходит ли кто-то из них аудиты безопасности и прочие процедуры, которые могут гарантировать конфеденциальность? Очевидно, что нет.
Более того, владельцы Xbox DNS активно борются с тем, чтобы IP их прокси-серверов использовались напрямую, минуя их DNS-сервер. Лично я из этого делаю вывод, что они каким-то образом монетизируют DNS-запросы и, совершенно точно, занимаются их хранением и обработкой (иначе такая борьба была бы невозможна технически).
Но вот что мы можем сделать - это минимизировать свои риски, проксируя только те запросы, которые действительно в этом нуждаются. А все остальные - пускать через проверенного провайдера с неподконтрольной РКН юрисдикцией.
Что выбрать между NextDNS и Cloudflare
Однозначного фаворита нет, поскольку каждый из способов имеет свои ограничения.
Ограничения Cloudflare
100 000 DNS-запросов в сутки на бесплатном тарифе (вполне достаточно)
На бесплатном тарифе DNS-запросы по IPv4 оганичены одним IP-адресом, что делает данный способ неудобным в использовании для случаев, когда вы не можете использовать запросы DNS-over-HTTPS, DNS-over-TLS/QUIC или IPv6 (на них ограничений нет)
Ограничения NextDNS
300 000 DNS-запросов в месяц на бесплатном тарифе (тоже вполне достаточно)
Медленный API, который никак не выйдет из беты (на данный момент - всего 1 RPS), не позволяет загружать данные "пачкой". Каждый домен приходится записывать отдельным запросом. Поэтому время обновления растягивается на несколько минут.
Мой совет
Для себя я выбрал NextDNS. Данный провайдер позволяет в настройках профиля выбрать целую кучу списков блокировки трекеров и прочей гадости, снимая со скрипта необходимость добавлять их через медленный API. Просто перейдите во вкладку Privacy и выберите столько настроек Blocklists и Native Tracking Protection, сколько захотите.
Ограничение Cloudflare на IPv4 вкупе с отсутствием встроенного каталога списков блокировки делает его не самым удобным в использовании. Стоит выбирать, только если вам зачем-то нужна максимально высокая скорость обновления настроек.
Настройка работы через GitHub Actions
Если коротко, то вся настройка займет пару минут, ее можно разделить на несколько коротких этапов:
1) Форкаем репозиторий
2) Генерируем токен доступа, находим свой ID клиента
3) Настраиваем несколько переменных среды для работы GitHub Actions
Осталось прописать адрес DNS в настройках ваших устройств - и все готово!
Я предлагаю посмотреть вам видео с настройкой для NextDNS, в котором я за две минуты показал весь процесс. Перед просмотром убедитесь, что вы "ускорили" кэширующие сервера YouTube :)
Ниже, уже более мелкими шагами, дана инструкция, и дополнительно описан процесс настройки для Cloudflare. Также при необходимости вы можете ознакомиться с readme.
Шаг 1. Форкаем репозиторий
Если у вас еще нет аккаунта на GitHub
Придется его создать. Не используйте одноразовую почту, в идеале - войти через свою основную почту Google. Иначе GitHub заподозрит в вас бота и заблокирует возможность сделать форк.
На странице репозитория жмем Fork вверху справа. Если вы в хорошем настроении, можете заодно прожать звезду :)
Шаг 2. Создаем место хранения переменных среды
После того, как форк готов, перейдите по пути Settings → Environments и создайте новую environment с именем DNS. Не закрывайте вкладку - она нам еще пригодится.
Шаг 3. Получаем данные учетной записи
Для NextDNS:
1) Сгенерируйте API KEY на странице https://my.nextdns.io/account
и сохраните его в Environment secrets на вкладке с Шага 2 как AUTH_SECRET
2) Нажмите на логотип NextDNS. На открывшейся странице скопируйте ID из секции Endpoints . Сохраняем в Environment secrets как CLIENT_ID.
Для Cloudflare:
1) После регистрации в Cloudflare перейдите во вкладку Zero Trust и создайте аккаунт с бесплатным тарифом. Шаг с добавлением платёжного метода можно пропустить, нажав Cancel and exit (в правом верхнем углу).
2) Создайте токен: Create Token → Create Custom Token: https://dash.cloudflare.com/profile/api-tokens
С двумя разрешениями (Permissions): Account.Zero Trust : EditAccount.Account Firewall Access Rules : Edit
Сохраните его в Environment secrets как AUTH_SECRET
3) Найдите Account ID по ссылке https://dash.cloudflare.com/?to=/:account/workers и сохраните в Environment secrets как CLIENT_ID
Шаг 4: устанавливаем провайдера DNS
Создайте Environment variable (именно variable, не secret!) с названием DNS и именем выбранного вами DNS-провайдера (NextDNS или Cloudflare).
Шаг 5: задаем настройки перенаправления и блокировки
Создайте Environment variable с названием REDIRECT и поме��тите туда ссылку на hosts. Если вы хотите добавить несколько ссылок, указывайте их через запятую без пробела. Если домен встречается в нескольких списках, приоритет отдается той записи, которая была получена первой.
Создайте Environment variable с названием BLOCK и поместите туда ссылку на hosts
Если у вас один файл, в котором сразу указаны редиректы и блокировки, программа это поймет и отфильтрует только те записи, которые подходят под правило. Таким образом, редирект отбросит все, что начинается с
0.0.0.0и127.0.0.1, а блок поступит наоборот. Так что имеет смысл указать один файл для сразу и там, и там.Напоминю, что для NextDNS лучше всего указывать только редирект, а блокировки настраивать самостоятельно в личном кабинете!
Шаг 5: запускаем GitHub Actions
На странице форкнутого репозитория выбираем вкладку Actions и нажать длинную зеленую кнопку "I understand...".
Слева выбираем пункт DNS Block&Redirect Configurer cron task
Справа появится предупреждение, жмем там кнопку Enable workflow
Производим ручной запуск через кнопку Run Workflow
Через несколько секунд вы увидите, что джоба запустилась.
Вот и все! Не забудьте прописать в настройках ваших устройств адрес нового DNS :)
