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на всех трех системах:
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.
Чтобы установить эти пакеты, используйте эту команду:
apt install bind9 bind9utils bind9-doc -yПосле установки служба BIND 9 должна быть запущена. Вы можете проверить статус с помощью этой команды:
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) и измените файлы, чтобы они выглядели примерно так:
// 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:
named-checkconf /etc/bind/named.conf.optionsЕсли синтаксис правильный, команда не должна возвращать никаких результатов, например:
Если вы хотите увидеть более подробный вывод об успешном выполнении теста, добавьте переключатель -pв команду ( named-checkconf -p).
Отредактируйте файл named.conf.local
Обычно используется named.conf.localдля определения локальных зон DNS для частного домена. Мы обновим этот файл, включив в него наши прямые и обратные зоны DNS.
Чтобы внести изменения, откройте /etc/bind/named.conf.localв текстовом редакторе (например, nanoили vim) и добавьте следующие строки:
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:
named-checkconf /etc/bind/named.conf.optionsСоздайте каталог для файлов вашей зоны
Далее мы создадим каталог для хранения файлов зоны, которые мы указали на предыдущем шаге.
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:
cp /etc/bind/db.local /etc/bind/zones/cherry.exampleОткройте /etc/bind/zones/cherry.exampleв текстовом редакторе (например, nanoили vim) и внесите изменения, указанные в комментариях ниже:
$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команду для проверки конфигурации:
named-checkzone cherry.example /etc/bind/zones/cherry.exampleВы должны увидеть вывод, похожий на:

Создайте файл обратной зоны
Теперь мы создадим соответствующий файл обратной зоны /etc/bind/zones/cherry.example.rev. Файл обратной зоны позволяет DNS-серверу Bind преобразовывать IP-адреса (например, 192.168.2.2) в имена (например, bindserver.cherry.example).
Сначала скопируйте файл зоны db.local по умолчанию в/etc/bind/zones/cherry.example.rev
cp /etc/bind/db.127 /etc/bind/zones/cherry.example.revОткройте /etc/bind/zones/cherry.example.revв текстовом редакторе (например, nanoили vim) и внесите изменения, указанные в комментариях ниже:
$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команду для проверки конфигурации:
named-checkzone cherry.example /etc/bind/zones/cherry.example.revВы должны увидеть вывод, похожий на:

Перезапустите БИНД 9
Чтобы заставить DNS-сервер BIND использовать новую конфигурацию, перезапустите службу BIND 9 с помощью этой команды:
systemctl restart bind9Настройте клиентов для использования конфигурации
После настройки DNS-сервера Private Bind мы можем настроить клиентов для его использования. Выполните следующие действия для обоих client1и client2.
Сначала проверьте, какой интерфейс используется для подключения к локальной сети с помощью этой команды:
ip -brief addr show to 192.168.2.0/24Нужный нам интерфейс будет первым отображаемым значением. Например, eth1в выводе ниже:
eth1 UP 192.168.2.0/24Затем используйте текстовый редактор (например, nanoили vi), чтобы отредактировать netplanфайл YAML, чтобы включить конфигурацию DNS, указывающую на частный DNS-сервер Bind. Обычно netplanфайлы конфигурации хранятся в /etc/netplan. Вы также можете создать новый файл конфигурации, если хотите.
YAML должен выглядеть примерно так:
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 tryНажмите ENTER, чтобы принять изменения:

Для получения более подробной информации о том, как использовать netplan, ознакомьтесь с документацией .
Протестируйте конфигурацию клиента
После того, как конфигурация будет завершена, client1он client2будет использоваться bindserverдля разрешения имен в локальной сети.
Чтобы убедиться, что конфигурация работает правильно, используйте nslookupкоманду для поиска наших доменных имен в client1и client2. Все 6 этих команд:
nslookup client1nslookup client2nslookup bindservernslookup client1.cherry.examplenslookup client2.cherry.examplenslookup 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, вы можете использовать их имя или полное доменное имя для проверки подключения.
