Как установить и настроить частный DNS-сервер BIND в Ubuntu 22.04?

DNS (система доменных имен) — это фундаментальная сетевая служба, с которой должен быть знаком каждый администратор Linux и инженер DevOps. DNS — это «телефонная книга Интернета», которая разрешает IP-адреса, такие как полные 198.51.100.11доменные имена (полные доменные имена), такие как cherryservers.com. DNS-пакет BIND (Berkeley Internet Name Domain) — это де-факто реализация DNS-сервера для систем *nix. В результате понимание того, как использовать BIND DNS, является важным инструментом в наборе инструментов администратора Linux. BIND можно настроить как общедоступный (с выходом в Интернет) или частный (внутри внутренней сети) DNS-сервер.

Чтобы помочь вам познакомиться с этим популярным программным пакетом DNS, в этой статье объясняется, как установить и настроить частный DNS-сервер BIND в Ubuntu 22.04.

#Что такое BIND DNS?

BIND — это полнофункциональный масштабируемый программный пакет с открытым исходным кодом для служб DNS. Название BIND происходит от того факта, что он был первоначально разработан в Калифорнийском университете в Беркли. Сегодня BIND поддерживается ISC (Internet Systsems Consortium), и вы можете загрузить подписанные копии BIND 9 со страницы загрузки ISC .

Текущая реализация BIND 9. Пока существовал проект BIND 10, ISC прекратил разработку над ним в 2014 году . Сегодня проект BIND 10 стал проектом DNS-сервера Bundy, который сейчас находится в спящем режиме .

Большинство DNS-серверов в Интернете используют BIND 9 , и он является основным продуктом в средах * nix. Для администраторов Linux BIND 9 — это надежное решение DNS для различных вариантов использования, включающее поддержку TSIG (подпись транзакции), DNSSEC и IPv6.

Как установить и настроить частный DNS-сервер BIND в Ubuntu 22.04

Теперь давайте углубимся в настройку частного DNS-сервера BIND в Ubuntu 22.04. В нашем примере мы настроим один DNS-сервер и два клиента.

Для наших примеров мы предположим:

  • Наша подсеть LAN 192.168.2.0/24
  • IP-адрес нашего DNS-сервера ( bindserver‘s) — 192.168.2.2.
  • IP-адрес нашего первого клиента ( client1) — 192.168.2.3.
  • IP-адрес нашего второго клиента ( client2) — 192.168.2.4.
  • Наш доменcherry.example

Измените значения нашего примера, чтобы они соответствовали значениям вашей тестовой среды.

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

Предпосылки

Прежде чем мы начнем, вам понадобятся:

  • Доступ к терминалу трех систем Linux в одной локальной сети (локальной сети), который вы можете использовать для тестирования. Мы будем использовать Ubuntu 22.04 LTS.
  • Привилегии root/sudo

Установите последние обновления

Прежде чем мы установим какие-либо пакеты, мы сначала загрузим и установим последние обновления с помощью команд apt updateи apt upgradeна всех трех системах:

Bash
apt update -y && apt upgrade -y

Обратите внимание, что &&гарантирует, что apt upgradeвыполняется только в случае apt updateуспеха.

Установите BIND 9 на DNS-сервер

Далее мы собираемся установить три пакета на наш DNS-сервер:

  • bind9— Программное обеспечение DNS-сервера BIND 9.
  • bind9utils— Утилиты, облегчающие работу с BIND 9.
  • bind9-doc— Пакет документации для BIND 9.

Чтобы установить эти пакеты, используйте эту команду:

Bash
apt install bind9 bind9utils bind9-doc -y

После установки служба BIND 9 должна быть запущена. Вы можете проверить статус с помощью этой команды:

Bash
systemctl status bind9

Вы должны увидеть вывод, похожий на:

● named.service - BIND Domain Name Server
     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-06-22 06:32:18 MSK; 1 day 10h ago
       Docs: man:named(8)
    Process: 1389208 ExecStart=/usr/sbin/named $OPTIONS (code=exited, status=0/SUCCESS)
   Main PID: 1389210 (named)
      Tasks: 10 (limit: 9264)
     Memory: 733.4M
        CPU: 2min 24.819s
     CGroup: /system.slice/named.service
             └─1389210 /usr/sbin/named -u bind

