Как сделать свой dns сервер

Обновлено: 07.07.2024

Для начала давайте кратко ознакомимся с тем, что такое DNS и SmartDNS.

DNS – распределенная система, получающая информацию о доменах (названиях сайта), а именно - конвертирует, сопоставляет IP-адреса доменного имени с доменным именем. Работает примерно следующим образом: пользователь вводит название домена в браузере, DNS сопоставляет домен с присвоенным ему IP-адресом и затем возвращает браузеру ответ и направляет его к хостингу.

SmartDNS proxy – DNS сервис, который кроме стандартной функции DNS выполняет дополнительные функции, такие как подмена части DNS запроса. С помощью данной подмены осуществляется разблокировка сайтов.

В большинстве случаев SmartDNS используется в качестве решения для доступа к геозаблокированным сайтам, т.е. тем сайтам, которые доступны только для определенных стран и не заблокированы на уровне провайдера. SmartDNS не шифрует запросы.

Установка SmartDNS от ab77 / netflix-proxy

На GitHub можно найти большое количество интересных решений для различных задач. Одним из таких решения является SmartDNS от пользователя ab77, с названием проекта netflix-proxy.

netflix-proxy – это smart DNS-прокси необходимый для потоковой передачи Netflix, Hulu, HBO Now и других за пределами региона. Он развертывается с использованием контейнеров Docker и использует dnsmasq и sniproxy для предоставления услуг SmartDNS. Работает для некоторых заблокированных сайтов, таких как PornHub и YouTube.

Список сайтов для разблокировки можно изменить и дополнить.

Преимущество этого решения по сравнению с другими открытыми SmartDNS решениями состоит в том, что данное решение предоставляет доступ только для авторизованных IP-адресов (клиентов).

Универсальный способ установки на серверах Ubuntu и Debian (копируем одной командой):

Примечание: Для некоторых популярных хостинг-провайдеров установка может несколько отличаться. Ознакомьтесь с детальной инструкцией на сайте проекта.

Настройка SmartDNS от ab77 / netflix-proxy

По окончанию установки SmartDNS в терминале будет отображена ссылка с внешним IP-адресом сервера и его портом, а также данные учетной записи администратора для управления SmartDNS. По данной ссылке вы можете добавить или удалить IP-адреса клиентов, добавить динамический DNS для динамического IP-адреса.

Важная информация

Итак, установка завершена, мы получили данные для авторизации.


Копируем полученную ссылку и авторизуемся в учетной записи администратора.

В опции Add IP добавляем наш или клиента IP-адреса и при необходимости в опции DynDNS добавляем домен динамического IP-адреса.


Список сайтов для разблокировки расположен в файле

Данный список можно отредактировать на свой, а затем обновить командой:

SmartDNS proxy через OpenVPN

В первую очередь данное решение стоит рассматривать в качестве решения для выборочной разблокировки сайтов. Сейчас все больше сайтов используют Cloudflare в качестве DNS сервера своего домена, что делает невозможным его разблокировку по IP-адресу. В таком случае гораздо удобнее будет разблокировка с помощью SmartDNS, но обернутая в OpenVPN. Кроме того, OpenVPN использует шифрование, а это значит, что провайдер не увидит ваши сетевые запросы и соответственно не сможет их заблокировать.

Такое решение еще удобно тем, что позволяет в одном конфигурационном файле OpenVPN задействовать второй сервер для разблокировки. Например, такие сайты как Вконтакте, Яндекс мы можем пустить непосредственно с сервера OpenVPN, расположенного в РФ, а в нем указать использование нашего SmartDNS сервера, который будет разблокировать сайты для РФ.

Установка и настройка OpenVPN описана в нашей статье: Создаём собственный VPN сервис за 5 минут. Там же описана настройка для выборочной разблокировки. Далее мы дополним настройку.

В созданный конфигурационный файл server.conf добавляем следующие изменения:

Где xxx. это наш SmartDNS сервер. Первая строчка будет создана и в ней мы заменим DNS сервер на свой, а вторую строчку добавим самостоятельно.


Важно: В настройках учетной записи администратора SmartDNS не забудьте добавить IP-адрес сервера OpenVPN. Так как сервер OpenVPN будет являться клиентом для SmartDNS, то перед установкой OpenVPN сервера отключите поддержку IPV6 на сервере.

Бесплатный SmartDNS через OpenVPN сервер

В качестве теста предлагаю протестировать OpenVPN конфигурационный файл, в котором популярные российские сервисы работают через маршрутизацию OpenVPN, а некоторые другие сайты (например seasonvar) через SmartDNS.

