Как настроить локальный DNS-сервер на Linux?

Если у вашего домашнего или офисного интернет-провайдера медленные серверы имен или ваш сервер выполняет много операций поиска, то вам нужен локальный кеширующий DNS-сервер.

Как мне поможет локальный DNS-сервер?

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

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

Наконец, утилита systemd-resolved поддерживает самые последние, безопасные стандарты DNS DNSSEC и DNSoverTLS или DoT. Они помогают защитить вас и сохранить вашу конфиденциальность в Интернете.

Какой локальный кеширующий DNQS мы будем использовать?

Локальный кеширующий DNS-сервер, который мы включим и настроим в этом руководстве, это systemd-resolved. Данный инструмент является частью Systemd набора инструментов управления системой. Если ваша система использует systemd, и почти все основные дистрибутивы Linux используются, то у вас уже будет установлен systemd-resolved, но он не будет работать. Большинство дистрибутивов не используют systemd-resolved, даже если он присутствует.

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

1. Как проверить, используете ли вы уже systemd-resolved?

В некоторых дистрибутивах Linux по умолчанию уже используется systemd-resolved, например Ubuntu 19.04.

Если вы уже запустили systemd-resolved, вам не нужно включать его или настраивать систему для его использования. Однако вам может потребоваться убедиться, что инструменты управления сетью, такие как NetworkManager, настроены правильно, поскольку они могут игнорировать конфигурацию сети системы.

Прежде чем перейти к следующему разделу, выполните следующую команду, чтобы проверить, запущен ли уже systemd-resolved:

$ resolvectl status

Если вы получили сообщение:

$ resolvectl status
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

Вы не используете systemd-resolved и должны перейти к следующему разделу. Если вместо этого вы видите вывод, который начинается примерно так:

Global
       LLMNR setting: yes
MulticastDNS setting: yes
  DNSOverTLS setting: opportunistic
      DNSSEC setting: allow-downgrade
    DNSSEC supported: no
  Current DNS Server: 1.1.1.1
         DNS Servers: 1.1.1.1
                      1.0.0.1

Тогда вы уже используете systemd-resolved и вам не нужно его включать.

2. Включение и настройка systemd-resolved

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

Запустите следующую команду в терминале от имени пользователя sudo для запуска systemd-resolved:

$ sudo systemctl start systemd-resolved.service

Затем выполните следующую команду, чтобы запустить systemd-resolved при загрузке системы:

$ sudo systemctl enable systemd-resolved.service

Последний оставленный элемент конфигурации - это настройка DNS-серверов, которые systemd-resolved будет запрашивать разрешенные домены. Здесь много вариантов, но любая из следующих пар бесплатна, быстра, и они обе поддерживают DNSSEC и DoT:

Google Public DNS

  • 8.8.8.8
  • 8.8.4.4

Cloudflare Public DNS

  • 1.1.1.1
  • 1.0.0.1

Откройте основной файл конфигурации с разрешением systemd в вашем любимом текстовом редакторе, здесь я использовал nano:

$ sudo nano /etc/systemd/resolved.conf

Измените строку начинающуюся с:

#DNS=

Уберите комментарий со строки и вставьте желаемый Public DNS из списка выше. В моем случае я выберу Cloudflare Public DNS.

DNS=1.1.1.1 1.0.0.1

Сохраните и выйдите из текстового редактора. Теперь нам нужно перезапустить systemd-resolved, чтобы он начал использовать серверы имен:

$ sudo systemctl restart systemd-resolved.service

systemd-resolved теперь запущен и готов начать обработке и защите DNS-запросов, как только мы настроим систему для ее использования.

Конфигурация системы для использования systemd-resolved

Ваша система может быть настроена несколькими способами для использования systemd-resolved, но мы рассмотрим две конфигурации, которые покрывают большинство случаев использования. Первые два режима системного разрешения сосредоточены вокруг того, как управляется содержимое этого файла. В рекомендуемом режиме /etc/resolv.conf делается символическая ссылка на /run/systemd/resolve/stub-resolv.conf.

Этот файл управляется systemd-resolved и, следовательно, systemd-resolved управляет информацией о конфигурации DNS для всех других программ в системе.я - это рекомендуемая конфигурация, а вторая - конфигурация совместимости. Разница между ними заключается в том, как файл /etc/resolv.conf управляется.

