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

Как настроить локальный преобразователь DNS с несвязанным в Ubuntu 22.04


На этой странице

  1. Предпосылки
  2. Установка несвязанного DNS-сервера
  3. Настройка Unbound в качестве локального DNS-сервера
    1. Базовая конфигурация
    2. Включить DNS-кэш
    3. Неограниченная конфиденциальность и безопасность
    4. Определение частной сети и списков контроля доступа (ACL)
    5. Настройка локального домена
    6. Независимая настройка и настройка производительности
    7. Настройка Unbound в качестве преобразователя DNS с DNS-over-TLS (DoT)

    1. Для рабочего стола Ubuntu
    2. Для универсального сервера Ubuntu

    Unbound — это бесплатное программное обеспечение DNS-сервера с открытым исходным кодом, которое можно использовать для проверки, рекурсии и кэширования преобразователей DNS. Это многофункциональный DNS-сервер, который поддерживает DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), минимизацию имени запроса, агрессивное использование кэша с проверкой DNSSEC и поддержку зон полномочий. Unbound ориентирован на конфиденциальность и безопасность DNS, но без ущерба для скорости и производительности.

    Unbound в первую очередь разработан NLnet Labs и распространяется под лицензией BSD и поддерживает современные функции на открытых стандартах DNS-сервера. Unbound прошел тщательный аудит и может работать на Linux, BSD и macOS. Unbound доступен для большинства этих ОС и может быть установлен через системный менеджер пакетов.

    В этом руководстве вы установите Unbound на сервер Ubuntu 22.04 и настроите его как локальный DNS-сервер с некоторыми включенными функциями, такими как DNSSEC, кеш DNS, локальные доменные имена и поддомены, а также DNS-over-TLS (DoT). ). Вы также настроите ведение журнала Unbound через Rsyslog и logrotate, а также настроите клиентский компьютер Ubuntu для проверки вашей установки Unbound.

    Предпосылки

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

    • Сервер Ubuntu 22.04. В этом примере используется сервер Ubuntu с именем хоста unbound-server и IP-адресом 192.168.5.100.
    • Пользователь без полномочий root с правами администратора sudo/root.

    Вот и все. Теперь вы готовы приступить к установке Unound.

    Установка несвязанного DNS-сервера

    По умолчанию репозиторий Ubuntu предоставляет пакет Unbound, который можно легко установить через APT. Прежде чем начать установку Unbound, введите следующую команду apt, чтобы обновить индекс пакетов Ubuntu.

    sudo apt update

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

    sudo apt info unbound

    На момент написания этой статьи репозиторий Ubuntu по умолчанию предоставляет Unbound 1.13.

    Затем установите Unbound, используя следующую команду apt. При появлении запроса введите y для подтверждения и нажмите ENTER для продолжения.

    sudo apt install unbound

    Вывод:

    После установки Unbound выполните приведенную ниже команду systemctl, чтобы проверить службу Unbound.

    sudo systemctl is-enabled unbound
    sudo systemctl status unbound

    Включенный вывод подтверждает, что Unbound включен и запускается автоматически при запуске системы. А вывод active (running) подтверждает, что Unbound работает.

    Настройка Unbound в качестве локального DNS-сервера

    Конфигурация Unbound по умолчанию находится в /etc/unbound/unbound.conf. На этом шаге вы измените основной файл конфигурации Unbound /etc/unbound/unbound.conf с помощью предпочитаемого вами редактора.

    Теперь вы узнаете о базовой конфигурации несвязанного DNS-сервера, включении DNS-кэша, настройке локальных доменных имен и поддоменов, настройке несвязанного DNS-преобразователя с включенным DoT (DNS-over-TLS).

    Базовая конфигурация

    Откройте файл конфигурации Unbound по умолчанию /etc/unbound/unbound.conf, используя предпочитаемый вами редактор. В этом примере используется nano для редактирования файла конфигурации /etc/unbound/unbound.conf.

    sudo nano /etc/unbound/unbound.conf

    Добавьте в файл следующие строки. Раздел сервера позволяет настроить базовые конфигурации Unbound. В этом примере вы запустите Unbound на локальном IP-адресе 192.168.5.100 с портом по умолчанию 53. Кроме того, вы настроите ведение журнала для сообщений Syslog и отключите IPv6. Наконец, вы настроите Unbound для рекурсивного запроса любого имени хоста с корневых DNS-серверов через файл корневых подсказок.

    #Adding DNS-Over-TLS support
    server:
        use-syslog: yes
        username: "unbound"
        directory: "/etc/unbound"
        tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt
        
        do-ip6: no
        interface: 192.168.5.100
        port: 53
        prefetch: yes

        root-hints: /usr/share/dns/root.hints
        harden-dnssec-stripped: yes

    Параметры детали:

    • use-syslog: включить запись сообщений системного журнала.
    • имя пользователя: запуск от имени несвязанного пользователя, который является пользователем по умолчанию.
    • каталог: рабочим каталогом по умолчанию для Unbound является каталог /etc/unbound.
    • tls-cert-bundle: сертификаты, используемые для аутентификации восходящих подключений. В дистрибутиве на основе Debian файл сертификата находится в /etc/ssl/certs/ca-certificates.crt.
    • do-ip6: используйте yes, чтобы запустить Unbound с IPv6, или set no, чтобы отключить IPv6.
    • interface: сетевой интерфейс или IP-адрес, который будет работать без привязки. Вы можете использовать IP-адрес или имя интерфейса, например eth0. Кроме того, вы можете работать в определенном порту, добавив такой формат [email .
    • порт: укажите порт, на котором будет работать Unbound, и этот порт будет обрабатывать клиентские подключения. Порт DNS по умолчанию — 53.
    • prefetch: установите значение yes, чтобы включить предварительную выборку записей кэша сообщений с почти истекшим сроком действия.
    • root-hints: файл, содержащий сведения о корневом DNS-сервере. Файл /usr/share/dns/root.hints предоставляется пакетом dns-root-data. А также можете скачать файл root-hints отсюда https://www.internic.net/domain/named.cache.
    • harden-dnssec-stripped: установите для него значение yes, чтобы защититься от получения данных, очищенных от dnssec.

    Включить DNS-кэш

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

        cache-max-ttl: 14400
        cache-min-ttl: 11000

    Параметры детали:

    • cache-max-ttl: TTL или время жизни для RRSets и сообщений в кеше DNS. Формат в секундах.
    • cache-min-ttl: минимальное время существования кэша. По умолчанию установлено значение 0, но вы можете изменить его на свое усмотрение, например, 11000 секунд. Не устанавливайте более 1 часа, иначе у вас возникнут проблемы из-за устаревших данных.

    Неограниченная конфиденциальность и безопасность

    Теперь вы можете добавить следующие строки, чтобы настроить базовую конфиденциальность и безопасность для Unbound.

        aggressive-nsec: yes
        hide-identity: yes
        hide-version: yes
        use-caps-for-id: yes

    Параметры детали:

    • aggressive-nsec: установите значение yes, чтобы разрешить агрессивному NSEC использовать цепочку DNSSEC NSEC для синтеза NXDOMAIN и других отказов. Посетите веб-страницу IETF о NSEC https://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html.
    • hide-identity: установите значение yes, чтобы отключить ответы на запросы привязки, касающиеся id.server или hostname.bind.
    • hide-version: установите значение yes, чтобы отключить запросы version.server и version.bind.
    • use-caps-for-id: установите значение yes, чтобы разрешить использование в запросе кодировки 0x100 для предотвращения попыток подделки.

    Определение частной сети и списков контроля доступа (ACL)

    Затем вам нужно определить частный адрес вашей сети и ACL (списки контроля доступа). Обязательно измените локальную подсеть в строках ниже на текущую сетевую среду.

        private-address: 192.168.0.0/16
        private-address: 192.168.5.0/24
        private-address: 169.254.0.0/16
        private-address: 172.16.0.0/12
        private-address: 10.0.0.0/8
        private-address: fd00::/8
        private-address: fe80::/10

        #control which clients are allowed to make (recursive) queries
        access-control: 127.0.0.1/32 allow_snoop
        access-control: ::1 allow_snoop
        access-control: 127.0.0.0/8 allow
        access-control: 192.168.5.0/24 allow

    Параметры детали:

    • частный адрес: определение подсетей частной сети в вашей инфраструктуре. Только частные домены и имена локальных данных могут иметь эти частные адреса.
    • управление доступом: определите управление доступом, при котором клиентам разрешено делать (рекурсивные) запросы к несвязанному серверу. Параметр allow включает рекурсию, а allow_snoop включает как рекурсию, так и нерекурсию.

    Настройка локального домена

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

    В этом примере будет создана зона для домена home.lan с типом static, затем вы создадите несколько поддоменов с помощью параметра local-data. Каждый субдомен будет указывать на определенный IP-адрес, а также вы будете создавать записи PTR с помощью параметра local-data-ptr.

        # local zone
        local-zone: "home.lan." static

        local-data: "firewall.home.lan.  IN A 10.0.0.1"
        local-data: "vault.home.lan.    IN A 10.0.0.2"
        local-data: "media.home.lan.   IN A 10.0.0.3"
        local-data: "docs.home.lan.       IN A 10.0.0.4"
        local-data: "wiki.home.lan.     IN A 10.0.0.5"

        local-data-ptr: "10.0.0.1  firewall.home.lan"
        local-data-ptr: "10.0.0.2  vault.home.lan"
        local-data-ptr: "10.0.0.3  media.home.lan"
        local-data-ptr: "10.0.0.4  docs.home.lan"
        local-data-ptr: "10.0.0.5  wiki.home.lan"

    Параметры детали:

    • local-zone: укажите здесь локальный домен.
    • local-data: определите запись для поддоменов и какой локальный IP-адрес будет разрешен.
    • local-data-ptr: определите запись ptr для ваших поддоменов.

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

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

        num-threads: 4
        msg-cache-slabs: 8
        rrset-cache-slabs: 8
        infra-cache-slabs: 8
        key-cache-slabs: 8
        rrset-cache-size: 256m
        msg-cache-size: 128m
        so-rcvbuf: 8m

    Параметры детали:

    • num-threads: количество потоков, которые будут созданы. Значение должно совпадать с ядрами процессора сервера.
    • msg-cache-slabs: количество блоков, используемых для кэширования сообщений. Установите значение 8, чтобы оптимизировать Unbound и использовать больше памяти для кэширования.
    • rrset-cache-slabs: количество блоков, используемых для кэша RRset. Установите значение 8, чтобы оптимизировать Unbound и использовать больше памяти для кэша RRSet.
    • infra-cache-slabs: количество блоков, используемых для кэша инфраструктуры. Установите значение 8, чтобы оптимизировать Unbound и использовать больше памяти для кэша инфраструктуры.
    • key-cache-slabs: количество блоков, используемых для кэша ключей. Установите значение 8, чтобы оптимизировать Unbound и использовать больше памяти для кэша ключей.
    • rrset-cache-size: укажите объем памяти для кэша RRSet. В этом примере используется 256 МБ, по умолчанию — только 4 МБ.
    • msg-cache-size: укажите объем памяти для кэша сообщений. В этом примере используется 128 МБ, по умолчанию — только 4 МБ.
    • so-rcvbuf: установите размер буфера для порта DNS 53/udp на 8 МБ. В системе Ubuntu вы также должны установить более высокое значение для параметра ядра net.core.rmem_max.

    Настройка Unbound в качестве DNS-преобразователя с DNS-over-TLS (DoT)

    Наконец, добавьте новый раздел forward-zone, чтобы настроить Unbound в качестве преобразователя DNS для ваших локальных сетей. В этом примере используются DNS-серверы Quad9 с включенным DoT (DNS-over-TLS).

    forward-zone:
        name: "."
        forward-ssl-upstream: yes
        ## Also add IBM IPv6 Quad9 over TLS
        forward-addr: #dns.quad9.net

    Параметры деталей:

    • forward-zone: определите зону пересылки для Unbound.
    • имя: установите \.\ для пересылки всех DNS-запросов.
    • forward-addr: используйте определенный сервер пересылки для пересылки всех DNS-запросов. В этом примере используется Quad9 DNS с включенным DNS-over-TLS (DoT).

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

    Запустите приведенную ниже проверку команды и проверьте конфигурацию Unbound. В случае успеха вы должны получить такой вывод, как unbound-checkconf: в /etc/unbound/unbound.conf ошибок нет.

    sudo unbound-checkconf

    Затем выполните приведенную ниже команду, чтобы увеличить net.core.rmem_max по умолчанию для вашей системы через файл /etc/sysctl.conf. Затем примените изменения с помощью команды sysctl.

    echo "net.core.rmem_max= 8388608" >> /etc/sysctl.conf
    sudo sysctl -p

    После этого запустите приведенную ниже команду systemctl, чтобы перезапустить службу Unbound и применить изменения.

    sudo systemctl restart unbound

    При этом служба Unbound должна работать с новой конфигурацией на IP-адресе 192.168.5.100 на порту 53.

    Проверьте список открытых портов в вашей системе с помощью команды ss ниже.

    ss -tulpn

    Вы получите вывод, подобный этому: порт DNS udp по умолчанию 53 используется службой Unbound.

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

    Настройка брандмауэра UFW

    В Ubuntu по умолчанию установлен брандмауэр UFW. Он установлен, но все еще неактивен. На этом шаге вы настроите брандмауэр UFW и откроете порт UDP для Unbound.

    Запустите приведенную ниже команду, чтобы открыть службу OpenSSH на UFW с помощью приведенной ниже команды. Затем вы можете добавить DNS-порт 53/udp в брандмауэр UFW.

    sudo ufw allow OpenSSH
    sudo ufw allow 53/udp

    Затем выполните приведенную ниже команду, чтобы запустить и включить службу брандмауэра UFW. При появлении запроса введите y для подтверждения и нажмите ENTER для продолжения.

    sudo ufw enable

    Выходной брандмауэр активен и включен при запуске системы, подтверждает, что брандмауэр UFW работает и включен, что означает, что брандмауэр UFW запустится автоматически при запуске системы.

    Вывод:

    Теперь запустите приведенную ниже команду ufw, чтобы проверить состояние брандмауэра UFW. Вы должны получить вывод о том, что статус UFW активен со службой OpenSSH и включенным портом DNS 53/udp.

    sudo ufw status

    Вывод:

    Настройка несвязанного журнала через Rsyslog и Logrotate

    После настройки брандмауэра UFW вы теперь настроите файл журнала для Unbound через rsyslog и logrotate. Служба rsyslog создаст специальный файл журнала для Unbound, а logrotate будет чередовать файл журнала Unbound через определенное время.

    Выполните приведенную ниже команду, чтобы добавить новую конфигурацию Rsyslog /etc/rsyslog.d/unbound.conf для службы Unbound. При этом журналы Unbound будут храниться в /var/log/unbound.log.

    cat <<EOF | sudo tee /etc/rsyslog.d/unbound.conf
    # Log messages generated by unbound application
    if $programname == 'unbound' then /var/log/unbound.log
    # stop processing it further
    & stop
    EOF

    Затем выполните приведенную ниже команду, чтобы добавить конфигурацию logrotate /etc/logrotate.d/unbound для службы Unbound. Это создаст ежедневную ротацию журнала для файла журнала Unbound /var/log/unbound.log.

    cat <<EOF | sudo tee /etc/logrotate.d/unbound
    /var/log/unbound.log {
      daily
      rotate 7
      missingok
      create 0640 root adm
      postrotate
        /usr/lib/rsyslog/rsyslog-rotate
      endscript
    }
    EOF

    Теперь запустите приведенную ниже команду systemctl, чтобы перезапустить службы Rsyslog и Logrotate. Это применит изменения, которые вы внесли в обе службы.

    sudo systemctl restart rsyslog logrotate

    Наконец, вы можете проверить файл журнала, перезапустив службу Unbound с помощью приведенной ниже команды.

    При этом сообщения, генерируемые службой Unbound в процессе перезапуска, будут храниться в файле журнала /var/log/unbound.log. Запустите команду cat, чтобы отобразить содержимое файла журнала /var/log/unbound.log.

    sudo systemctl restart unbound
    cat /var/log/unbound.log

    Вывод:

    Настройка DNS Resolver на клиенте

    Что касается клиентской стороны, вам необходимо настроить преобразователь DNS и использовать Unbound в качестве преобразователя по умолчанию в клиентской системе. Для дистрибутива Ubuntu вы можете использовать NetworkManager, сервис systemd-resolved или настроить статический файл для /etc/resolv.conf.

    На этом шаге вы узнаете, как настроить преобразователь DNS в Ubuntu Desktop и Ubuntu Server.

    Для рабочего стола Ubuntu

    Служба NetworkManager обрабатывает сеть по умолчанию для версии Ubuntu Desktop. Таким образом, вы можете легко настроить преобразователь DNS через NetworkManager, что можно сделать с помощью графического интерфейса командной строки или путем редактирования файла конфигурации для каждого сетевого интерфейса.

    Чтобы настроить преобразователь DNS через командную строку, вы можете использовать файл nmcli. Выполните приведенную ниже команду, чтобы настроить преобразователь DNS для определенного сетевого интерфейса. Вы можете заменить имя интерфейса eth0.

    sudo nmcli connection modify eth0 ipv4.dns "192.168.5.100"

    Каждый интерфейс, управляемый NetworkManager, имеет специальный файл конфигурации, который хранится в каталоге /etc/NetworkManager/system-connections в формате .nmconnection.

    Вы можете изменить конфигурацию интерфейса с помощью предпочитаемого вами текстового редактора и добавить следующие строки в раздел [ipv4].

    [ipv4]
    dns=192.168.5.100
    ignore-auto-dns=true
    never-default=true

    Если вы предпочитаете использовать приложение с графическим интерфейсом, откройте приложение NetworkManager на своем компьютере и отредактируйте имя интерфейса, которое вы хотите изменить. Перейдите на вкладку «Настройки IPv4» и введите свой локальный DNS-сервер. Затем нажмите Сохранить для подтверждения.

    Для универсального сервера Ubuntu

    Для обычных серверных машин Ubuntu сетевое взаимодействие обрабатывается с помощью netplan с серверной службой systemd-networkd. А для конфигурации преобразователя DNS используется systemd-networkd systemd-resolved. Таким образом, чтобы настроить преобразователь DNS на обычном сервере Ubuntu, вы можете сделать это с помощью службы systemd-resolved.

    Откройте файл конфигурации systemd-resolved с помощью предпочитаемого вами редактора. В этом примере используется редактор nano.

    sudo nano /etc/systemd/resolved.conf

    В разделе [Resolve] раскомментируйте параметр DNS и введите IP-адрес вашего локального DNS-сервера.

    [Resolve]
    DNS=192.168.5.100

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

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

    sudo systemctl restart systemd-resolved
    sudo resolvectl status

    В случае успеха вы должны увидеть такой вывод: преобразователь DNS по умолчанию изменен на IP-адрес несвязанного локального DNS-сервера 192.168.5.100.

    Тестирование несвязанного DNS-сервера

    Чтобы убедиться, что несвязанный DNS работает как преобразователь DNS, выполните приведенную ниже команду dig с клиентского компьютера Ubuntu. Параметр @192.168.5.100 гарантирует, что вы используете несвязанный DNS-сервер, работающий с IP-адресом 192.168.5.100.

    dig @192.168.5.100

    В случае успеха вы получите ответ от корневого DNS-сервера, как показано ниже. Кроме того, вы заметите флаг объявления (аутентичные данные) в выходных данных заголовка, что означает, что DNSSEC включен.

    Затем выполните приведенную ниже команду, чтобы убедиться, что клиенты могут получить доступ к доменным именам в Интернете.

    dig github.com
    dig duckduckgo.com

    В случае успеха вы должны получить DNS-запись выходных данных для доменов github.com и duckduckgo.com. Вы можете видеть, что DNS-преобразователь, который отвечает на запрос, — это 127.0.0.53#53, systemd-resolved, который использует Unbound в качестве преобразователя по умолчанию. Кроме того, вы можете увидеть время запроса для каждого запроса, время запроса к домену github.com — 1748, а к duckduckgo.com — 999.

    Вывод для github.com:

    Вывод для duckduckgo.com:

    Если вы повторно запустите команду dig сверху, время запроса должно сократиться. А это подтверждает, что ваши запросы были закэшированы, и кеш DNS работает.

    dig github.com
    dig duckduckgo.com

    Доступ к Github после сохранения кеша:

    Доступ к duckduckgo после сохранения кеша:

    Затем проверьте локальный домен или поддомен с помощью команды dig ниже. В случае успеха каждый субдомен будет указывать на правильный IP-адрес, настроенный в файле конфигурации Unbound /etc/unbound/unbound.conf.

    dig firewall.home.lan +short
    dig vault.home.lan +short
    dig media.home.lan +short

    Вывод:

    Теперь запустите приведенную ниже команду dig, чтобы убедиться, что записи PTR указывают на правильное доменное имя.

    dig -x 10.0.0.1 +short
    dig -x 10.0.0.2 +short
    dig -x 10.0.0.3 +short

    Вывод:

    Вы также можете проверить DoT (DNS через TLS) через tcpdump. Установите пакет tcpdump на свой сервер Unbound.

    sudo apt install tcpdump

    Введите y при появлении запроса и нажмите ENTER, чтобы продолжить.

    Теперь запустите приведенную ниже команду tcpdump для мониторинга трафика на интерфейсе eth0 с портом DoT 853. В этом примере несвязанный DNS работает на IP-адресе 192.168.5.100 с интерфейсом eth0.

    tcpdump -vv -x -X -s 1500 -i eth0 'port 853'

    Перейдите на клиентский компьютер и выполните приведенную ниже команду, чтобы получить доступ к внешним/интернет-доменным именам с помощью приведенной ниже команды dig.

    dig google.com

    Вывод:

    После этого вернитесь к серверу Unbound, и теперь вы должны получить вывод, аналогичный этому, на выходе tcpdump.

    Теперь вы установили и настроили локальный DNS-сервер через Unbound на сервере Ubuntu. Кроме того, вы настроили преобразователь DNS на настольных компьютерах и серверах Ubuntu через NetworkManager и systemd-resolved.

    Заключение

    В этом руководстве вы установили несвязанный локальный DNS-сервер на сервер Ubuntu 22.04. Вы включили кеш DNS, DNSSEC (включено по умолчанию), настроили частный адрес и списки ACL, добавили локальный домен через локальную зону, затем настроили Unbound как преобразователь DNS с DoT (DNS-over-TLS).

    Кроме того, вы настроили базовую конфиденциальность и безопасность DNS, оптимизировали Unbound и настроили журналы Unbound через rsyslog и logrotate.

    В конце этого руководства вы также узнали, как настроить преобразователь DNS на настольных компьютерах и серверах Ubuntu с помощью NetworkManager и systemd-resolved. А также изучил основы использования команды dig для проверки DNS-сервера.