В данной статье я опишу, как поднять свой DNS сервер на арендованном VDS/VPS с помощью пакета BIND.

Причины, по которым нам нужен свой DNS сервер, могут быть самые разнообразные, но в большинстве случаев, это просто облегчает работу со множеством доменов. И согласитесь, приятно видеть в сервисе Whois свои нейм сервера.

Хочу обратить ваше внимание на то, что в данном примере рассматривается как поднять оба NS на одном виртуальном сервере. Два NS необходимы в большинстве случаев, чтобы зарегистрировать домен, так как не все регистраторы позволяют проводить регистрацию с указанием одной записи или вообще без нее.
Так же скажу, что для обеспечения надежной работы, стоит задуматься о том, чтобы расположить ваши DNS сервера на разных виртуальных серверах и желательно в разных дата центрах. Это позволит продолжить работу вашего сайта без каких-либо задержек в случае падения одного из серверов.

Для того чтобы было понятно, как происходит установка, возьмем вымышленные исходные данные:

Установка BIND

Прежде всего, нам необходимо установить на сервер сам пакет BIND, а для этого нужно подсоединится к нашему VDS.

Тут есть два варианта в зависимости от того, какой ОС вы пользуетесь на своем персональном компьютере.

В linux системах все довольно просто. Нужно перейти в основной панели на вкладку Places — Connect to Server. в Service type выбрать SSH соединение, ввести адрес вашего сервера, ваш логин, нажать кнопку «connect». В появившемся окошке ввести свой пароль и… вы уже в терминале операционной системы своего VDS.

Итак, мы попали в терминал VDS. Чтобы установить последнюю версию пакета BIND, нужно ввести команду:

yum install bind

Жмем «Enter» и ждем успешного завершения установки.

Создание данных зоны

Следующим шагом на нашем пути будет создание данных для зоны.

Для корректной настройки DNS под BIND данные разбиваются на несколько файлов. Один из них содержит отображения имен узлов в адреса, остальные — отображения адресов обратно в имена. Поиск адреса для имени принято называть прямым отображением, а поиск имени по адресу — обратным отображением.

Приступим непосредственно к созданию файлов.

Начнем с конфигурационного файла. Чтобы создать его, вводим в терминале VDS команду

Файл настройки содержит строки, которые определяют каталог с файлами данных зоны.
Обычно файлы настройки содержат строку, определяющую каталог, в котором расположены файлы данных зоны. Эти строки будут иметь вид:

options <
directory "/var/named/";
dump-file "/var/run/named_dump.bd";
statistics-file "/var/run/named.stats";
>;

Далее идет описание каждого файла данных зоны, которые необходимо использовать. Строка начинается со слова zone, за ним следует доменное имя и имя класса (in — класс интернета.) В BIND 8 и 9 класс интернета устанавливается по умолчанию, и поэтому нет необходимости указывать класс для него. Тип master указывает на то, что наш DNS сервер будет первичным. В последнем поле содержится имя файла данных зоны.

zone "mydomain.com" IN <
type master;
file "db.mydomain.com";
>;

Данная строка файла настройки предписывает чтение файла корневых указателей:

zone "." <
type hint;
file "db.cache";
>;

Этот файл не содержит данные кэша, а только указатели (hints) корневых DNS-серверов, о чем будет сказано ниже.

В целом конфигурационный файл будет иметь следующий вид:

options <
directory "/var/named/";
dump-file "/var/run/named_dump.bd";
statistics-file "/var/run/named.stats";
>;

zone "mydomain.com" IN <
type master;
file "db.mydomain.com";
>;

zone "130.197.91.IN-ADDR.ARPA." IN <
type master;
file "db.91.197.130.";
>;

zone "0.0.127.IN-ADDR.ARPA." IN <
type master;
file "db.127.0.0";
>;

zone "." <
type hint;
file "db.cache";
>;

Вводим в терминале

Теперь приступим к редактированию файла.

В самом начале следует установить стандартное значение времени жизни TTL. DNS сервер передает указанное значение TTL в ответах на запросы, что позволяет другим серверам имен кешировать полученные данные на указанный период. Если данные изменяются редко, то будет разумно выставить интервал обновления в несколько дней, но не больше недели. Если же данные изменяются часто, то можно выставить интервал в один час, но желательно не меньше, так как из-за более коротких интервалов будет создаваться большой объем DNS трафика.

Для того, чтобы указать стандартное значение, нужно воспользоваться директивой $TTL. Для данного примера возьмем за стандартное значение 3 часа (3h). Первая строчка будет выглядеть так:

