Как включить модуль
В меню "Опции Carbon Reductor DPI X" выбрать опцию "Включить интеграцию с DNS".
Сама по себе опция отвечает только за то, что модуль будет включен. Нужно обязательно выбрать одну или несколько задач для него.
Внимание! В случае если используется 2 сервера с Carbon Reductor интеграция с DNS-сервером должна быть настроена только на 1 из них. |
Что нужно сделать на DNS-сервере
Установить rsync
Установка и запуск
По умолчанию, утилита может быть не установлена в системе. Установка и последующий запуск выполняются следующими командами.
CentOS 8
yum install rsync rsync-daemon |
systemctl enable rsyncd --now |
CentOS 7
yum install rsync |
systemctl enable rsyncd --now |
Ubuntu/Debian
apt-get install rsync |
Модуль только добавляет подключаемые файлы в нужные места. В некоторых дистрибутивах в основном конфигурационном файле не настроено их подключение. Мы не хотим повредить возможные ручные настройки, поэтому это нужно сделать вручную.
Unbound 1.4.20 (CentOS 6)
Всё обычно работает "из коробки". Более подробно можно прочитать в нашей статье - http://docs.carbonsoft.ru/113999917.
Требования к оперативной памяти.
Для работы может потребоваться двойной запас памяти, потребляемой при обычной работе, так как проверка корректности конфигурации потребляет столько же памяти, сколько и сам DNS-сервер. Проверка запускается сравнительно редко, не используется постоянно, поэтому для подстраховки от нехватки памяти лучше использовать swap.
Режим работы | Оперативной памяти | Размер swap |
---|---|---|
Минимальное тестирование, без реальных абонентов | 2 Гб | 2 Гб |
Оптимальный объём на август 2020 года | 4 Гб | 2 Гб |
Запас на случай роста объёмов реестра до середины 2021 года | 6 Гб | 2 Гб |
Unbound 1.6.0 (Debian 9)
- Создать директорию /etc/unbound/local.d/
- В файле /etc/unbound/unbound.conf.d/unbound.conf в конце секции "server:" указать include: /etc/unbound/local.d/*.conf
Важно: проверьте уровень логирования. Из-за частых автоматических изменений конфигурации файл /var/named/data/named.run может быстро разрастаться и привести к нехватке места на диске.
Что нужно сделать на Carbon Reductor
Авторизация по SSH-ключам
С каждым DNS-сервером с которым настраивается интеграция должна быть настроена авторизация по SSH ключам.
Для начала нужно подключиться по SSH к серверу с Carbon Reductor DPI X.
Все дальнейшие команды нужно выполнять внутри контейнера Carbon Reductor DPI X, перейти в него можно командой.
chroot /app/reductor/
Создаётся пара SSH-ключей:
ssh-keygen
Команда будет задавать вопросы, нам подходят значения по умолчанию, просто нажимаем Enter несколько раз.
Ключи отправляются на DNS-сервера. К примеру IP адрес DNS-сервера - 10.15.0.24, тогда команда для отправки выглядит так:
ssh-copy-id root@10.15.0.24
Обязательно проверьте, что после этого подключение по SSH успешно проходит и не запрашивает ввод пароля или yes/no.
Ограничения
- После переустановки DNS-сервера потребуется повторный обмен ключами. Возможно потребуется удалить строчку с публичным ключом DNS-сервера из файла /app/reductor/root/.ssh/known_hosts.
- Поддерживается только авторизация по SSH на стандартном порту 22 от имени пользователя root по публичным ключам.
Обязательные опции
Помимо опции "Включить интеграцию с DNS" необходимо указать ещё две опции:
IP-адреса DNS-серверов
Если вы используете несколько одинаковых DNS-серверов, Carbon Reductor DPI X позволяет отправлять сгенерированные файлы зон на каждый из них.
Для этого их адреса нужно перечислить через пробел в этой опции.
Тип DNS-сервера
Выберите тип DNS-сервера, который вы используете. На текущий момент вариант только один:
- Unbound
Задачи модуля
Блокировка ресурсов по домену
Возможно вы уже пользовались прототипом модуля, который устанавливался непосредственно на DNS-сервер и обращался к Carbon Reductor за списками.
Сейчас схема изменилась - Carbon Reductor DPI X локально генерирует конфигурационные файлы с DNS-зонами для заблокированных сайтов и отправляет их на DNS-сервер.
Если ранее использовался прототип - его необходимо отключить, удалив файл с параметрами запуска из директории /etc/cron.d/ на DNS-сервере.
Зачем это нужно, если есть модуль DNS-спуфинга?
- Иногда трафик не анализируется. Если пользователь обращается к DNS-серверу в локальной сети, его запросы могут не попадать в зеркало трафика, которое настроено для отправки трафика, уходящего за её пределы. Тем не менее трафик с последующим запросом будет заблокирован либо HTTP, либо SNI модулями, либо по IP.
- Использование только SNI-фильтрации не перенаправляет на страницу-блокировки. Анализировать HTTPS-трафик с точностью до домена можно и без DNS, но перенаправление на страницу блокировки - это понятнее для пользователя чем просто разрыв сессии. У него не возникнет лишних вопросов к службе технической поддержки провайдера.
- Снижение нагрузки с сервера фильтрации. В случае успешной фильтрации с помощью DNS-сервера запрос пользователя будет направлен к серверу страницы блокировки. Этот трафик не анализируется модулями фильтрации. Особенно актуально это для крупных провайдеров с субпровайдерами - один сервер анализирует трафик от нескольких АС Ревизор, у которых частота запросов к запрещённым сайтам значительно выше, чем у обычных абонентов.
Избежание частичных блокировок популярных ресурсов
Это новая, экспериментальная возможность в Carbon Reductor DPI X и сейчас она активно дорабатывается.
Схема работы:
- Модуль читает список частично заблокированных ресурсов. Его формируют администратор сервера и Carbon Soft, при использовании опции "Разблокировать популярные сайты в обход требований Роскомнадзора".
- Домены резолвятся, получаем набор связок "домен" - "список IP"
- Модуль читает список заблокированных целиком IP адресов.
- Заблокированные адреса удаляются из результатов резолва.
- Если ни один IP адрес ресурса не заблокирован - зона не генерируется.
- Если все IP адреса ресурса заблокированы - зона не генерируется.
- В остальных случаях из незаблокированных IP адресов формируется DNS-зона для домена.
- Из зон формируются конфигурационные файлы.
- Конфигурационные файлы отправляются на DNS-сервер.
- При наличии возможности (есть в Unbound) они валидируются. Если валидация не проходит - удаляются.
- Если всё в порядке - вызывается перечитывание конфигурационного файла.
- Абоненты, использующие DNS-сервер провайдера, при обращении к частично заблокированному ресурсу не получают заблокированные IP.
- В итоге они не замечают частичных блокировок.
- Снижается нагрузка на техническую поддержку провайдера
Пример
Ресурс example.com имеет 4 IP адреса: 1.2.3.1, 1.2.3.2, 1.2.3.3, 1.2.3.4.
1.2.3.1 - заблокировали, т.к. этот адрес используется также ресурсом block-me.com, попавшим в реестр РКН.
Пользователь Петя обращается к этому ресурсу. Его DNS-сервер присылает ответ:
;; ANSWER SECTION: example.com. 299 IN A 1.2.3.1 example.com. 299 IN A 1.2.3.3 example.com. 299 IN A 1.2.3.4
ОС используемая Петей выбирает 1.2.3.1, запоминает этот адрес, чтобы не обращаться лишний раз к DNS-серверу.
В результате дальнейшие обращения к этому сервису до тех пор, пока адрес не устареет в DNS-кэше ОС Пети будут блокироваться.
В случае если используется модуль интеграции с DNS-сервером для разблокировки частично заблокированных популярных ресурсов, а Петя использует DNS-сервер провайдера произойдёт следующее.
Carbon Reductor отрезолвит example.com, получит тот же ответ что и Петя:
;; ANSWER SECTION: example.com. 299 IN A 1.2.3.1 example.com. 299 IN A 1.2.3.3 example.com. 299 IN A 1.2.3.4
Т.к. 1.2.3.1 заблокирован, модуль создаст для example.com зону, например:
local-zone: "example.com" redirect local-data: "example.com A 1.2.3.3" local-data: "example.com A 1.2.3.4"
и применит её на DNS-сервере.
Далее, когда Петя обратиться к DNS-серверу чтобы узнать IP адрес example.com он получит ответ:
;; ANSWER SECTION: example.com. 299 IN A 1.2.3.3 example.com. 299 IN A 1.2.3.4
и не заметит проблем с доступом к этому ресурсу.
Когда этот модуль не поможет
В случае если ресурс заблокирован полностью - модуль не сможет подобрать для него незаблокированные адреса по причине того, что их просто нет.
Как тестировать
Включаем опцию menu->Reductor DPI X->Опции Carbon Reductor DPI X->"Разблокировать популярные сайты в обход требований Роскомнадзора".
Для разблокировки ресурса нужно добавить домены в файл:
/var/lib/reductor/lists/provider/domain_fakezone_safe.load
В обоих случаях запустите
/opt/fakezone/bin/main.sh
При возникновении ошибок - создайте заявку в хелпдеске и приложите полный вывод команды main.sh.
Защита от ошибок
В работе с unbound мы постарались минимизировать полное перепрочтение конфигурации DNS-сервера (reload). Сейчас оно будет вызываться только в следующих случаях:
- Первый запуск с новым DNS-сервером (или если пропадут файлы используемые для синхронизации - /var/lib/fakezone/block.cache и файлы зон, созданные Carbon Reductor DPI X)
- Необходима синхронизация (добавление и удаление) более 3000 доменов за раз.
- Произошла ошибка при выполнении команды синхронизации.
- Используются и изменились списки для частичной разблокировки популярных сервисов.
При сетевых сбоях во время синхронизации - она продолжит выполнение на DNS-сервере. Если выполнение будет прервано по какой-либо причине, ничего страшного - спустя 5 минут выполнение продолжится с того места, на котором закончилось.
Дублирующиеся зоны в Unbound
Если для одного домена создано несколько зон - это приведёт к ошибкам. На текущий момент защиты от этого в модуле нет. Это происходит когда для него создаётся зона двумя из трёх возможных способов:
- Для блокировки по домену
- Для избежания частичной блокировки
- Вручную администратором