BIND как DNS-сервер для частной сети в CentOS 7
Centos | Комментировать запись
Важной частью управления конфигурацией и инфраструктурой сервера является поддержка простого поиска сетевых интерфейсов и IP-адресов по имени путем настройки правильной системы доменных имен (DNS, Domain Name System). Использование полных доменных имен (FQDN) вместо IP-адресов для определения сетевых адресов облегчает настройку сервисов и приложений и упрощает поддержку файлов конфигурации. Настройка собственного DNS-сервера для частной сети – отличный способ улучшить управление серверами.
Данный мануал поможет настроить в CentOS 7 внутренний DNS-сервер с помощью сервера имен BIND (BIND9), который может использоваться вашими серверами для разрешения внутренних имен хостов и IP-адресов. Это обеспечивает централизованный способ управления внутренними именами хостов и IP-адресами, что необходимо для среды, которая состоит из нескольких хостов.
Требования
Для работы вам понадобится следующая инфраструктура. Все серверы должны находиться в одном ЦОД с включенной поддержкой частной сети.
- Свежий сервер CentOS 7 для настройки первичного DNS-сервера (в мануале он называется ns1).
- Опционально: сервер CentOS 7 для настройки вторичного DNS-сервера (в мануале он называется ns2).
На каждом из этих серверов настройте пользователя sudo и брандмауэр, следуя мануалу по начальной настройке сервера CentOS 7.
Читайте также:
- Введение в DNS: основные термины, компоненты и понятия
- Сравнение DNS-серверов: как выбрать правильную конфигурацию DNS
- Настройка Bind как кэширующего или перенаправляющего DNS-сервера в Ubuntu 14.04
Пример инфраструктуры
В мануале предполагается, что:
- У вас есть два сервера. Здесь мы будем ссылаться на них как на host1 и host2.
- Все серверы находятся в одном ЦОД (в мануале он условно называется nyc3).
- Все серверы поддерживают частную сеть (в мануале они находятся в подсети 10.128.0.0/16, вероятно, это значение вам нужно будет откорректировать).
- Все серверы обслуживают проект, который работает на домене example.com.
Учитывая все вышесказанное, имеет смысл организовать схему именования, которая использует nyc3.example.com для обозначения частной подсети или зоны. Таким образом, FQDN хоста host1 будет host1.nyc3.example.com. Схема представлена в следующей таблице:
Хост | Роль | Частный FQDN | Внутренний IP-адрес |
host1 | Клиент Host 1 | host1.nyc3.example.com | 10.128.100.101 |
host2 | Клиент Host 2 | host2.nyc3.example.com | 10.128.200.102 |
Примечание: Ваша ситуация будет отличаться, но условные имена и IP-адреса будут использоваться в этом мануале для демонстрации настройки DNS-сервера для обеспечения работы внутреннего DNS. Вы должны легко адаптировать эту настройку к своей собственной среде, заменив имена хостов и внутренние IP-адреса своими собственными данными. Использовать имя региона центра обработки данных в схеме именования нет необходимости, но мы используем его здесь, чтобы обозначить, что эти хосты принадлежат частной сети одного центра обработки данных. Если вы используете несколько центров обработки данных, вы можете настроить внутренний DNS в каждом соответствующем ЦОД.
В результате у вас будет первичный DNS-сервер ns1 и вторичный DNS-сервер ns2.
Хост | Роль | Частный FQDN | Внутренний IP-адрес |
ns1 | Первичный DNS-сервер | ns1.nyc3.example.com | 10.128.10.11 |
ns2 | Вторичный DNS-сервер | ns2.nyc3.example.com | 10.128.20.12 |
1: Установка BIND на DNS-серверы
На серверах ns1 и ns2 установите BIND:
sudo yum install bind bind-utils
Чтобы подтвердить установку, нажмите у.
2: Настройка первичного DNS-сервера
Конфигурация BIND состоит из нескольких файлов, которые включены в основной файл конфигурации named.conf. Имена этих файлов начинаются с named, потому что это имя процесса, который запускает BIND. Начнем с настройки файла named.conf.
Файл named.conf
Процесс BIND называется named. Потому многие файлы, которые относятся к этому серверу, называются named, а не BIND.
На сервере ns1 откройте этот файл:
sudo vi /etc/named.conf
Над существующим блоком options создайте новый блок управления доступом ACL (access control list) под названием trusted. Здесь можно определить список клиентов, которые могут отправлять рекурсивные DNS-запросы (например, ваши серверы, находящиеся в том же ЦОД, что и ns1). Добавьте ns1, ns2, host1 и host2 в список доверенных клиентов:
acl "trusted" {
10.128.10.11; # ns1 - can be set to localhost
10.128.20.12; # ns2
10.128.100.101; # host1
10.128.200.102; # host2
};
Теперь, когда у вас есть список доверенных DNS-клиентов, можно отредактировать блок options. Добавьте внутренний IP-адрес в строку listen-on port 53 и раскомментируйте listen-on-v6:
options {
listen-on port 53 { 127.0.0.1; 10.128.10.11; };
# listen-on-v6 port 53 { ::1; };
...
Под этими записями измените allow-transfer с none на внутренний IP-адрес сервера ns2. В allow-query вместо localhost введите trusted.
...
options {
...
allow-transfer { 10.128.20.12; }; # disable zone transfers by default
...
allow-query { trusted; }; # allows queries from "trusted" clients
...
В конец файла добавьте строку:
include "/etc/named/named.conf.local";
Теперь сохраните и закройте файл named.conf. В приведенной выше конфигурации указано, что только ваши доверенные серверы смогут запросить внешние домены у DNS-сервера.
Затем нужно настроить файл local, чтобы определить DNS-зоны.
Настройка файла local
На ns1 откройте файл named.conf.local:
sudo vi /etc/bind/named.conf.local
По идее, сейчас в файле нет ничего. Здесь нужно указать зоны прямого и обратного просмотра.
Добавьте зону прямого просмотра, заменив имя зоны и внутренний IP-адрес вторичного DNS-сервера:
zone "nyc3.example.com" {
type master;
file "/etc/named/zones/db.nyc3.example.com"; # zone file path
};
Учитывая, что вы используете частную подсеть 10.128.0.0/16, добавьте зону обратного просмотра (обратите внимание, что имя этой зоны начинается с «128.10», обратно от «10.128»):
zone "128.10.in-addr.arpa" {
type master;
file "/etc/named/zones/db.10.128"; # 10.128.0.0/16 subnet
};
Если ваши серверы охватывают несколько частных подсетей, но находятся в одном и том же центре данных, обязательно укажите дополнительный файл зоны и зону для каждой отдельной подсети. Когда вы закончите добавлять все нужные зоны, сохраните и выйдите из файла named.conf.local.
Теперь, когда зоны указаны в BIND, необходимо создать соответствующие файлы зон прямого и обратного просмотра.
Создание файла зоны прямого просмотра
Файл зоны прямого просмотра определяет записи DNS для прямого просмотра DNS. То есть, когда DNS получает запрос имени, например host1.nyc3.example.com, он будет искать данные в файле зоны прямого просмотра для разрешения соответствующего внутреннего IP-адреса host1.
Создайте каталог, в котором будут находиться файлы зон. Согласно конфигурации named.conf.local, его расположение – /etc/named/zones:
sudo chmod 755 /etc/named
sudo mkdir /etc/named/zones
Теперь отредактируйте файл зоны прямого просмотра. Откройте файл в редакторе:
sudo vi /etc/named/zones/db.nyc3.example.com
Сначала нужно отредактировать запись SOA. Замените ns1 FQDN своим доменом, а затем замените своим доменом nyc3.example.com. Редактируя файл зоны, необходимо увеличить значение serial перед перезапуском процесса named. Мы увеличим его до 3. Теперь файл должен выглядеть примерно так:
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
В конец файла добавьте записи своего сервера имен (замените имена своими данными). Обратите внимание, что во втором столбце указано, что это записи NS.
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
Теперь добавьте записи A для ваших хостов, которые принадлежат к этой зоне. Сюда входят все серверы, чье имя должно заканчиваться на .nyc3.example.com. В данном случае нужно добавить записи A для ns1, ns2, host1 и host2 следующим образом:
; name servers - A records
ns1.nyc3.example.com. IN A 10.128.10.11
ns2.nyc3.example.com. IN A 10.128.20.12
; 10.128.0.0/16 - A records
host1.nyc3.example.com. IN A 10.128.100.101
host2.nyc3.example.com. IN A 10.128.200.102
Сохраните и закройте файл.
В результате файл зоны имеет такой вид:
$TTL 604800
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
; name servers - A records
ns1.nyc3.example.com. IN A 10.128.10.11
ns2.nyc3.example.com. IN A 10.128.20.12
; 10.128.0.0/16 - A records
host1.nyc3.example.com. IN A 10.128.100.101
host2.nyc3.example.com. IN A 10.128.200.102
Теперь пора заняться файлом (файлами) зоны обратного просмотра.
Создание файла(ов) зоны обратного просмотра
Файлы зоны обратного просмотра определяют записи DNS PTR для обратного просмотра DNS. То есть, когда DNS получает запрос по IP-адресу, например, 10.128.100.101, он будет читать файлы этой зоны для разрешения соответствующего полного доменного имени (host1.nyc3.example.com в этом случае).
На ns1 для каждой зоны обратного просмотра, указанной в файле named.conf.local, создайте отдельный файл.
Отредактируйте файл, соответствующий зоне (зонам) обратного просмотра, определенной в named.conf.local:
sudo vi /etc/named/zones/db.10.128
Так же, как и в файле зоны прямого просмотра, здесь нужно отредактировать ns1 FQDN и заменить второй nyc3.example.com своим доменом. Редактируя файл зоны, необходимо также увеличить значение serial перед перезапуском процесса named. Мы увеличим его до 3. Этот блок должен выглядеть примерно так:
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
В конец файла добавьте записи своего сервера имен (замените имена своими данными). Обратите внимание, что во втором столбце указано, что это записи NS.
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
Затем добавьте записи PTR для всех ваших серверов, чьи IP-адреса находятся в подсети этой зоны. В данном примере она включает в себя все хосты, потому что все они находятся в подсети 10.128.0.0/16. Обратите внимание: первый столбец состоит из двух последних октетов внутренних IP-адресов серверов в обратном порядке. Не забудьте заменить имена и внутренние IP-адреса своими данными.
; PTR Records
11.10 IN PTR ns1.nyc3.example.com. ; 10.128.10.11
12.20 IN PTR ns2.nyc3.example.com. ; 10.128.20.12
101.100 IN PTR host1.nyc3.example.com. ; 10.128.100.101
102.200 IN PTR host2.nyc3.example.com. ; 10.128.200.102
Сохраните и закройте файл зоны. Повторите этот раздел для каждой отдельной зоны обратного просмотра.
В результате файл имеет такой вид:
$TTL 604800
@ IN SOA nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
; PTR Records
11.10 IN PTR ns1.nyc3.example.com. ; 10.128.10.11
12.20 IN PTR ns2.nyc3.example.com. ; 10.128.20.12
101.100 IN PTR host1.nyc3.example.com. ; 10.128.100.101
102.200 IN PTR host2.nyc3.example.com. ; 10.128.200.102
Проверка синтаксиса конфигурации BIND
Запустите следующую команду, чтобы убедиться, что в файлах нет ошибок:
sudo named-checkconf
Если ваши конфигурационные файлы named не содержат синтаксических ошибок, вы вернетесь в командную строку оболочки и не увидите сообщений об ошибках. Если команда обнаружит проблемы, просмотрите сообщение об ошибке и перечитайте раздел 2, а затем повторно запустите named-checkconf.
Команда named-checkzone может проверить правильность ваших файлов зон. Ее первый аргумент указывает имя зоны, а второй – соответствующий файл зоны, которые определены в named.conf.local.
Например, чтобы проверить конфигурацию зоны прямого просмотра nyc3.example.com, запустите следующую команду:
sudo named-checkzone nyc3.example.com /etc/named/zones/db.nyc3.example.com
А чтобы проверить конфигурацию зоны обратного просмотра 128.10.in-addr.arpa, выполните следующую команду:
sudo named-checkzone 128.10.in-addr.arpa /etc/named/zones/db.10.128
Проверив все конфигурационные файлы, вы можете перезапустить сервис BIND.
Запуск BIND
Чтобы запустить BIND, введите:
sudo systemctl start named
Затем его нужно включить как сервис, чтобы добавить в автозагрузку:
sudo systemctl enable named
Первичный DNS-сервер настроен и может обрабатывать запросы DNS. Теперь давайте создадим вторичный сервер.
3: Настройка вторичного DNS-сервера
В большинстве сред рекомендуется создать вторичный DNS-сервер, который будет отвечать на запросы, если первичный сервер выйдет из строя. К счастью, вторичный DNS-сервер намного проще настроить.
На ns2 отредактируйте файл named.conf.:
sudo vi /etc/named.conf
Примечание: Если хотите, вы можете пропустить эти инструкции и просто скопировать named.conf с ns1 на ns2, заменить внутренний IP-адрес и отключить allow transfer.
В начале, под существующим блоком options, добавьте блок ACL по имени trusted (с внутренними IP-адресами доверенных серверов). Это поместит ns1, ns2, host1 и host2 в список доверенных серверов.
acl "trusted" {
10.128.10.11; # ns1 - can be set to localhost
10.128.20.12; # ns2
10.128.100.101; # host1
10.128.200.102; # host2
};
Теперь, когда у вас есть список доверенных DNS-клиентов, можно отредактировать блок options. Добавьте внутренний IP-адрес в строку listen-on port 53 и раскомментируйте listen-on-v6:
options {
listen-on port 53 { 127.0.0.1; 10.128.20.12; };
# listen-on-v6 port 53 { ::1; };
...
В allow-query вместо localhost введите trusted.
...
options {
...
allow-query { trusted; }; # allows queries from "trusted" clients
...
В конец файла добавьте строку:
include "/etc/named/named.conf.local";
Теперь сохраните и закройте файл named.conf. В приведенной выше конфигурации указано, что только ваши доверенные серверы смогут запросить внешние домены у DNS-сервера.
Затем нужно определить DNS-зоны.
Отредактируйте файл named.conf.local:
sudo chmod 755 /etc/named
sudo vi /etc/named/named.conf.local
Определите вторичные зоны, соответствующие зонам первичного DNS-сервера. Обратите внимание, что тип должен быть slave, файл не содержит пути, и в нем есть директива masters, которая должна указывать внутренний IP-адрес первичного DNS-сервера. Если вы определили несколько зон обратного просмотра на первичном DNS-сервере, обязательно укажите их все здесь.
zone "nyc3.example.com" {
type slave;
file "slaves/db.nyc3.example.com";
masters { 10.128.10.11; }; # ns1 private IP
};
zone "128.10.in-addr.arpa" {
type slave;
file "slaves/db.10.128";
masters { 10.128.10.11; }; # ns1 private IP
};
Сохраните и закройте файл.
Чтобы проверить файлы на наличие ошибок, введите:
sudo named-checkconf
Если ошибок нет, запустите BIND:
sudo systemctl start named
Добавьте сервис в автозагрузку:
sudo systemctl enable named
Теперь у вас есть первичный и вторичный DNS-сервер. Пора настроить клиентские серверы.
4: Настройка DNS-клиентов
Прежде чем все ваши серверы из ACL trusted смогут запрашивать DNS-серверы, нужно настроить каждый из них для использования ns1 и ns2 в качестве серверов имен. Этот процесс зависит от ОС, но в большинстве дистрибутивов Linux для этого нужно добавить серверы имен в файл /etc/resolv.conf.
Клиенты CentOS
В CentOS, RedHat и Fedora Linux отредактируйте файл resolv.conf:
sudo vi /etc/resolv.conf
Добавьте следующие строки в начало файла, указав в них свои данные:
search nyc3.example.com # your private domain
nameserver 10.128.10.11 # ns1 private IP address
nameserver 10.128.20.12 # ns2 private IP address
Сохраните и закройте файл.
Настройка клиента завершена.
Клиенты Ubuntu
На серверах Ubuntu и Debian Linux вы можете отредактировать файл head, связанный с resolv.conf:
sudo vi /etc/resolvconf/resolv.conf.d/head
Добавьте в файл следующие строки (указав свои данные).
search nyc3.example.com # your private domain
nameserver 10.128.10.11 # ns1 private IP address
nameserver 10.128.20.12 # ns2 private IP address
Запустите resolvconf, чтобы сгенерировать новый файл resolv.conf.
sudo resolvconf -u
Настройка клиента завершена.
5: Тестирование клиентов
Используйте nslookup, чтобы проверить, могут ли ваши клиенты запрашивать серверы имен. Вы должны иметь возможность сделать это на всех клиентах, которые вы настроили и которые находятся в доверенном ACL.
Прямой просмотр
Чтобы выполнить прямой просмотр и извлечь IP-адрес хоста host1.nyc3.example.com, введите:
nslookup host1
Запрос host1 расширяется до host1.nyc3.example.com, поскольку параметр search содержит ваш частный субдомен, а запросы DNS будут пытаться просмотреть его, прежде чем искать хост в другом месте. Вывод команды выглядят следующим образом:
Server: 10.128.10.11
Address: 10.128.10.11#53
Name: host1.nyc3.example.com
Address: 10.128.100.101
Теперь попробуем обратный просмотр.
Обратный просмотр
Чтобы протестировать обратный просмотр, запросите:
nslookup 10.128.100.101
Команда должна вернуть такой вывод:
Server: 10.128.10.11
Address: 10.128.10.11#53
11.10.128.10.in-addr.arpa name = host1.nyc3.example.com.
Если все имена и IP-адреса разрешены с правильным значением, это означает, что ваши файлы зон настроены правильно. Если вы получили другие значения, обязательно просмотрите файлы зон на первичном DNS-сервере (например, db.nyc3.example.com и db.10.128).
Теперь рассмотрим сохранение записей в зоне.
6: Поддержка DNS-записей
Итак, у вас есть рабочий внутренний DNS, и вам необходимо сохранить свои записи DNS, чтобы они точно отражали вашу серверную среду.
Добавление хоста в DNS
Всякий раз, когда вы добавляете хост в свою среду (в том же центре данных), вам нужно добавить его и в DNS. Вот как это делается.
Первичный сервер:
- Файл зоны прямого просмотра: добавьте запись «А» для нового хоста, увеличьте значение Serial.
- Файл зоны обратного просмотра: добавьте запись PTR для нового хоста, увеличьте значение Serial.
- Добавьте внутренний IP-адрес нового хоста в ACL trusted (named.conf).
- Перезапустите BIND:
sudo systemctl reload named
Теперь ваш первичный сервер должен поддерживать новый хост.
Вторичный сервер:
- Добавьте внутренний IP нового хоста в ACL trusted (named.conf).
- Перезапустите BIND:
sudo systemctl reload named
Теперь ваш вторичный сервер должен поддерживать новый хост.
Чтобы настроить новый хост для поддержки DNS:
- Настройте поддержку в файле /etc/resolv.conf.
- Протестируйте работу хоста с помощью nslookup.
Удаление хоста из DNS
Если вы удалите хост из своей среды или просто хотите удалить его из DNS, просто удалите все данные о нем, которые вы добавили при настройке поддержки DNS.
Заключение
Теперь вы можете ссылаться на внутренние сетевые интерфейсы своих серверов по имени, а не по IP-адресу. Это упрощает настройку сервисов и приложений, поскольку вам больше не нужно запоминать IP-адреса, и файлы станет легче читать и понимать.
После настройки внутреннего DNS важно обеспечить DNS-серверам хорошую поддержку. Если они оба станут недоступными, ваши сервисы и приложения, которые полагаются на них, перестанут функционировать должным образом. Вот почему рекомендуется использовать в настройке DNS как минимум один вторичный сервер и поддерживать рабочие резервные копии всех серверов.
Tags: BIND, CentOS 7, DNS