Теперь необходимо указать SOA- запись. Она должна находиться в каждом из файлов данных зоны. Она показывает, что наш DNS-сервер является самым надежным источником информации в пределах этой зоны.
Важно знать! В файле данных зоны может быть записана одна и только одна SOA-запись.

SOA-запись для данного примера будет иметь вид:

Порядковый номер относится ко всем данным в пределах зоны и указывает на количество обновлений. Когда вторичный DNS сервер подключается к первичному, в первую очередь он сверяет порядковый номер. Если номер первичного больше, то вторичный сервер обновляет свои данные.

Следующие четыре поля определяют различные временные интервалы, и не стоит забывать, что по умолчанию значения указываются в секундах.

Обновление (refresh)
Интервал обновления инструктирует вторичный DNS-сервер, с какой частотой следует проверять актуальность информации для зоны. Установленные в данном примере 3 часа будут создавать весьма большую нагрузку на первичный сервер, так что при редком обновлении файлов зоны вторичного сервера стоит установить интервал хотя бы в 24 часа.

Повторение попытки (retry)
Если вторичный сервер не может подключиться к первичному (который вполне возможно уже не работает), он повторяет попытки через равные интервалы времени, указанные данным значением.

Устаревание (expire)
Если вторичный DNS сервер не может соединиться с первичным в течении указанного периода, данные на нем устаревают. Устаревшие данные зоны говорят о том, что информация уже не актуальна и не стоит ее больше использовать. Имеет смысл устанавливать значения устаревания намного большие, чем интервал обновления (от недели до месяца), иначе они будут устаревать еще до того, как успеют обновиться.
Отрицательное TTL

TTL — это время жизни (time to live). Это значение относится ко всем отрицательным ответам DNS-серверов, авторитативных для данной зоны.

Документом RFC 1537 рекомендуются следующие значения для DNS серверов высшего уровня:
Обновление 24 hours
Повторение попытки 2 hours
Устаревание 30 days
Стандартное TTL 4 days

Следующие записи называются NS записями, они также добавляются к каждому файлу данных.
Поскольку для корректной регистрации и поддержки доменов необходимы минимум две NS записи, то так и пропишем:

Теперь наши записи указывают на то, что для нашей DNS зоны существует якобы два различных DNS сервера. Для правильной работы NS записей необходимо указать IP адреса, на которых установлены сервера. Делается это с помощью A записей:

И редактируем данные как в предыдущем файле.
Сначала прописываем TTL и SOA запись.

Далее NS записи:

А теперь указываем PTR записи — они служат для отображения имен, соответствующих IP адресам. Для данного примера записи будут выглядеть следующим образом:

Вот наш файл и готов.

Упрощаем код

Теперь самое время рассказать о сокращениях записей, которые помогут более быстро редактировать файлы данных зоны.

Вернемся к нашему конфигурационному файлу. Поле директивы zone определяет доменное имя. Это имя является суффиксом по умолчанию (origin) для всей информации в файлах данных зоны. Суффикс по умолчанию добавляется в конец всех имен, которые не заканчиваются точкой (Помните я говорил о том, что не следует забывать ставить точку в конце имен). Так как каждый файл отвечает за свою зону, то и суффиксы по умолчанию в каждом файле свои.

Исходя из данного принципа сокращений, можно упростить код следующим образом:

ns1 IN A 91.197.130.49

Если доменное имя совпадает с суффиксом по умолчанию, его можно указывать в виде «@». Обычно такая запись используется в SOA-записях. Например:

Кроме того если записи (начинающиеся в первой позиции строки) состоят из пробелов или символа табуляции, то автоматически подставляется имя из предыдущей записи. Эту функцию можно использовать при создании нескольких записей для одного имени:

Таким сокращением можно пользоваться даже при создании различных типов записей для одного имени.

ns1 IN A 91.197.130.49
ns2 IN A 91.197.130.63

Поздравляю! Мы закончили настройку нашего DNS сервера с двумя записями NS.

Для запуска и остановки сервера необходимо использовать следующие команды в терминале:

/etc/init.d/nammed start
/etc/init.d/nammed stop
/etc/init.d/nammed restart

Для тестирования серверов существует очень полезная программка — nslookup.

DNS (Domain Name System, Система Доменных имен) – система, позволяющая преобразовать доменное имя в IP-адрес сервера и наоборот.

DNS-сервер – это сетевая служба, которая обеспечивает и поддерживает работу DNS. Служба DNS-сервера не требовательна к ресурсам машины. Если не подразумевается настройка иных ролей и служб на целевой машине, то минимальной конфигурации будет вполне достаточно.

