🌐 Languages: [󠁧󠁢󠁥󠁮󠁧󠁿**English**](README.md) | [**Русский**](README.ru.md) # Конфигуратор блокировок и перенаправлений DNS **Позволяет настраивать правила перенаправления и блокировок сайтов для аккаунтов Cloudflare и NextDNS.** **Может работать через GitHub Actions. Ничего скачивать, устанавливать не нужно!** [Видео с настройкой](#видео-пошаговой-настройки-redirect-для-nextdns) [Общее сравнение: Cloudflare vs NextDNS](#cloudflare-vs-nextdns) [Настройка учетных данных: Cloudflare](#настройка-учетных-данных-cloudflare) [Настройка учетных данных: NextDNS](#настройка-учетных-данных-nextdns) [Настройка профиля](#настройка-профиля) [Настройка источников данных](#настройка-источников-данных) [Настройка редиректов (опционально)](#настройка-исключений-редиректов-опционально) [Настройка сразу нескольких профилей](#настройка-сразу-нескольких-профилей) [GitHub Actions](#настройка-github-actions) --- ## Cloudflare vs NextDNS Оба провайдера имеют бесплатные тарифы, но с определёнными ограничениями. ### Ограничения Cloudflare + 100 000 DNS-запросов в день + IPv4 DNS-запросы ограничены одним IP-адресом. При этом можно без ограничений использовать другие методы: DoH, DoT, IPv6 ### Ограничения NextDNS + 300 000 DNS-запросов в месяц (тоже достаточно для личного использования) + Низкая скорость API — ограничение 60 запросов в минуту. Из-за этого сохранение настроек занимает заметно больше времени --- ## Настройка учетных данных Cloudflare 1) После регистрации в **Cloudflare** перейдите во вкладку _Zero Trust_ и создайте аккаунт. - Бесплатный тариф имеет хорошие лимиты — просто выберите его - Шаг с добавлением платёжного метода можно пропустить, нажав _Cancel and exit_ (в правом верхнем углу) - Вернитесь во вкладку _Zero Trust_ 2) Создайте токен: **Create Token → Create Custom Token**: https://dash.cloudflare.com/profile/api-tokens С двумя разрешениями (Permissions): Account.Zero Trust : Edit Account.Account Firewall Access Rules : Edit Сохраните API-токен в **переменную окружения** `AUTH_SECRET`. 3) Найдите **Account ID**: https://dash.cloudflare.com/?to=/:account/workers Сохраните **Account ID** в **переменную окружения** `CLIENT_ID`. --- ## Настройка учетных данных NextDNS 1) Сгенерируйте **API KEY** на странице https://my.nextdns.io/account и сохраните его в **переменную окружения** `AUTH_SECRET`. 2) Нажмите на логотип **NextDNS**. На открывшейся странице скопируйте ID из секции **Endpoints** и сохраните его в **переменную окружения** `CLIENT_ID`. --- ## Настройка профиля Установите в **переменную окружения** `DNS` название DNS-провайдера (**Cloudflare** или **NextDNS**). --- ## Настройка источников данных Каждый источник данных должен быть ссылкой на hosts-файл, можете воспользоваться этой: https://raw.githubusercontent.com/Internet-Helper/GeoHideDNS/refs/heads/main/hosts/hosts Можно указать несколько источников, разделив их запятой: `https://first.com/hosts,https://second.com/hosts` --- ### 1) Настройка перенаправлений (редиректы) Укажите источники в **переменной окружения** `REDIRECT`. Скрипт парсит источники, ингнорируя строки, начинающиеся на `0.0.0.0` и `127.0.0.1` Например, из строк: 0.0.0.0 domain.to.block 1.2.3.4 domain.to.redirect 127.0.0.1 another.to.block будет взята только `1.2.3.4 domain.to.redirect` для дальнейшей обработки редиректов. + Если домен для редиректа встречается несколько раз, будет применён первый IP из первого источника. --- ### 2) Настройка блоклиста Укажите источники в **переменной окружения** `BLOCK`. Скрипт парсит источники, забирая только строки, начинающиеся на `0.0.0.0` и `127.0.0.1` Например, из строк: 0.0.0.0 domain.to.block 1.2.3.4 domain.to.redirect 127.0.0.1 another.to.block будут взяты только: domain.to.block another.to.block для дальнейшей обработки блокировок. + Для **Cloudflare** можно использовать один и тот же источник для `BLOCK` и `REDIRECT`. + Для **NextDNS** оптимальным вариантом будет указать только `REDIRECT`, а списки для блокировки выбрать вручную во вкладке _Privacy_. --- ## Настройка исключений редиректов (опционально) Добавьте домены в **переменную среды** `EXCLUDE_REDIRECT` через запятую **без пробела**, например: `instagram.com,twitch.com` Эти домены и все их поддомены: - будут удалены из существующих настроек редиректов; - не будут учитываться при добавлении новых. --- ## Настройка сразу нескольких профилей ### Ограничения Все профили получат _одинаковые_ настройки. Другими словами, значения в `BLOCK`, `REDIRECT` и `EXCLUDE_REDIRECT` будут **общими**. ### Несколько профилей одного провайдера Укажите данные профилей через запятую **без пробела** в соответствующих **переменных окружения**. Например, если у вас два профиля NextDNS, должно получиться так: - `AUTH_SECRET` содержит: `секрет_NextDns_1,секрет_NextDns_2` - `CLIENT_ID` содержит `идентификатор_NextDns_1,идентификатор_NextDns_2` ### Несколько профилей разных провайдеров В дополнение к настройке выше, укажите имя провайдера для каждого профиля через запятую **без пробела** в **переменной среды** `DNS`. Пример: - `DNS` содержит: `NEXTDNS,CLOUDFLARE,NEXTDNS` - `AUTH_SECRET` содержит: `секрет_NextDns_1,секрет_Cloudflare_1,секрет_NextDns_2` - `CLIENT_ID` содержит `идентификатор_NextDns_1,идентификатор_Cloudflare_1,идентификатор_NextDns_2` --- ## Поведение скрипта ### Cloudflare Ранее сгенерированные данные будут удалены. Скрипт распознаёт старые данные по следующим признакам: + Префикс имени списка: **_Blocked websites by script_** и **_Override websites by script_** + Префикс имени правила: **_Rules set by script_** + Отличающийся **_Session id_** (Session id хранится в поле description) После удаления старых данных будут созданы и применены новые списки и правила. Если нужно очистить настройки блокировки/редиректа **Cloudflare**, запустите скрипт без указания источников в соответствующих **переменных окружения**. Например, отсутствие значения в `BLOCK` приведёт к сбросу настроек блокировки. --- ### NextDNS Для `REDIRECT`: + Существующий домен будет обновлён, если IP редиректа изменился + Новые домены будут добавлены к существующим + Остальные настройки редиректов останутся без изменений Для `BLOCK`: + Новые домены будут добавлены к существующим + Остальные настройки блокировки останутся без изменений Ранее сгенерированные данные удаляются, если не заданы источники **ДЛЯ ОБЕИХ НАСТРОЕК** `BLOCK` и `REDIRECT`. --- ## Настройка GitHub Actions #### Видео пошаговой настройки REDIRECT для NextDNS: https://www.youtube.com/watch?v=vbAXM_xAL5I #### Шаги настройки 1) Сделайте Fork репозитория 2) Перейдите в _Settings_ → _Environments_ 3) Создайте _New environment_ с именем `DNS` 4) Добавьте `AUTH_SECRET` и `CLIENT_ID` в **Environment secrets** 5) Добавьте `DNS`, `REDIRECT`, `BLOCK` и `EXCLUDE_REDIRECT` в **Environment variables** + **Action** запускается ежедневно в **01:30 UTC** (04:30 по МСК). Чтобы изменить время, отредактируйте cron в `.github/workflows/github_action.yml` + **Action** можно запустить вручную через кнопку **Run workflow**: вкладка _Actions_ → workflow **DNS Block&Redirect Configurer cron task**