Поиск по сайту:

Как запустить собственный DNS-сервер в локальной сети


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

Что такое DNS?

DNS — это система, которая переводит доменное имя, такое как example.com, в числовой IP-адрес своего сервера. Это может выглядеть как 127.0.0.1. Всякий раз, когда вы делаете сетевой запрос, используя доменное имя, ваша система будет выполнять поиск DNS, чтобы определить адрес сервера, к которому она должна обращаться.

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

Интернет-провайдеры обычно используют DNS-серверы. Вы, вероятно, полагаетесь на сервер своего интернет-провайдера, если используете настройки по умолчанию на своем маршрутизаторе и устройствах. Другие общедоступные DNS-серверы доступны у таких поставщиков, как Cloudflare и Google.

Зачем запускать собственный DNS?

Запуск собственного DNS-сервера дает вам больший контроль над вашей сетью. Одной из распространенных причин является возможность настроить сопоставление доменов на уровне сети, например, веб-сервер с 192.168.0.101. Настройка маршрутизатора на использование вашего DNS приведет к тому, что любое из ваших подключенных устройств сможет получить доступ к 192.168.0.101 через http://web-server.

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

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

DNS с Dnsmasq

Dnsmasq — это легкий DNS-сервер, который входит в состав большинства дистрибутивов Linux. Его также очень просто настроить.

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

Поток маршрутизации будет выглядеть следующим образом:

  • Сетевой маршрутизатор получает запрос от одного из ваших подключенных устройств. Маршрутизатор будет настроен на использование узла Dnsmasq в качестве DNS-сервера.
  • Dnsmasq проверит, есть ли определенный маршрут для доменного имени, например, от веб-сервера до 192.168.0.101. Если запрос был для http://web-server/example-page, он отправит 192.168.0.101 обратно на маршрутизатор.
  • Если у Dnsmasq нет соответствующего маршрута, он перенаправляет DNS-запрос на 8.8.8.8 Google, обеспечивая разрешение в общедоступном Интернете. Это гарантирует, что вы по-прежнему можете получить доступ к более широкому Интернету при использовании собственного DNS.

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

Начиная

Мы предполагаем, что у вас уже есть работающий Linux-компьютер, готовый разместить Dnsmasq. Dnsmasq не особенно требователен к ресурсам — если у вас мало клиентских устройств, он легко запустится на Raspberry Pi.

Вашему хосту должен быть назначен статический IP. Отсюда IP-адрес 192.168.0.1 относится к серверу Dnsmasq.

Убедитесь, что Dnsmasq установлен:

# Assuming a Debian system
apt update
apt install dnsmasq

Файл конфигурации Dnsmasq обычно находится в /etc/dnsmasq.conf. Это предварительно заполнено начальными настройками. Для эффективной работы Dnsmasq в сценарии локальной сети необходимо внести некоторые изменения. Запустите sudo nano /etc/dnsmasq.conf, чтобы открыть файл, затем используйте сочетание клавиш Ctrl+W, чтобы найти и раскомментировать следующие строки:

#domain-needed
#bogus-priv

Удалите символ # в начале каждой строки. Вот что позволяют эти настройки:

  • domain-needed — это не позволяет Dnsmasq пересылать локальные имена без части домена на вышестоящий DNS-сервер. В нашей установке это означает, что example.com будет иметь право на разрешение через Google, но example или веб-сервер не будет. Он резервирует имена без точек для вашей локальной сети.
  • bogus-priv — предотвращает перенаправление запросов обратного просмотра DNS на вышестоящий DNS-сервер. Это означает, что внутренние IP-адреса, такие как 192.168.0.101, никогда не будут доступны Google. Не включив эту функцию, вы можете непреднамеренно передать архитектуру вашей внутренней сети вышестоящему провайдеру.

Чтобы настроить вышестоящий DNS-сервер, добавьте новую строку в файл конфигурации:

server=8.8.8.8
server=4.4.4.4

Это указывает Dnsmasq перенаправлять неразрешенные запросы на 8.8.8.8. Если этот сервер недоступен, вместо него будет использоваться 4.4.4.4. Эти адреса являются первичными и вторичными резолверами для службы DNS Google.

Затем настройте размер кэша. По умолчанию это относительно низкое значение — 150 кэшированных запросов. Увеличение этого параметра позволит Dnsmasq обслуживать больше запросов из кеша, уменьшая задержку в сети. Найдите строку cache-size, раскомментируйте ее и измените ее значение:

cache-size=1000

Сохраните и закройте файл сейчас.

Сопоставление имен хостов с IP-адресами

Существует несколько различных способов сопоставления имен хостов с их IP-адресами. Самый простой способ — добавить записи в существующий файл /etc/hosts вашего сервера. Dnsmasq автоматически загружает правила из этого файла как часть конфигурации по умолчанию.

Откройте /etc/hosts и добавьте маршруты в конец файла. Первым идет IP-адрес, за которым следует имя для назначения:

192.168.0.101 web-server
192.168.0.105 gateway.lan

Эти строки означают, что любой запрос к http://web-server будет направлен на 192.168.0.101, а http://gateway.lan будет заканчиваются на 192.168.0.5. Сохраните и закройте файл, когда закончите сопоставление устройств.

Тестирование вашего сервера

Перезапустите Dnsmasq, чтобы применить все ваши изменения:

sudo service dnsmasq restart

Проверьте правильность работы сервера:

sudo service dnsmasq status

Вы должны увидеть, что active (running) отображается зеленым цветом. Если вы этого не сделаете, проверьте строки журнала в нижней части информации о состоянии, чтобы выяснить, что не так.

Теперь вы готовы протестировать свой сервер. Вы можете сделать попытку поиска DNS вручную с помощью инструмента dig. Возможно, вам потребуется сначала установить пакет dnsutils.

dig google.com @localhost
dig gateway.lan @localhost

Обе эти команды должны отображать IP-адрес в разделе ОТВЕТ. В случае gateway.lan результат должен быть 192.168.0.5 в соответствии с правилом маршрутизации, установленным в /etc/hosts. Часть команд @localhost указывает dig запросить ваш локальный DNS-сервер.

Настройка вашей сети

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

Как только вы найдете правильную страницу настроек, установите IP-адрес вашего сервера (192.168.0.1 в этом руководстве) в качестве основного DNS-сервера маршрутизатора. Рекомендуется настроить общедоступного поставщика DNS, например 8.8.8.8 от Google, в качестве вторичного сервера. Это гарантирует, что у вас все еще будет доступ в Интернет, если ваш DNS-сервер выйдет из строя и отключится.

Теперь все устройства, подключенные к вашему маршрутизатору, будут делать DNS-запросы через ваш экземпляр Dnsmasq. Они смогут получить доступ к вашим устройствам по присвоенным им именам, таким как web-server и gateway.lan, а также воспользоваться кэшированием DNS на сетевом уровне.

Заключение

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

Dnsmasq обычно не требует большого ручного вмешательства, когда он запущен. Вы можете отслеживать журналы, используя service dnsmasq status или systemctl status dnsmasq. Теперь вы готовы воспользоваться собственным DNS-сервером, максимально повышающим производительность и позволяющим использовать внутренние доменные имена для доступа к устройствам в локальной сети.