Настройка сетевого адаптера для DNS-сервера

Установка DNS-сервера предполагает наличие доменной зоны, поэтому необходимо создать частную сеть в личном кабинете и подключить к ней виртуальные машины.

После того, как машина будет присоединена к двум сетям, важно не перепутать, какое из подключений требует настройки. Первичный сетевой адаптер настроен автоматически с самого начала, через него открыт доступ к интернету, в то время как на дополнительно подключенных сетевых адаптерах доступа в интернет нет, пока не будет произведена ручная настройка:


Наведя курсор на значок сети в системном трее, можно вызвать всплывающую подсказку с краткими сведениями о сетях. Из примера выше видно, что присоединённая сеть это Network 3.

Далее предстоит проделать цепочку действий:

  • Нажать правой клавишей мыши Пуск, в выпадающем меню выбрать пункт Сетевые подключения;
  • Правой кнопкой мыши нажать на необходимый сетевой адаптер, в меню выбрать Свойства;
  • В окне свойств выбрать IPv4 и нажать на кнопку Свойства;
  • Заполнить соответствующие поля необходимыми данными:


Здесь в качестве предпочитаемого DNS-сервера машина назначена сама себе, альтернативным назначен dns.google [8.8.8.8].

Установка роли DNS-сервера

Для установки дополнительных ролей на сервер используется Мастер Добавления Ролей и Компонентов, который можно найти в Диспетчере Сервера.

На верхней навигационной панели Диспетчера сервера справа откройте меню Управление, выберите опцию Добавить Роли и Компоненты:


Откроется окно Мастера, в котором рекомендуют убедиться что:

1. Учётная запись администратора защищена надёжным паролем.

2. Настроены сетевые параметры, такие как статические IP-адреса.

3. Установлены новейшие обновления безопасности из центра обновления Windows.

Убедившись, что все условия выполнены, нажимайте Далее;

Выберите Установку ролей и компонентов и нажмите Далее:


Выберите необходимый сервер из пула серверов и нажмите Далее:


Отметьте чек-боксом роль DNS-сервер и перейдите Далее:


Проверьте список компонентов для установки, подтвердите нажатием кнопки Добавить компоненты:


Оставьте список компонентов без изменений, нажмите Далее:


Прочитайте информацию и нажмите Далее:


В последний раз проверьте конфигурацию установки и подтвердите решение нажатием кнопки Установить:


Финальное окно Мастера сообщит, что установка прошла успешно, Мастер установки можно закрыть:


Создание зон прямого и обратного просмотра

Доменная зона — совокупность доменных имён в пределах конкретного домена.

Зоны прямого просмотра предназначены для сопоставления доменного имени с IP-адресом.

Зоны обратного просмотра работают в противоположную сторону и сопоставляют IP-адрес с доменным именем.

Создание зон и управление ими осуществляется при помощи Диспетчера DNS.

Перейти к нему можно в правой части верхней навигационной панели, выбрав меню Средства и в выпадающем списке пункт DNS:


Создание зоны прямого просмотра

  • Выделите каталог Зоны Прямого Просмотра, запустите Мастер Создания Новой Зоны с помощью кнопки Новая зона на панели инструментов сверху:


  • Откроется окно Мастера с приветствием, нажмите Далее:


  • Из предложенных вариантов выберите Основная зона и перейдите Далее:



  • При необходимости поменяйте название будущего файла зоны и перейдите Далее:


  • Выберите, разрешить динамические обновления или нет. Разрешать не рекомендуется в силу значимой уязвимости. Перейдите Далее:


  • Проверьте правильность выбранной конфигурации и завершите настройку, нажав кнопку Готово:


Создание зоны обратного просмотра

  • Выделите в Диспетчере DNS каталог Зоны Обратного Просмотра и нажатием кнопки Новая зона на панели инструментов сверху запустите Мастер Создания Новой Зоны:



  • Выберите назначение для адресов IPv4, нажмите Далее:


  • Укажите идентификатор сети (первые три октета сетевого адреса) и следуйте Далее:


  • При необходимости поменяйте название будущего файла зоны и перейдите Далее:


  • Выберите, разрешить динамические обновления или нет. Разрешать не рекомендуется в силу значимой уязвимости. Перейдите Далее:


  • Проверьте правильность выбранной конфигурации и завершите настройку, нажав кнопку Готово:


Создание A-записи

Данный раздел инструкции в большей степени предназначен для проверки ранее проделанных шагов.

Ресурсная запись — единица хранения и передачи информации в DNS, заключает в себе сведения о соответствии какого-либо имени с определёнными служебными данными.

