Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Cloud DNS
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Зоны
      • Создать внутреннюю зону DNS
      • Создать публичную зону DNS
      • Изменить зону DNS
      • Удалить зону DNS
    • Записи
      • Создать запись
      • Изменить запись
      • Удалить запись
  • Концепции
    • Обзор
    • Зоны DNS
    • Ресурсные записи
    • Интеграция с Compute Cloud
    • Квоты и лимиты
  • Практические руководства
    • Настройка локального кеширующего DNS-резолвера
    • Миграция DNS-зон из Яндекс 360
    • Интеграция с корпоративным сервисом DNS
    • Настройка Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Создание веб-хука резолвера ACME для ответов на DNS01-проверки
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • DnsZoneService
      • OperationService
    • REST (англ.)
      • Overview
      • DnsZone
        • Overview
        • create
        • delete
        • get
        • getRecordSet
        • list
        • listAccessBindings
        • listOperations
        • listRecordSets
        • setAccessBindings
        • update
        • updateAccessBindings
        • updateRecordSets
        • upsertRecordSets
  • Вопросы и ответы
  1. Практические руководства
  2. Настройка локального кеширующего DNS-резолвера

Настройка локального кеширующего DNS-резолвера

Статья создана
Yandex Cloud
  • systemd-resolved в Ubuntu 18.04+
    • Проверка работоспособности
    • Замена на альтернативный резолвер
  • Альтернативные резолверы

Не используйте Yandex Cloud DNS напрямую для запроса внешних доменных имён.

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

Если на виртуальной машине установлена операционная система Ubuntu версии 18.04 LTS или выше, то
в ней по умолчанию уже используется кеширующий резолвер systemd-resolved, и дополнительных действий
по установке и настройке не требуется. Подробнее см. в разделе systemd-resolved.

Если на виртуальной машине используется более старая версия Ubuntu, например, 16.04 LTS —
кеширующий DNS-резолвер нужно установить самостоятельно. Мы рекомендуем использовать dnsmasq
или unbound. Подробнее см. в разделе Альтернативные резолверы.

systemd-resolved в Ubuntu 18.04+

Проверка работоспособности

Состояние кеширующего DNS-резолвера systemd-resolved в Ubuntu 18.04+ можно узнать, выполнив команду:

systemd-resolve --status

Результат выполнения команды:

<...>
Link 2 (eth0)
  <...>
  Current DNS Server: 192.168.6.2         
         DNS Servers: 192.168.6.2         
          DNS Domain: ru-central1.internal
                      auto.internal 

При корректной конфигурации, в выводе команды в строке Current DNS Server: будет указан адрес сервера
Yandex Cloud DNS — второй адрес в виртуальной сети. Например, 192.168.6.2 для ВМ
в подсети 192.168.6.0/24.

С помощью утилиты dig вы можете убедиться, что внешние DNS-имена успешно резолвятся DNS-сервером 127.0.0.53#53.
При этом все резолвы внешнего DNS-имени, кроме самого первого, выполняются практически мгновенно:

dig example.com
<...>
;; Query time: 69 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
<...>
   
dig example.com
<...>
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
<...>

Замена на альтернативный резолвер

Если требуется заменить systemd-resolved на другой локальный кеширующий DNS-резолвер:

  1. Установите альтернативный резолвер по инструкции из раздела Альтернативные резолверы.

  2. Отредактируйте конфигурационный файл /etc/systemd/resolved.conf, чтобы выключить stub-резолвер
    и указать 127.0.0.1 в качестве адреса DNS-сервера:

    [Resolve]
    <...>
    DNS=127.0.0.1
    DNSStubListener=no
    
  3. Перезапустите сервис systemd-resolved:

    systemctl restart systemd-resolved
    
  4. Проверьте, что dig теперь использует сервер 127.0.0.1#53, а не 127.0.0.53#53:

    dig example.com
    

    Результат:

    <...>
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    <...>
    

Альтернативные резолверы

Важно

Параметры конфигурации приведены для примера. Как настроить кеширующий резолвер с учетом нагрузки на ВМ и ваших потребностей см. в документации выбранного резолвера.

dnsmasq
unbound