Два режима системного разрешения сосредоточены вокруг того, как управляется содержимое этого файла. В рекомендуемом режиме /etc/resolv.conf делается символическая ссылка на /run/systemd/resolve/stub-resolv.conf. Этот файл управляется systemd-resolved и, следовательно, systemd-resolved управляет информацией о конфигурации DNS для всех других программ в системе.

Это может вызвать проблемы, когда другие программы пытаются управлять содержимым /etc/resolv.conf. Режим совместимости оставляет /etc/resolv.conf на месте, позволяя другим программам управлять им, в то время как systemd-resolved использует эту информацию DNS. В этом режиме другие программы, управляющие /etc/resolv.conf, должны быть настроены для установки 127.0.0.53 в качестве системного сервера имен в /etc/resolv.conf.

Настройка рекомендуемого режима

Сначала удалите или переименуйте существующий файл /etc/resolv.conf. Переименование является лучшим вариантом, поскольку оно будет иметь тот же эффект, но вы всегда можете обратиться к оригиналу, если вам нужна содержащаяся в нем информация. Здесь мы переименовываем /etc/resolv.conf с помощью команды mv:

$ sudo mv /etc/resolv.conf /etc/resolv.conf.original

Затем создайте символическую ссылку:

$ sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Наконец, перезапустите systemd-resolved:

$ sudo systemctl restart systemd-resolved.service

Настройка режима совместимости

В этом режиме вам нужно убедиться, что локальный сервер имен, запущенный systemd-resolved запущен системными службами. Откройте /etc/resolv.conf в текстовом редакторе. Я использую редактор nano:

$ sudo nano /etc/resolv.conf

Удалите все встречающиеся строки, начинающиеся с «nameserver», и добавьте эту строку:

nameserver 127.0.0.53

3. Отладка systemd-resolved

Узнать, как именно ваша система выполняет DNS-запросы после внесения этих изменений, может быть сложно. Самый эффективный способ наблюдения за происходящим - перевести systemd-resolved в режим отладки и посмотреть файл журнала.

systemd-resolved - это служба systemd, что означает, что ее можно легко перевести в режим отладки, создав файл службы, содержащий параметр отладки. Следующая команда создаст правильный файл в правильном месте:

$ sudo systemctl edit systemd-resolved.service

Вставьте следующие строки в редактор, затем сохраните и выйдите:

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

Служба с разрешением systemd будет автоматически перезагружена при успешном сохранении и выходе.

Откройте второй терминал на том же сервере и просмотрите журнал journald для службы с разрешением systemd:

$ sudo journalctl -f -u systemd-resolved

Строка, которая начинается с «Using DNS server», например:

Using DNS server 1.1.1.1 for transaction 19995.

Сообщает вам, какой именно DNS-сервер используется для DNS-запросов. В этом случае DNS-сервер Cloudflare на 1.1.1.1 был запрошен.

Строки «Cache miss» указывают на то, что доменное имя не было кэшировано. Например:

Cache miss for example.com IN SOA

Строки, начинающиеся с «Positive cache hit», например:

Positive cache hit for example.com IN A

Укажите, что systemd-resolved ранее запрашивал этот домен, и ответ был получен из кэша в локальной памяти.

Вы должны отключить режим отладки, когда вы закончите работать с systemd-resolved, так как он создаст очень большой файл журнала в загруженной системе. Вы можете отключить ведение журнала отладки, выполнив:

$ sudo systemctl edit systemd-resolved.service

4. Использование безопасных DNS-запросов

systemd-resolved - это один из немногих доступных в настоящее время DNS-серверов, которые поддерживают DNSSEC и DNSoverTLS. Оба из них помогают гарантировать, что вы получаете подлинную информацию DNS (DNSSEC) и что никто не может отслеживать ваш трафик DNS, когда он проходит через Интернет. (DOT).

Эти параметры легко включить, открыв основной файл конфигурации systemd-resolved в текстовом редакторе:

$ sudo nano /etc/systemd/resolved.conf

И редактируем файл так, чтобы были установлены следующие две строки:

DNSSEC=allow-downgrade
DNSOverTLS=opportunistic

Сохраните и выйдите из редактора, затем перезагрузите systemd-resolved:

$ sudo systemctl restart systemd-resolved.service

Пока на DNS-сервере вы установили поддержку DNSSEC и DoT, ваши DNS-запросы будут защищены. Оба публичных DNS-сервера Google и Cloudflare поддерживают эти протоколы.

Заключение

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