Запись A — запись, позволяющая по доменному имени узнать IP-адрес.

Запись PTR — запись, обратная A записи.

  • В Диспетчере DNS выберите каталог созданной ранее зоны внутри каталога Зон Прямого Просмотра. В правой части Диспетчера, где отображается содержимое каталогов, правой кнопки мыши вызовите выпадающее меню и запустите команду "Создать узел (A или AAAA). ":


  • Откроется окно создания Нового Узла, где понадобится вписать в соответствующие поля имя узла (без доменной части, в качестве доменной части используется название настраиваемой зоны) и IP-адрес. Здесь же имеется чек-бокс Создать соответствующую PTR-запись — чтобы проверить работу обеих зон (прямой и обратной), чек-бокс должен быть активирован:


Если поле имени остается пустым, указанный адрес будет связан с именем доменной зоны.

  • Также можно добавить записи для других серверов:


Проверка

  • Проверьте изменения в каталогах обеих зон (на примере ниже в обеих зонах появилось по 2 новых записи):



  • Откройте командную строку (cmd) или PowerShell и запустите команду nslookup:


  • Запрос по домену;
  • Запрос по IP-адресу:


В примере получены подходящие ответы по обоим запросам.


В дополнение к имени домена и адресам появилась строчка «Non-authoritative answer», это значит, что наш DNS-сервер не обладает необходимой полнотой информации по запрашиваемой зоне, а информация выведенная ниже, хоть и получена от авторитетного сервера, но сама в таком случае не является авторитетной.

Для сравнения все те же запросы выполнены на сервере, где не были настроены прямая и обратная зоны:


Здесь машина сама себе назначена предпочитаемым DNS-сервером. Доменное имя DNS-сервера отображается как неопознанное, поскольку нигде нет ресурсных записей для IP-адреса (10.0.1.7). По этой же причине запрос 2 возвращает ошибку (Non-existent domain).

Создаем собственный фильтрующий DNS-сервер на базе Pi-hole

Современный интернет таит множество угроз, и каждый администратор задумывается о фильтрации контента отдаваемого пользователям. Однако многое из того, что хорошо работало раньше стало сейчас неактуальным, основная причина этого - массовый переход на защищённые соединения, которые не дают возможности просматривать трафик пользователя в промежуточных узлах. Поэтому в новых условиях следует применять новые подходы, наиболее эффективным методом на сегодняшний день является фильтрация DNS-запросов. И именно этим мы и займемся.

Применение фильтрующих DNS-серверов получило широкое распространение в последние годы, существует множество сервисов, преимущественно платных, предоставляющих возможность фильтрации запросов по определенным правилам. Обычно это блокировка рекламы, вредоносных сайтов и сайтов с нежелательным содержимым. Также пользователь может добавлять собственные фильтры. Но используя подобные сервисы следует понимать, что они могут собирать и использовать ваши запросы в собственных целях, например, для показа таргетированной рекламы. Особенно это касается бесплатных служб.

Установка Pi-hole

Pi-hole обладает достаточно скромными системными требованиями и, как можно предположить из названия, изначально предполагалась к установке на Raspberry Pi, это возможно и сегодня. Кроме того, поддерживается гораздо более широкий набор платформ, включая Docker. Из интересующих нас это Ubuntu 16.x / 18.x / 20.x архитектуры ARM / x86_64 и Debian 9 / 10 архитектуры ARM / x86_64 / i386. Из требований от 2 ГБ свободного пространства (рекомендуется 4 ГБ) и от 512 МБ ОЗУ.

Перед установкой поднимем права до суперпользователя командой:

Затем обновим список пакетов и выполним апгрейд системы:

И установим, если это не было сделано ранее, пакет curl:

Также обязательно настройте на вашем сервере статический IP-адрес. В последних версиях Ubuntu для этого следует использовать netplan.

Выполнив все предварительные настройки приступим к установке Pi-hole:

Данная команда скачает и запустит скрипт установки, после чего вы увидите псевдографический инсталлятор, который последовательно проведет вас через все этапы установки продукта. Сначала вам потребуется указать сетевой интерфейс, на котором DNS-сервер будет принимать запросы, будьте внимательны и указывайте только внутренние интерфейсы.

Pi-hole-001.jpg

Затем укажите желаемого DNS-провайдера, который будете использовать в качестве вышестоящего сервера, в списке присутствуют основные публичные DNS-сервера, но после установки вы всегда сможете изменить эти настройки, в т.ч. указав собственные адреса.

Pi-hole-002.jpg

