###### tags: `МДК02.05 Организация администрирования операционных систем Linux` `Linux` `DNS` # Лабораторная работа №6. Настройка DNS сервера на базе bind9. ### Тема: Настройка DNS сервера на базе bind9. ##### Цель работы: Научиться поднимать кеширующий DNS сервер на базе пакета bind9 в OC Linux. Научиться настраивать зоны прямого и обратного просмотра. ##### Необходимые материалы: Пк с доступом в интернет. Виртуальные машины с Linux Debian и Ubuntu. ## Теоретическая часть В интернете для компьютеров используются ip-адреса, но людям с ip-адресами работать неудобно. Например, вряд ли вы скажете, что означает вот этот ip-адрес `77.88.55.66`, а если адрес в формате ipv6 (`2a02:6b8:a::a`), то его запомнить еще сложнее. Для людей гораздо удобнее работать с символьными именами, например www.yandex.ru, вполне понятное имя для людей, сразу можно понять что это веб-сервер компании Яндекс. ### Зачем нужен DNS Система доменных имен позволяет использовать вместо ip-адресов понятные для человека символьные имена компьютера, она также позволяет по этому символьному имени определить ip-адрес. Важным преимуществом системы DNS является возможность изменять сетевую инфраструктуру, например, если компания Яндекс захочет перенести свой веб-сервер на другой компьютер, у которого будет другой ip-адрес, то ничего страшного не произойдет, так как доменное имя не изменится. Люди будут обращаться по тому же самому доменному имени, которые теперь будет отображаться в другой ip-адрес. DNS по английский Domain Name System — это протокол прикладного уровня стека протоколов tcp-ip. ![](https://i.imgur.com/GE7La6h.png) Узнать ip-адрес компьютера по его доменному имени можно с помощью утилиты **nslookup**. Здесь представлен пример её использования: ![](https://i.imgur.com/mjPSBM5.png) ### Файл /etc/hosts До того как придумали систему DNS, к наименованию компьютеров использовали другой подход, имена компьютеров и соответствующие им ip- адреса хранились в обычном текстовом файле. Этот файл в системах Unix и Linux называются **Linux/Unix/etc/hosts**, в Windows похожий файл тоже есть, только он находится по другому пути. Windows: **C:\Windows\System32\drivers\etc\hosts**. Такой подход работал на заре создания сетей tcp-ip, когда компьютеров было мало, все компьютеры и их ip-адреса можно было перечислить в одном файле, который хранился на центральном сервере имен, остальные компьютеры подключались к этому серверу и загружали файл. Со временем файл стал очень большим, его стало сложно редактировать стали возникать конфликты имен, так как в разных организациях называли компьютеры одним и тем же именем. Стало понятно, что нужно другое решение, и тогда вы придумали систему DNS. ### Особенности DNS При создании системы DNS было решено что это принципиально децентрализованная система. Децентрализованная как на техническом уровне, то есть нет одного сервера на котором хранятся все имена всех компьютеров в сети, так и на административном уровне. Название компьютеров делится на отдельные части, домены, и за имена компьютеров в разных доменах отвечают разные организации. Также для системы DNS очень важна надёжность, поэтому серверы DNS дублируются. ### Структура доменного имени Вместо обычных имен компьютеров, которые состоят из одного слова в системе DNS используются доменные имена. Имя компьютера состоит из нескольких частей, которые отделены друг от друга точками. Например, веб-сервер сайта о Мобильной связи и Технологиях имеет следующие имя www.zvondozvon.ru. Имя состоит из следующих частей ru это домен верхнего уровня, следующий домен отделён от него точкой zvondozvon домен второго уровня, и последний компонент www это имя компьютера в домене второго уровня. ### Корневой домен Кажным элементом доменного имени, которое обычно не пишут, является корневой домен, он указывается точкой в конце. Если вы не укажете точку, то ничего страшного не произойдет, она подразумевается в конце каждого доменного имени. ![](https://i.imgur.com/SO6XzG8.png) ### Дерево доменных имен Доменные имена образуют дерево. Корнем дерева является корневой домен, который представлен точкой. Затем идут домены верхнего уровня, которые бывают трех типов: ![](https://i.imgur.com/fHpthY4.png) - Домены для различных типов организаций, которые используются, как правило внутри США (org, com, net). Домен org для некоммерческих организаций, com для коммерческих организаций, net для организации связанных с компьютерными сетями, есть также и другие домены. - Тип доменов верхнего уровня, домены для стран. Каждая страна имеет свой домен. Домен Россия ru, домен Великобритании uk, и относительно недавно появились новые типы доменов верхнего уровня в которых можно использовать не только символы английского алфавита. Для России это домен рф. - Затем идут домены второго уровня, например cisco.com, yandex.ru или яндекс.рф русскими буквами. - На третьем уровне могут находиться, как домены следующего уровня их называют поддомены или адреса компьютера в домене второго уровня. Например, в домене yandex.ru есть компьютеры с адресами www.yandex.ru веб-сервер компании yandex, maps.yandex.ru сервер яндекс карт, такси.yandex.ru сервер яндекс такси и большое количество других серверов. ### Кеширующий DNS-сервер После того, как DNS resolver нашел ip-адрес для некоторого доменного имени, он записывает его в кэш, с одной стороны это хорошо так как повышают производительность работы, с другой стороны администратор зоны может поменять ip-адрес для некоторого компьютера, и если он у нас сохранен в кэше, то об изменении мы узнаем только через некоторое время. Иногда, это время может составлять несколько дней или даже недель в зависимости от настроек DNS resolver. Поэтому не удивляйтесь, если вы внесли изменения в DNS записи, но они пока не видны. ### DNS в Linux. Bind9 это пакет создающий DNS-сервер в локальной или глобальной сети. Bind9 может также работать и в режиме кеширующего DNS-сервера. Схема того как работают dns сервера: ![](https://i.imgur.com/PJZL2gT.jpg) ### Типы записей DNS До сих пор мы рассматривали единственное применение системы dns это определение IP-адреса по доменному имени компьютера, но кроме этого DNS выполняет много других функций, которые необходимы для работы сети интернет. Для их реализации используются разные типы записей DNS. Каждая запись dns по-английский (Resource Record, RR) имеет тип записи и класс записи. Тип записей говорит о том для чего эта запись предназначена, а класс указывает в каких сетях эта запись может использоваться. Сейчас DNS применяется только в сетях интернет, поэтому в классе записи вы почти всегда увидите IN, сокращение от интернета. Записи, которые используются для определения ip адреса компьютера (IPv4) по доменному имени имеют тип A, для ад ### Запрос записей разных типов В утилите nslookup можно указать тип записи, который вы запрашиваете с помощью ключа минус type, например если вы укажете -type=A, нужно узнать Ipv4 адрес для доменного имени www.yandex.ru, то получите адреса ip версии 4. ![](https://i.imgur.com/DZaFxII.png) ### Адрес почтового сервера Система DNS активно используются при работе электронной почты предположим, что мы хотим отправить электронное письмо на некоторый адрес в домене gmail.com, но как мы узнаем адрес почтового сервера, который принимает почту для этого домена? Это можно сделать с помощью DNS. Для этого в DNS есть запись специального типа MX (Mail eXechange), например для домена gmail.com есть целых пять записей типа MX, которые задают пять серверов, принимающие почту в домене Google. ![](https://i.imgur.com/pGcMoey.png) Запись MX содержит два поля. Первое поле это приоритет, а второе это адрес сервера принимающего почту для данного домена. Чем ниже значение, тем более высокий приоритет. Самый высокий приоритет у сервера, у которого значение приоритета пять и самый низкий приоритет у сервера со значением 40. Таким образом, при отправке электронной почты сначала будет выбираться сервер с наименьшим приоритетом, если по каким-либо причинам он будет недоступен, следующий сервер и так далее. Адреса сетевых сервисов Для некоторых типов сервисов интернет, можно указывать не только IP адрес, но и порт на котором этот сервис работает. Для этого используются DNS записи типа SRV (Service record). Структуры этой записи достаточно сложны, вместо доменного имени указывается строка с описанием сервисов в специальном формате (_сервис._протокол.имя.-˃ приоритет вес порт имя). ### Делегирование ответственности. В DNS важным понятием является делегирование ответственности. Информация о компьютерах входящая в ту или иную доменную зону хранится на DNS сервере, который отвечает за работу этой зоны. Но нам необходимо знать, какие серверы отвечают за ту или иную зону. ![](https://i.imgur.com/fh8LFs0.png) ### Записи серверов имен. Для этого используются dns-записи типа NS (Name Server). Например, за доменную зону yandex.ru отвечают серверы ns1.yandex.ru и ns2.yandex.ru, а за доменную зону urfu.ru отвечает целых 3 сервера. Записи типа ns задаются на домене более высокого уровня в нашем случае на сервере, который отвечает за зону ru. Именно этот сервер содержит записи ns для домена yandex.ru и для домена urfu.ru. Но нам недостаточно знать только доменные имена dns-серверов, необходимо знать их IP адреса. Для этого используются «приклеенные» записи А, которые указывают IP-адреса. Вся остальная информация о делегированных доменных зонах хранится на этих dns серверах. ### Определение имени по IP-адресу Кроме определения ip адреса по компьютеру, по доменному имени, система dns может использоваться для обратной задачи определения доменного имени компьютера по его IP адресу. Для этого используются специальные зоны, называются обратные (reverse) или реверсивные. Реверсивная зона содержит записи типа PTR (Pointer), которые ставят в соответствии IP-адрес компьютера доменному имени. Однако из-за технических ограничений DNS не может работать напрямую с IP адресами, поэтому для обратных зон был придуман обходной путь, представлять IP адрес в виде доменного имени. Для этих целей создан специальный домен in-addr.arpa и в этом домене IP адреса записываются в обратном порядке, например адрес 77.88.55.66 в обратной зоне будет записан следующим образом 66.55.88.77.in-addr.arpa. :::success Материал в видео формате: [1. Кратко про DNS](https://youtu.be/t2NMbSarXC4) [2. Подробнее про DNS](https://youtu.be/0r55MCfkMfM) **Статья для прочтения и конспектирования: https://www.icmm.ru/uchebnaya-deyatelnost/lektsii/512-dns** ::: ## Практическая часть 1. Первое, что вам нужно сделать, это обновить список пакетов и установить BIND9. ![](https://i.imgur.com/tC63vQ6.png) 2. После завершения процесса установки проверите работу BIND9. ![](https://i.imgur.com/a1zNx8Z.png) 3. Перейдите в директорию /etc/bind/. Выполните команду ls -l. ![](https://i.imgur.com/oKhHlzm.png) - **db.{0,127,255,empty,local}** - эти файлы можно назвать служебной информацией. Они определяют доменную зону локалхоста и дефолтные реверсные зоны - **db.root** - тут содержатся адреса корневых DNS-серверов. - **named.conf** - основной конфигурационный файл. При запуске сервис ищет именно его, если не указано иное. Для удобства файл разбит на несколько частей, которые добавляются в него с помощью инструкции include. - **named.conf.default-zones** - в этом файле подключаются дефолтные доменные зоны, описанные ранее. - **named.conf.local** - тут можно описать доменные зоны, которые мы заведем на нашем сервере. В этой задаче он нам не нужен, хотя в ходе урока мы до него доберемся. - **named.conf.options** - тут описываются настройки самого сервера, а не доменных зон. - **rndc.key** - ключ для утилиты rndc, с помощью которой управляют DNS-сервером. Утилита может жить как на том же сервере, так и на любом другом компьютере. Главное описать параметры подключения к DNS-серверу. - **zones.rfc1918** - тут описываются обратные зоны для серых подсетей. По умолчанию для них для всех используется **empty.db**, но при необходимости всегда можно переопределить. Нас сейчас будет интересовать только файл **named.conf.options**. 4. Откройте главный файл настройки - **named.conf.options** ![](https://i.imgur.com/FEGVOVT.png) Далее перечислим некоторые из доступных опций. Добавьте необходимые в блоке «options». - «**listen-on**» позволяет указать сети, которые будет обслуживать DNS-сервер. Для работы по всем адресам не указывайте параметр или же задайте «any;» - «**allow-query**» указывает, кому разрешено выполнять запросы. BIND9 по умолчанию разрешает только локальные запросы, поэтому добавьте необходимые IP-адреса или пропишите «any;», чтобы разрешить все запросы. - «**forwarders**» cерверы пересылки содержат IP-адреса DNS-серверов, на которые перенаправляется запрос в случае, если наш сервер не содержит необходимых данных. 5. Добавьте в сервера пересылки dns гугла. ![](https://i.imgur.com/gWzTnXw.png) 6. Проверьте конфигурацию ![](https://i.imgur.com/I1yp78W.png) 7. Если все хорошо перезагрузите службу: ![](https://i.imgur.com/nVm0MGK.png) 8. Проверьте работу dns сервера: ![](https://i.imgur.com/vDc8qbf.png) 9. Откройте логи журнала syslog, найдите и исправьте ошибку в перенаправление DNS. 10. Перезагрузите службу DNS. С основного компьютера выполните команду **nslookup google.com ip_адрес_сервера_dns**. 11. Откройте файл `/etc/bind/named.conf.local` и добавьте информацию о зоне (в название зоны используйте фамилия-N.local где N номер по журналу): ``` zone "mpt-01-1.xyz"{ type master; file "/etc/bind/master/mpt-01-1.xyz.zone"; allow-query {any;}; }; ``` в качестве файла зоны укажите путь до **/etc/bind/master/фамилия-N.local** 12. Создайте файл зоны на основе шаблона **db.local**: ``` cp /etc/bind/db.local /etc/bind/master/mpt-01-1.xyz.zone ``` Он выглядит так: ![](https://i.imgur.com/kOyL4O0.png) 13. Добавьте в файл зоны запись типа "A" **для шлюза по умолчанию назовите шлюз gtw**. Пример конфигурации зоны **mpt-01-1.xyz** и записей типа "A" для сервера srv1: ```bash= ; ; BIND data file for local loopback interface ; $TTL 604800 mpt-01-1.xyz. IN SOA ns.mpt-01-1.xyz. root.localhost. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns.mpt-01-1.xyz. @ IN NS localhost. ns IN A 172.16.1.2 # адрес dns сервера # записи типа A для доменного имени srv1.mpt-01-1.xyz. srv1 IN A 172.16.1.1 # адрес сервера srv1 srv1 IN A 192.168.1.1 # адрес сервера srv1 srv1 IN A 10.10.1.1 # адрес сервера srv1 ``` 14. Перезагрузите dns сервер. Сервер должен отвечать на запрос: ```bash= nslookup gtw.фамилия-N.local ip_адрес_dns_сервера ``` 15. Для создания обратной зоны откредактируйте файл: ![](https://i.imgur.com/lpt7Doa.png) Обратные зоны принято записывать с «перевернутым ip». В данном случае для адресов в сети **5.53.124.N/24**. Создаётся запись **124.53.5.in-addr.arpa**. Файл же мы можем назвать более читабельно в привычном нам виде. Единственное в адресе не указывается номер хоста. **Используйте в название файла и зоны IP адресс локальной сети (для которой создовали запись типа "A")** 16. Создайте файл зоны: ![](https://i.imgur.com/WcSn8nU.png) 17. Отредактируйте добавив обратную запись для шлюза: ``` ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns.mpt-01-1.xyz. root.localhost. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns.mpt-01-1.xyz. @ IN NS localhost. ns IN A 172.16.1.2 # адрес dns сервера 1 IN PTR srv1.mpt-01-1.xyz. ``` где **1** это цифра последнего актета из адреса 172.16.1.**N**/24. 18. Перезагрузите сервер. Пример: сервер c конфигом: ![](https://i.imgur.com/CwAHYuv.png) должен отвечать на подобные запросы: ![](https://i.imgur.com/R4B5eoG.png) Выполните команду **`nslookup ip_адрес_шлюза ip_адрес_dns сервера`**, сервер должен ответить доменным именим: **gtw.фамилия-N.local**. ## Контрольные вопросы 1. **Зачем нужен DNS? Развернутый ответ.** 2. **Что это за файл такой /etc/hosts?** 3. **В чем отличие децентрализированной системы от централизованной? Какой системой является DNS?** 4. **Опишите структуру доменного имени на примере www.google.com ?** 5. **Корневой домен это?** 6. **Дерево доменных имен это?** 7. **В чем суть кеширующего доменного сервера?** 8. **Какой пакет используется в Linux для настройки dns?** 9. **Зачем нужна секция forwarders в настройка bind9?** 10. **Какой утилитой вы можете обратиться к dns серверу?** 11. **Какие есть типы записей в DNS?** 12. **Какие зоны вы создали и какие записи в них сделали?** 13. **Для просмотра конкретного типа записи в DNS с помощью nslookup какой ключ вы используете?**