пятница, 22 декабря 2023 г.

Установка локального сервера кеширования DNS на Linux

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

Установка локального сервера кеширования DNS на Linux

Как кэширующий DNS-сервер может пригодиться?

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

Эта идея может показаться бесполезной. Подумаешь, какие-то там секунды. Но если DNS сервера провайдера тратят много времени на разрешение имени, то в результате падает скорость Интернет серфинга. Например, домашняя страница новостного канала MSNBC для корректной работы обращается более чем к 100 уникальным доменам. Даже если на запрос тратится одна десятая секунды, в итоге получается 10 секунд ожидания, что по нынешним меркам слишком много.

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

И наконец, system-resolved поддерживает новейшие стандарты вроде DNSSEC и DNSoverTLS или DoT. Эти технологии увеличивают безопасность при работе в Интренет.


Какой локальный кэширующий сервер выбрать?

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

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


Как проверить используется ли systemd-resolved?

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

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

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

$ resolvectl status

Если в ответ получите сообщение ниже, значит в системе не настроен systemd-resolved:

$ 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

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

$ sudo systemctl start systemd-resolved.service

Далее нужно ввести следующую команду, чтобы добавить службу в автозапуск.

$ sudo systemctl enable systemd-resolved.service

И наконец нужно прописать DNS сервера, куда будет обращаться локальный сервер для разрешения имен. Есть много разных сервисов, но приведённые ниже самые быстрые, бесплатные и оба поддерживают 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-resolved любым текстовым редактором:

$ sudo nano /etc/systemd/resolved.conf

Отредактируйте строку, которая начинается на:

#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

Есть несколько путей настройки системы на использование локального DNS сервера. Мы рассмотрим два наиболее используемых метода. Первый – рекомендуемый метод, второй конфигурация в режиме совместимости. Разница в том, как будет обрабатываться файл /etc/resolv.conf.

В файле /etc/resolv.conf содержатся IP адреса серверов разрешения имен, которые используются программами. Программы при необходимости разрешения доменного имени обращаются к этому файлу в поисках адресов серверов разрешения имен.

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

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


Конфигурация в рекомендуемом режиме

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

.
$ 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

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

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

$ sudo nano /etc/resolv.conf

Удалите все строки, которые содержать ключевое слово nameserver и добавьте одну единственную строку:

nameserver 127.0.0.53

Этот файл мажет быть изменён любой программой. Чтобы предотвратить это нужно настроить программы так, чтобы в качестве DNS они использовали адрес 127.0.0.53.


Отладка systemd-resolved

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

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

$ sudo systemctl edit systemd-resolved.service

Вставьте в файл следующие строки:

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

После этого служба systemd-resolved автоматический перезапуститься. Откройте второй терминал и просмотрите логи в journald:

$ sudo journalctl -f -u systemd-resolved

Строка, которая содержит слова “Using DNS server” показывает, какой DNS сервер используется для разрешения имён. В нашем случае это DNS сервера Cloudflare

Using DNS server 1.1.1.1 for transaction 19995.

Слова “Cache miss” в начале строки означает, что для данного домена нет закэшированной информации:

Cache miss for example.com IN SOA

И наконец слова “Positive cache” в начале строки означает, что systemd-resolved уже запрашивал информацию об этом домене и теперь ответы возвращает из кэша:

Positive cache hit for example.com IN A

Не забудьте отключить режим отладки, так как в это время создается большой файл логов. Сделать это можно командой:

$ sudo systemctl edit systemd-resolved.service

а затем удалить добавленные выше две строки.


Использование защищенных DNS запросов

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

Эти функции легко включаются редактированием основного конфигурационного файла system-resolved:

$ sudo nano /etc/systemd/resolved.conf

Измените файл следующим образом:

DNSSEC=allow-downgrade
DNSOverTLS=opportunistic

Сохраните изменения и перезапустите службу systemd-resolved.

$ sudo systemctl restart systemd-resolved.service

Пока прописанные DNS сервера поддерживают эти две функции все DNS запросы будут защищены. DNS сервера Google и CloudFlare поддерживают эти механизмы защиты.


Заключение

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

Комментариев нет:

Отправить комментарий