Затем предлагается выбрать списки для блокировки рекламы (основное назначение Pi-hole по задумке разработчиков), в настоящий момент доступен только один список.

Pi-hole-003.jpg

Соглашаемся с установкой веб-интерфейса:

Pi-hole-005.jpg

Разрешаем ведение лога запросов:

Pi-hole-006.jpg

И выбираем уровень приватности. Доступны несколько значений: от полного логирования (уровень 0), до полной анонимности (уровень 3). Так как у нас сервер будет обслуживать собственную сеть и нам надо видеть кто, куда, зачем и почему - то ставим нулевой уровень.

Pi-hole-007.jpg

После окончания работы инсталлятора установим пароль для веб-интерфейса:

Командный интерфейс Pi-hole достаточно информативный и наглядно показывает результат той или иной операции.

Затем включим пользователя веб-сервера в группу pihole:

На этом установку можно считать законченной.

Начало работы с Pi-hole

Pi-hole-009.jpg

Начнем с раздела Settings, где расположены общие настройки сервера. Вкладка System содержит информацию о системе, кнопки для ее выключения и перезагрузки, выключения и очистки логов, перезагрузки DNS-сервера и очистки сетевой таблицы, куда помещаются MAC-адреса клиентских устройств.

Pi-hole-010.jpg

На вкладке DNS можно изменить настройки вышестоящих DNS-серверов, мы можем как выбрать их из списка, так и указать собственные. В списке каждой ячейке соответствует один сервер, а сами ячейки соответствуют основному и дополнительному DNS, если подвести мышку - то появится всплывающая подсказка с адресом сервера. Ниже расположены дополнительные опции, они достаточно хорошо документированы прямо в интерфейсе, и мы не видим смысла дополнительно приводить их описание.

Pi-hole-011.jpg

Так как Pi-hole содержит под капотом хорошо известный нашим читателям dnsmasq, то кроме функции DNS-сервера он может также выступать DHCP-сервером вашей сети. По умолчанию DHCP-сервер выключен, вы можете включить и настроить его на одноименной вкладке, запутаться там определенно негде, настройки не сложнее чем в бытовом роутере.

Pi-hole-012.jpg

И наконец на вкладке Teleporter можно выполнить резервное копирование и восстановление сервера, причем восстановление можно производить выборочно, например, восстановить только определенные списки или записи.

Pi-hole-013.jpg

Если вы будете использовать Pi-hole в качестве основного DNS-сервера сети, то в разделе Local DNS можно добавлять собственные записи типа A или CNAME, после добавления не забывайте перезапустить DNS-сервер.

Pi-hole-014.jpg

Теперь перейдем к основному назначению нашего сервера - фильтрации. В ее основе лежат списки, это - основная ценность данных систем, для качественной фильтрации списки должны быть актуальными и своевременно обновляться. Ознакомиться с подключенными списками можно в разделе Group Managment - Adlists, по умолчанию там подключен только один список, от разработчиков. Однако, прежде чем браться за фильтрацию, мы советуем отключить все списки и проверить работу сервера в обычном режиме, убедившись, что все работает как надо.

Pi-hole-015.jpg

Затем можно включить список и оценить результат. Рекламы на страницах практически не станет, в этом плане список достаточно эффективный и его одного будет вполне достаточно. Но вы можете подключить и другие списки. Их в достатке можно найти на просторах сети, существуют даже сборники таких листов: pihole-ads-list. Чтобы добавить лист достаточно внести в соответствующее поле его адрес, также не забывайте давать осмысленные комментарии. Но лист - это всего лишь адрес, чтобы начать работу его содержимое нужно получить и добавить в базу данных Pi-hole. Пока это не сделано - напротив листа будет стоять серый кружок со знаком вопроса, у загруженных листов стоит зеленая галочка.

Pi-hole-016.jpg

Для обновления следует либо выполнить в консоли команду:

Либо перейти в раздел Tools - Update Gravity и нажать кнопку Update.

Pi-hole-017.jpg

Для обновления самого Pi-hole следует выполнить консольную команду:

Делать это можно даже из-под обычной учетной записи, в этом случае будет запрошен пароль sudo и повышение прав произойдет автоматически.

Разделяй и властвуй - создаем и настраиваем списки

После того, как сделаны базовые настройки и подключены первые списки обязательно встает вопрос о выборочном применении фильтрации. Следует понимать, что Pi-hole фильтрует DNS-запросы и мы не можем, как в популярных браузерных плагинах, настроить выборочный показ рекламы для определенных доменов, всё чем мы можем оперировать - это доменное имя и адрес источника. Но и это дает многое.