Отредактируйте файл named.conf.options.

Этот named.confфайл является основным файлом конфигурации BIND 9. Этот основной файл содержит ссылку на то, /etc/bind/named.conf.optionsгде мы можем указать параметры, необходимые для нашей конфигурации. Мы внесем в /etc/bind/named.conf.optionsфайл четыре модификации:

  • Директива acl, определяющая нашу локальную сеть (LAN).
  • Директива allow-query, определяющая, какие IP-адреса могут отправлять DNS-запросы на сервер.
  • Директива forwarders, определяющая, на какие DNS-серверы этот сервер будет пересылать рекурсивные запросы.
  • Директива recursion, разрешающая рекурсивные DNS-запросы к серверу.

Чтобы внести эти изменения, откройте /etc/bind/named.conf.optionsв текстовом редакторе (например, nanoили vim) и измените файлы, чтобы они выглядели примерно так:

Bash
// allow only LAN traffic from 192.168.2.0-192.168.2.255
acl LAN {
192.168.2.0/24;
};
options {
        directory "/var/cache/bind"; // default directory
        allow-query { localhost; LAN; }; // allow queries from localhost and 192.168.2.0-192.168.2.255
        forwarders { 1.1.1.1; }; // use CloudFlare 1.1.1.1 DNS as a forwarder
        recursion yes;  // allow recursive queries
};

После внесения изменений проверьте синтаксис файла командой named-checkconf:

Bash
named-checkconf /etc/bind/named.conf.options

Если синтаксис правильный, команда не должна возвращать никаких результатов, например:Проверьте синтаксис конфигурации BIND.

Если вы хотите увидеть более подробный вывод об успешном выполнении теста, добавьте переключатель -pв команду ( named-checkconf -p).

Отредактируйте файл named.conf.local

Обычно используется named.conf.localдля определения локальных зон DNS для частного домена. Мы обновим этот файл, включив в него наши прямые и обратные зоны DNS.

Чтобы внести изменения, откройте /etc/bind/named.conf.localв текстовом редакторе (например, nanoили vim) и добавьте следующие строки:

Bash
zone "cherry.example" IN { \\ define the forward zone
        type master;
        file "/etc/bind/zones/cherry.example";
};
zone "2.168.192.in-addr.arpa" IN { \\ define the reverse zone
        type master;
        file "/etc/bind/zones/cherry.example.rev";
};

После внесения изменений проверьте синтаксис файла командой named-checkconf:

Bash
named-checkconf /etc/bind/named.conf.options

Создайте каталог для файлов вашей зоны

Далее мы создадим каталог для хранения файлов зоны, которые мы указали на предыдущем шаге.

Bash
mkdir /etc/bind/zones

Создайте файл зоны переадресации

Теперь мы создадим соответствующий файл зоны /etc/bind/zones/cherry.example. Файл прямой зоны позволяет DNS-серверу Bind разрешать имена (например bindserver.cherry.example) в IP-адреса (например 192.168.2.2).

Сначала скопируйте файл зоны db.local по умолчанию в /etc/bind/zones/cherry.example:

Bash
cp /etc/bind/db.local /etc/bind/zones/cherry.example

Откройте /etc/bind/zones/cherry.exampleв текстовом редакторе (например, nanoили vim) и внесите изменения, указанные в комментариях ниже:

Bash
$TTL    604800
; SOA record with MNAME and RNAME updated
@       IN      SOA     cherry.example. root.cherry.example. (
                              3         ; Serial Note: increment after each change
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; Name server record 
@       IN      NS      bindserver.cherry.example.
; A record for name server
bindserver      IN      A       192.168.2.2
; A record for clients
client1      IN      A       192.168.2.3
client2      IN      A       192.168.2.4

После внесения изменений используйте named-checkzoneкоманду для проверки конфигурации:

Bash
named-checkzone cherry.example /etc/bind/zones/cherry.example

Вы должны увидеть вывод, похожий на:

Проверьте синтаксис конфигурации обратной зоны BIND.

Создайте файл обратной зоны

Теперь мы создадим соответствующий файл обратной зоны /etc/bind/zones/cherry.example.rev. Файл обратной зоны позволяет DNS-серверу Bind преобразовывать IP-адреса (например, 192.168.2.2) в имена (например, bindserver.cherry.example).

Сначала скопируйте файл зоны db.local по умолчанию в/etc/bind/zones/cherry.example.rev

Bash
cp /etc/bind/db.127 /etc/bind/zones/cherry.example.rev

Откройте /etc/bind/zones/cherry.example.revв текстовом редакторе (например, nanoили vim) и внесите изменения, указанные в комментариях ниже:

Bash
$TTL    604800
; SOA record with MNAME and RNAME updated
@       IN      SOA     cherry.example. root.cherry.example. (
                              2         ; Serial Note: increment after each change
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; Name server record 
@       IN      NS      bindserver.cherry.example.
; A record for name server
bindserver      IN      A       192.168.2.2
; PTR record for name server
2   IN      PTR     bindserver.cherry.example
; PTR record for clients
3   IN      PTR     client1.cherry.example
4   IN      PTR     client2.cherry.example

После внесения изменений используйте named-checkzoneкоманду для проверки конфигурации:

Bash
named-checkzone cherry.example /etc/bind/zones/cherry.example.rev

Вы должны увидеть вывод, похожий на:

Проверьте синтаксис конфигурации прямой зоны BIND.

Перезапустите БИНД 9

Чтобы заставить DNS-сервер BIND использовать новую конфигурацию, перезапустите службу BIND 9 с помощью этой команды:

Bash
systemctl restart bind9

Настройте клиентов для использования конфигурации

После настройки DNS-сервера Private Bind мы можем настроить клиентов для его использования. Выполните следующие действия для обоих client1и client2.

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

Bash
ip -brief addr show to 192.168.2.0/24

Нужный нам интерфейс будет первым отображаемым значением. Например, eth1в выводе ниже:

Bash
eth1             UP             192.168.2.0/24

Затем используйте текстовый редактор (например, nanoили vi), чтобы отредактировать netplanфайл YAML, чтобы включить конфигурацию DNS, указывающую на частный DNS-сервер Bind. Обычно netplanфайлы конфигурации хранятся в /etc/netplan. Вы также можете создать новый файл конфигурации, если хотите.

YAML должен выглядеть примерно так:

Bash
        eth1:
            addresses:
            - 192.168.2.3/24 # The IP address of client1
            match:
                macaddress: 00:53:00:AB:CD:EF
            mtu: 1500
            dhcp4-overrides:
              use-dns: no # override DHCP supplied DNS if applicable
            nameservers:
                addresses:
                - 192.168.2.2 # IP for name server
                search: [ cherry.example ] # The private DNS zone
            set-name: eth1

Вот пример полного netplanфайла YAML для клиента Ubuntu с двумя указанными сетевыми интерфейсами ( eth0и eth1):

Настройте Netplan с частным DNS-сервером

После завершения настройки проверьте ее с помощью этой команды:

Bash
netplan try

Нажмите ENTER, чтобы принять изменения:

Тестовая конфигурация Netplan

Для получения более подробной информации о том, как использовать netplan, ознакомьтесь с документацией .

Протестируйте конфигурацию клиента

После того, как конфигурация будет завершена, client1он client2будет использоваться bindserverдля разрешения имен в локальной сети.

Чтобы убедиться, что конфигурация работает правильно, используйте nslookupкоманду для поиска наших доменных имен в client1и client2. Все 6 этих команд:

  • nslookup client1
  • nslookup client2
  • nslookup bindserver
  • nslookup client1.cherry.example
  • nslookup client2.cherry.example
  • nslookup bindserver.cherry.example

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

Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   client1.cherry.example
Address: 192.168.2.3

Кроме того, теперь вы можете использовать имена (например client1) и полные доменные имена (например client1.cherry.example) для связи между клиентами. Например, если оба клиента отвечают на ping, вы можете использовать их имя или полное доменное имя для проверки подключения.

Добавить комментарий