dnsmasq — легковесный и нетребовательный к ресурсам кеширующий DNS-резолвер.

  1. Установите пакеты dnsmasq и dnsutils:

    sudo apt-get update -y
    
    sudo apt-get install dnsmasq dnsutils -y
    
  2. Отредактируйте конфигурационный файл /etc/dnsmasq.conf, увеличив размер кэша до 1000
    и ограничив локальной машиной адреса, которые слушает кеширующий резолвер:

    cache-size=1000
    listen-address=127.0.0.1
    interface=lo
    bind-interfaces
    
  3. Перезапустите сервис dnsmasq, чтобы применить новые настройки. Проверьте, что статус сервиса
    dnsmasq сменился на active (running), а в конце лога сервиса присутствует строка Started dnsmasq.service:

    sudo systemctl restart dnsmasq.service
    
    sudo systemctl status dnsmasq.service
    ● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
    Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
    Active: active (running) <...>
    <...>
    Oct 28 22:39:57 <...> systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
    Oct 28 22:39:57 <...> dnsmasq[<...>]: dnsmasq: syntax check OK.
    Oct 28 22:39:57 <...> dnsmasq[<...>]: started, version 2.75 cachesize 150
    <...>
    Oct 28 22:39:58 <...> dnsmasq[<...>]: using nameserver 192.168.6.2#53
    Oct 28 22:39:58 <...> systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
    

    Также обратите внимание на адрес в строке using nameserver <...>. Там должен находиться адрес сервера
    Yandex Cloud DNS — второй адрес в виртуальной сети. Например, 192.168.6.2 для ВМ
    в подсети 192.168.6.0/24.

  4. С помощью утилиты dig проверьте, что внешние DNS-имена успешно резолвятся:

    $ dig example.com @127.0.0.1 | grep -B3 Query
    ;; ANSWER SECTION:
    example.com.		65420	IN	A	93.184.216.34
    ;; Query time: 3 msec
    
    $ dig example.com @127.0.0.1 | grep -B3 Query
    ;; ANSWER SECTION:
    example.com.		65420	IN	A	93.184.216.34
    ;; Query time: 0 msec
    

unbound — валидирующий рекурсивный кеширующий DNS-резолвер с акцентом на производительности, экономном потреблении ресурсов и соответствии современным открытым стандартам.

  1. Установите пакеты unbound и dnsutils:

    sudo apt-get update -y
    
    sudo apt-get install unbound dnsutils -y
    
  2. Укажите настройки сервера в конце глобального конфигурационного файла /etc/unbound/unbound.conf
    или в отдельном конфигурационном файле с именем /etc/unbound/unbound.conf.d/<имя файла>.conf:

    server:
        port: 53
        interface: 127.0.0.1
        access-control: 127.0.0.0/8 allow
        do-ip4: yes
        do-ip6: no
        do-udp: yes
        do-tcp: yes
        num-threads: 2
        num-queries-per-thread: 1024
        hide-identity: yes
        hide-version: yes
        prefetch: yes
        verbosity: 1
    
  3. Запустите сервис unbound, чтобы применить новые настройки. Проверьте, что статус сервиса
    unbound стал active (running), а в конце лога сервиса присутствует строка Started unbound.service:

    sudo systemctl start unbound.service
      
    sudo systemctl status unbound.service
    ● unbound.service - Unbound DNS server
    Loaded: loaded (/lib/systemd/system/unbound.service; enabled; vendor preset: enabled)
    Active: active (running) <...>
    <...>
    Oct 29 00:21:06 <...> unbound[<...>]:  * Starting DNS server unbound
    Oct 29 00:21:06 <...> unbound[<...>]: [<...>:0] info: start of service (unbound 1.5.8).
    Oct 29 00:21:06 <...> unbound[<...>]:    ...done.
    Oct 29 00:23:21 <...> systemd[1]: Started unbound.service.
    
  4. С помощью утилиты dig проверьте, что внешние DNS-имена успешно резолвятся:

    dig example.com @127.0.0.1 | grep -B3 Query
    ;; ANSWER SECTION:
    example.com.		86400	IN	A	93.184.216.34
    ;; Query time: 611 msec
    
    dig example.com @127.0.0.1 | grep -B3 Query
    ;; ANSWER SECTION:
    example.com.		86397	IN	A	93.184.216.34
    ;; Query time: 0 msec
    

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • systemd-resolved в Ubuntu 18.04+
  • Проверка работоспособности
  • Замена на альтернативный резолвер
  • Альтернативные резолверы