Прежде всего определимся с политикой по умолчанию, у Pi-hole имеется встроенная группа Default в которую попадают все клиенты, которые явно не отнесены к другим группам. Затем следует выделить отдельные узлы и распределить их по группам. Для этого перейдем в Group Managment - Groups и создадим сами группы, ничего сложного там нет, указываем имя группы и описание (по желанию). Затем перейдем в Group Managment - Clients и выберем нужный адрес из выпадающего списка. Для того, чтобы клиент попал в этот список он должен сделать хотя бы один запрос через наш сервер. Также его можно очистить кнопкой Flush network table в Settings - System.

Pi-hole-019.jpg

Затем внизу, в списке уже добавленных клиентов, в поле Group assignment укажите членство в желаемых группах. Возможен множественный выбор.

Pi-hole-020.jpg

Также вы можете просто указать MAC или IP-адрес клиента, имя хоста, подсеть или интерфейс. Например, если у вас подключено несколько сетевых карт, то можно явно указать, что все запросы от клиентов с eth0 попадают в одну группу, а запросы с eth1 в другую. Затем перейдем к подключенным спискам и точно также укажем для каких групп они применяются.

Pi-hole-021.jpg

Кроме списков в Adlists можно вести собственные белые и черные списки, расположенные в разделах Whitelist и Blacklist соответственно, кроме того, все добавленные в эти списки домены будут отображаться в Group Managment - Domains, где ими можно также управлять. Это открывает широкие возможности по фильтрации не только рекламы, но и любого интернет содержимого.

Допустим, мы хотим заблокировать соцсети для определенной группы клиентов. Для этого создадим отдельную группу BlockSocial и поместим в нее нужных клиентов. После чего перейдем в раздел Group Managment - Domain management и добавим в черный список - Add to Blacklist - адреса социальных сетей, которые мы хотим заблокировать, при этом не забудьте поставить флаг Add domain as wildcard, в этом случае запись будет добавлена в виде регулярного выражения, включающего как домен, так и все его поддомены. Для созданной записи сразу указываем группы, к которым она будет применяться.

Pi-hole-022.jpg

Точно также мы можем добавить домены в белый список, который будет исключать их из блокировки вне зависимости от наличия в списках. Добавить домены в списки вы можете также в разделах Whitelist и Blacklist, но для того, чтобы назначить их группам вам все равно придется вернуться в Domain management, поэтому лучше все действия изначально выполнять здесь.

Добавили, проверяем. Как видим, все отлично работает.

Pi-hole-023.jpg

На что следует обратить внимание? Все добавляемые записи могут быть двух типов: Regex - регулярное выражение и Exact - точное совпадение. Для составления и проверки первых советуем воспользоваться специальными сервисами, один из которых Regex101.

Следующий важный момент - наложение списков. Один клиент может одновременно входить в несколько групп и к каждой группе могут быть привязаны различные списки. Каким образом будет происходить фильтрация? В этом случае будет выполнено несколько комбинаций, которые мы перечислим по возрастанию приоритета. Сначала для каждой группы клиента будут получены списки Adlists и объединены, затем они будут дополнены черными списками для каждой группы, а потом к ним будут применены исключения из сопоставленных с группами белых списков. На первый взгляд вроде бы несложно, но мы не советуем делать сложных пересечений, потому как можно получить совершенно неожиданный результат для совершенно неожиданной группы клиентов.

Не только лишь все - доступ по белому списку

Мы уже неоднократно говорили, что современные сайты - это весьма сложные программные комплексы, которые могут подгружать необходимые для своего функционирования ресурсы со сторонних узлов, чаще всего это скрипты, стили, шрифты, изображения и т.д. и т.п. Но в наших реалиях есть ряд сценариев когда доступ к сети следует ограничить строго определенным списком сайтов и Боже упаси, если проверка сумеет выйти за пределы этого списка. Такая политика, например, действует во многих учебных заведениях. Pi-hole и здесь сможет помочь.

Прежде всего заведем отдельную группу, которая будет выходить только по белому списку, при этом помним, что Pi-hole позволяет включать пользователей в группы по входящему интерфейсу, что в данном случае очень удобно - любое устройство, подключенное к определенной сети, автоматически попадет под ограничения.

Затем перейдем в Group Managment - Domain management и на закладке RegEx filter в поле Regular Expression поставим символ * (звездочка), добавим эту запись в черный список и назначим ее созданной группе. После этого для всех участников этой группы будут блокироваться все DNS-запросы, фактически мы отключили ее от глобальной сети.

Разрешенные домены добавляем в белый список и привязываем к этой же группе.

