Введение
В этой лабораторной работе вы научитесь настраивать локальный авторитетный DNS-сервер в системе Linux с использованием bind9. Вы получите практический опыт работы с одним из наиболее широко используемых пакетов программного обеспечения для DNS, превратив стандартную машину Linux в сервер, способный разрешать пользовательские доменные имена для локальной сети.
Процесс начинается с установки необходимых пакетов и настройки глобальных параметров сервера, таких как настройка пересылок (forwarders). Затем вы определите как зону прямого просмотра (forward lookup zone) для преобразования доменного имени в IP-адрес, так и зону обратного просмотра (reverse lookup zone) для соответствующего диапазона IP-адресов. В завершение лабораторной работы вы проверите файлы конфигурации bind9 на правильность синтаксиса и используете утилиту dig для тестирования вашего нового DNS-сервера, убедившись, что он корректно обрабатывает запросы для вашего локального домена.
Установка bind9 и настройка глобальных параметров
На этом этапе вы начнете с настройки основных компонентов вашего DNS-сервера. Это включает установку bind9, одного из наиболее широко используемых пакетов программного обеспечения DNS-сервера в Linux. Вы также настроите его глобальные параметры, которые управляют общим поведением сервера, например, как он обрабатывает запросы для доменов, для которых он не является авторитетным.
Сначала, как стандартная практика, обновите список пакетов вашей системы, чтобы убедиться, что вы получаете последние доступные версии программного обеспечения.
Выполните следующую команду в вашем терминале:
sudo apt-get update
Далее установите пакет bind9, который содержит демон DNS-сервера, и bind9-utils, который предоставляет полезные инструменты командной строки, такие как dig и named-checkconf, которые вы будете использовать позже для тестирования и проверки.
sudo apt-get install bind9 bind9-utils
Вам будет предложено подтвердить установку. Введите Y и нажмите Enter. Вывод будет похож на следующий:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
bind9-libs bind9-doc dns-root-data
...
After this operation, XX.X MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...
Setting up bind9 (1:9.18.X-XubuntuX.X) ...
После установки bind9 следующая задача — настроить его глобальное поведение. Основная конфигурация разделена на несколько файлов, все они расположены в каталоге /etc/bind/. Для глобальных параметров вы будете редактировать файл named.conf.options.
Откройте файл с помощью редактора nano:
sudo nano /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on-v6 { any; };
};
В этом файле вы увидите блок options { ... };. Вам нужно убедиться, что этот блок содержит директивы для пересылки (forwarding), разрешений на запросы (query permissions) и прослушиваемых интерфейсов (listening interfaces). Пересылка позволяет вашему DNS-серверу разрешать внешние домены (например, google.com), обращаясь к другим общедоступным DNS-серверам.
Измените блок options в соответствии со следующим. Вы можете добавить недостающие строки или раскомментировать и изменить существующие.
Совет: Вы можете очистить содержимое файла, нажав
Ctrl+K, затем вставьте следующее содержимое.
options {
directory "/var/cache/bind";
// If there is not a line with forwarders, add the following section.
// If there is one, ensure it's not commented out and has valid IPs.
forwarders {
8.8.8.8;
8.8.4.4;
};
// Add or uncomment this line to allow queries from any host
allow-query { any; };
recursion yes;
listen-on { any; }; // Listen on all interfaces
listen-on-v6 { any; }; // Listen on all IPv6 interfaces
dnssec-validation auto;
auth-nxdomain no; ## conform to RFC1035
};
После завершения редактирования сохраните файл, нажав Ctrl+O, затем нажмите Enter для подтверждения имени файла. Выйдите из редактора nano, нажав Ctrl+X. Теперь вы успешно установили bind9 и настроили его начальную конфигурацию.
Определение и создание зоны прямого просмотра для mylocaldomain.net
На этом этапе вы настроите ваш сервер bind9 для авторитетного обслуживания пользовательского домена. Это достигается путем создания зоны прямого просмотра (forward lookup zone), которая представляет собой базу данных, сопоставляющую удобочитаемые имена хостов (например, webserver.mylocaldomain.net) с их соответствующими IP-адресами. Сначала вы определите зону в конфигурации bind9, а затем создадите фактический файл зоны, содержащий DNS-записи.
Сначала вам нужно сообщить bind9 о вашей новой зоне. Конфигурации локальных зон хранятся в /etc/bind/named.conf.local, чтобы отделить их от конфигурации пакета по умолчанию. Этот файл будет полностью настроен на следующем шаге.
Теперь, когда зона определена, необходимо создать соответствующий файл зоны. Этот файл содержит фактические DNS-записи.
Сначала скопируйте шаблон файла, чтобы новый файл имел правильные права доступа и владельца:
sudo cp /etc/bind/db.local /etc/bind/db.mylocaldomain.net
Далее, вместо ручного редактирования файла, вы можете выполнить один блок команд, который:
- Получит IP-адрес вашего ВМ (виртуальной машины).
- Сгенерирует динамический серийный номер, используя текущую дату.
- Запишет полное и корректное содержимое файла зоны в
/etc/bind/db.mylocaldomain.net.
Сначала захватите IP-адрес вашего ВМ в переменную, которая будет использоваться в файле зоны:
VM_IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
Эта команда извлекает IPv4-адрес из вашего основного сетевого интерфейса (eth0) с помощью регулярного выражения. IP-адрес будет автоматически вставлен в ваши DNS-записи.
Теперь создайте файл зоны с соответствующими DNS-записями. Эта одна команда сгенерирует полный файл зоны:
sudo bash -c "cat > /etc/bind/db.mylocaldomain.net" << EOF
\$TTL 604800
@ IN SOA ns1.mylocaldomain.net. admin.mylocaldomain.net. (
$(date +%Y%m%d)01 ; Serial (YYYYMMDDNN)
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.mylocaldomain.net.
ns1 IN A ${VM_IP}
webserver IN A ${VM_IP}
fileserver IN A ${VM_IP}
www IN CNAME webserver
EOF
Эта команда автоматически заполняет файл зоны правильными записями, используя конкретный IP-адрес вашего ВМ. Вы можете проверить содержимое с помощью cat /etc/bind/db.mylocaldomain.net. Теперь вы успешно определили и создали свою первую зону прямого просмотра.
Определение и создание всех локальных зон
На этом этапе вы создадите все необходимые конфигурации локальных зон. Вместо ручного редактирования файлов вы будете использовать скрипт для выполнения следующих действий, обеспечивая точную настройку:
- Создание
/etc/bind/named.conf.local: Этот файл будет сгенерирован с нуля для содержания определений как вашей прямой (mylocaldomain.net), так и обратной зоны просмотра. - Создание файла обратной зоны: Скрипт также создаст файл
db.REVERSE_IPс необходимымиPTRзаписями.
Сначала соберите информацию об IP-адресе, необходимую для конфигурации обеих зон:
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
LAST_OCTET=$(echo $IP | awk -F. '{print $4}')
Это извлекает IP-адрес вашего ВМ и обрабатывает его для создания формата обратного IP-адреса, необходимого для зоны обратного просмотра. Например, если ваш IP-адрес 172.16.50.100, то REV_IP станет 50.16.172, а LAST_OCTET станет 100.
Далее создайте основной файл конфигурации зоны, который сообщает bind9 о обеих зонах:
sudo bash -c "cat > /etc/bind/named.conf.local" << EOF
//
// Do any local configuration here
//
// Forward lookup zone
zone "mylocaldomain.net" {
type master;
file "/etc/bind/db.mylocaldomain.net";
};
// Reverse lookup zone
zone "${REV_IP}.in-addr.arpa" {
type master;
file "/etc/bind/db.${REV_IP}";
};
EOF
Этот файл определяет как зону прямого просмотра (для преобразования имен в IP-адреса), так и зону обратного просмотра (для преобразования IP-адресов обратно в имена). type master указывает, что этот сервер является авторитетным для этих зон.
Наконец, создайте файл обратной зоны с PTR-записями:
sudo bash -c "cat > /etc/bind/db.${REV_IP}" << EOF
\$TTL 604800
@ IN SOA ns1.mylocaldomain.net. admin.mylocaldomain.net. (
$(date +%Y%m%d)01 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.mylocaldomain.net.
;
${LAST_OCTET} IN PTR ns1.mylocaldomain.net.
${LAST_OCTET} IN PTR webserver.mylocaldomain.net.
${LAST_OCTET} IN PTR fileserver.mylocaldomain.net.
EOF
Этот автоматизированный подход гарантирует, что обе зоны правильно определены в named.conf.local, а файл обратной зоны корректно создан, что предотвращает распространенные ошибки конфигурации.
Проверка конфигурации bind9 и тестирование разрешения DNS с помощью dig
На этом этапе вы проверите все внесенные изменения в конфигурацию, а затем протестируете ваш работающий DNS-сервер. Крайне важно проверять файлы конфигурации на наличие синтаксических ошибок перед их применением, поскольку ошибка может помешать корректному запуску службы bind9. После проверки вы будете использовать утилиту dig для выполнения DNS-запросов и подтверждения того, что ваш сервер работает должным образом.
Сначала проверьте основные файлы конфигурации bind9 на наличие синтаксических ошибок с помощью named-checkconf. Если эта команда не выдает никакого вывода, это означает, что ваши файлы конфигурации (named.conf.local, named.conf.options и т. д.) действительны.
sudo named-checkconf
Далее проверьте синтаксис вашего файла зоны прямого просмотра. Команда named-checkzone проверяет файл зоны на корректность.
sudo named-checkzone mylocaldomain.net /etc/bind/db.mylocaldomain.net
Успешная проверка вернет статус "OK" и покажет серийный номер из вашего файла зоны:
zone mylocaldomain.net/IN: loaded serial 2024052001
OK
Теперь проверьте зону обратного просмотра. Поскольку имя зоны и имя файла зависят от IP-адреса вашего ВМ, сначала соберите необходимую информацию:
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
ZONE_NAME="${REV_IP}.in-addr.arpa"
ZONE_FILE="/etc/bind/db.${REV_IP}"
Это создает правильное имя зоны и путь к файлу на основе фактического IP-адреса вашего ВМ.
Теперь выполните команду проверки зоны:
echo "Checking reverse zone: ${ZONE_NAME}"
sudo named-checkzone ${ZONE_NAME} ${ZONE_FILE}
Успешная проверка снова покажет статус "OK":
zone 50.16.172.in-addr.arpa/IN: loaded serial 2024052001
OK
Перед перезапуском убедитесь, что служба bind9 может читать файлы зон, установив правильные права владения. Сначала снова получите информацию об IP-адресе, чтобы построить правильный путь к файлу:
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
Теперь установите правильные права владения для обоих файлов зон:
sudo chown root:bind /etc/bind/db.mylocaldomain.net "/etc/bind/db.${REV_IP}"
После проверки всех конфигураций пришло время перезапустить службу bind9, чтобы применить изменения:
sudo systemctl restart bind9
Чтобы быть уверенным, что служба запустилась корректно и загрузила ваши новые зоны, проверьте системные журналы.
sudo grep named /var/log/syslog | grep "loaded serial"
Вы должны увидеть вывод, подтверждающий успешную загрузку обеих ваших зон. Вывод также будет включать зоны по умолчанию, такие как localhost, что является нормальным. Главное — найти строки для mylocaldomain.net и вашей обратной зоны.
... named[...]: zone mylocaldomain.net/IN: loaded serial 2025071401
... named[...]: zone 50.16.172.in-addr.arpa/IN: loaded serial 2025071401
...
Если вы не видите этих строк, просмотрите вывод sudo systemctl status bind9 на наличие ошибок.
Наконец, протестируйте ваш DNS-сервер с помощью dig. Вы будете запрашивать ваш локальный сервер напрямую, указывая @127.0.0.1.
Сначала протестируйте прямое разрешение для webserver.mylocaldomain.net:
dig @127.0.0.1 webserver.mylocaldomain.net
В выводе найдите раздел ANSWER SECTION. Он должен показывать A запись, указывающую на IP-адрес вашего ВМ, и, что важно, flags в заголовке должны включать aa для авторитетного ответа. Строка SERVER внизу должна показывать 127.0.0.1.
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ...
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;webserver.mylocaldomain.net. IN A
;; ANSWER SECTION:
webserver.mylocaldomain.net. 604800 IN A <your_vm_ip>
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
Затем протестируйте обратное разрешение, используя флаг -x. Сначала захватите IP-адрес вашего ВМ:
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
Теперь выполните тест обратного разрешения:
dig @127.0.0.1 -x $IP
В разделе ANSWER SECTION теперь должны отображаться созданные вами PTR записи, сопоставляющие ваш IP-адрес с именами хостов, а flags снова должны включать aa.
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ...
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;<last_octet>.<your_reversed_network_part>.in-addr.arpa. IN PTR
;; ANSWER SECTION:
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR fileserver.mylocaldomain.net.
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR ns1.mylocaldomain.net.
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR webserver.mylocaldomain.net.
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
Поздравляем! Вы успешно настроили, проверили и протестировали базовый авторитетный DNS-сервер.
Резюме
В этой лабораторной работе вы настроили локальный авторитетный DNS-сервер на Linux с использованием пакета программ bind9. Процесс начался с установки bind9 и его основных утилит, затем последовало редактирование глобального файла named.conf.options для определения поведения сервера в целом, такого как настройка пересылок (forwarders) для разрешения внешних доменных запросов.
Затем вы создали основные зоны DNS: зону прямого просмотра (forward lookup zone) для mylocaldomain.net для сопоставления имен хостов с IP-адресами с использованием A-записей, и соответствующую зону обратного просмотра (reverse lookup zone) для сопоставления IP-адресов обратно с именами хостов с помощью PTR-записей. Лабораторная работа завершилась важным этапом проверки, где вы использовали named-checkconf и named-checkzone для проверки ошибок конфигурации, а затем протестировали функциональность работающего сервера, выполнив успешные прямые и обратные запросы с помощью утилиты dig.