Pi-hole-024.jpg

Но не все сайты будут нормально работать в таком режиме. Где-то поедет верстка, где-то пропадет важная функциональность. В этом случае нужно выявить связанные ресурсы и также добавить их в белый список. Например, на нашем сайте используется внешняя система комментариев Disqus, чтобы разблокировать ее перейдем в Query Log и внимательно изучим лог запросов, в котором обязательно обнаружатся связанные с интересующим нас узлом записи. Прямо отсюда добавляем их в белый лист, проверяем работу сайта и снова изучаем лог, последовательно разрешая связанные ресурсы до тех пор, пока сайт не начнет работать так, как нам надо.

Pi-hole-025.jpg

Работа эта достаточно кропотливая и трудоемкая, но большинство связанных ресурсов находится на крупных международных хостингах и проделав весь труд для одного сайта, вы, скорее всего, получите удовлетворительный результат и для остальных. Но затраченные усилия непременно отобьются - фактически вы получите непробиваемую защиту, ни один пользователь не сможет пройти дальше белого списка.

Заключение

Как мы могли убедиться, Pi-hole это гораздо больше, чем просто блокировка рекламы. Фактически вам в руки попадает удобный и мощный фильтрующий DNS-сервер, который можно использовать в самых различных сценариях управления доступом к сети интернет, включая самые жесткие. Управлять всем этим полноценно можно из удобной веб-панели, что позволяет значительно снизить порог входа для освоения продукта и не требовать от оператора обязательного знания Linux-систем. В тоже время под капотом находятся понятные и привычные инструменты, а следовательно, опытный администратор будет иметь полный контроль над собственной системой.

Настроить DNS сервера на VDS, VPS сервере можно несколькими способами. Более того, если провайдер не ограничил вас в способах настройки DNS, то вы, как владелец сервера с правами root, можете настроить DNS сервера на VDS/VPS сервере, несколькими способами.

Что такое DNS, кратко

Поэтому, чтобы ваш сайт нашли в Интернет по вашему домену, его нужно привязать к DNS серверам. На VDS/VPS серверах это можно сделать любым из возможных способах, существующих в Интернет.

Привязываем домен с помощью DNS серверов провайдера

Этот способ привязки домена проходит у любого провайдера. Нужно посмотреть адреса DNS серверов провайдера VDS и вписать их у регистратора имен во вкладке «Управление DNS». Так же можно привязать доменное имя к DNS серверам регистратора имен.

nastroyka-dns-5

Ваш сервер VDS/VPS имеет свой уникальный IP адрес. Раз IP уникален, то и свои домены к нему можно привязать. Делается это у регистратора имен. Сначала свой домен прикрепляете к серверам регистратора, а потом во вкладке «Управление DNS зоной», создаете три записи: [@], [www], и [*], типа А.

настроить DNS сервера на VDS/VPS сервере

Создаем свои DNS сервера

Выделенный сервер тем и хорош, что вы можете выполнять на нем любые необходимые операции.

Mожно настроить DNS сервера на VDS/VPS сервере на свои, вновь созданные, DNS сервера. Для этого нужен любой домен, можно тот домен, на который вы ставите WordPress. Каждый DNS сервер создается на отдельном IP адресе. Один IP адрес у вас есть и он является главным. На главном IP адресе сервера создаем первичный DNS сервер (ns1). Одного DNS сервера будет не достаточно, поэтому для создания вторичного DNS (ns2) нужно приобрести у провайдера еще один IP адрес. Созданные DNS сервера (ns1 и ns2) используются для всех доменов, создаваемых на сервере VDS.

Создать свои DNS сервера лучше до создания и установки сайтов на сервере.Чтобы создать свои DNS сервера в панели ISP, во вкладке «Домены» выделяем нужный домен и открываем «Записи» домена. Делаем две новые записи типа «А», привязывая ns1 и ns2 к конкретным IP адресам.

nastroyka-dns-1

nastroyka-dns-2

Созданные DNS сервера можно использовать для всех доменов сервера.

настроить DNS сервера на VDS/VPS сервере

После изменения адресов ns1 и ns2 в типах записи NS (сервер имен), нужно поменять адреса NS серверов у вашего регистратора имен.


Привязываем домен, используя сторонние DNS сервера

Если вас беспокоит, что ваши DNS сервера лежат на вашем же сервере VDS, то прикрепите домен к сторонним DNS серверам. Самое простое, прикрепить домен к DNS серверам регистратора. Сложнее, «припарковаться» к специальному сервису Яндекс.

DNS-Yandex

Читайте также: