Как настроить BIND в качестве DNS-сервера частной сети в CentOS 7
Введение
Важная часть управления конфигурацией сервера и инфраструктурой включает поддержку простого способа поиска сетевых интерфейсов и IP-адресов по имени путем настройки надлежащей системы доменных имен (DNS). Использование полных доменных имен (FQDN) вместо IP-адресов для указания сетевых адресов упрощает настройку служб и приложений и повышает удобство сопровождения файлов конфигурации. Настройка собственного DNS для вашей частной сети — отличный способ улучшить управление вашими серверами.
В этом руководстве мы рассмотрим, как настроить внутренний DNS-сервер с помощью программного обеспечения сервера имен BIND (BIND9) в CentOS 7, который может использоваться вашими виртуальными частными серверами (VPS) для разрешения частных имен хостов и частных IP-адресов. адреса. Это обеспечивает централизованный способ управления вашими внутренними именами хостов и частными IP-адресами, что необходимо, когда ваша среда расширяется до нескольких хостов.
Версию этого руководства для Ubuntu можно найти здесь.
Предпосылки
Для выполнения этого урока вам потребуется следующее:
- Некоторые серверы, которые работают в одном центре обработки данных и имеют включенную частную сеть
- Новый VPS для использования в качестве основного DNS-сервера, ns1
- Необязательно: новый VPS для использования в качестве вторичного DNS-сервера, ns2
- Корневой доступ ко всему вышеперечисленному (шаги 1–4 здесь)
Если вы не знакомы с понятиями DNS, рекомендуется прочитать хотя бы первые три части нашего руководства «Введение в управление DNS».
Примеры хостов
Для примера будем исходить из следующего:
- У нас есть два существующих VPS с именами \host1 и \host2
- Оба VPS находятся в центре обработки данных nyc3.
- На обоих VPS включена частная сеть (и они находятся в подсети 10.128.0.0/16)
- Оба VPS каким-то образом связаны с нашим веб-приложением, работающим на \example.com
Исходя из этих предположений, мы решили, что имеет смысл использовать схему именования, в которой используется \host1.nyc3.example.com. Соответствующие сведения см. в следующей таблице:
Host | Role | Private FQDN | Private IP Address |
---|---|---|---|
host1 | Generic Host 1 | host1.nyc3.example.com | 10.128.100.101 |
host2 | Generic Host 2 | host2.nyc3.example.com | 10.128.200.102 |
Примечание. Ваша существующая настройка будет отличаться, но примеры имен и IP-адресов будут использоваться для демонстрации того, как настроить DNS-сервер для обеспечения функционирующего внутреннего DNS. Вы сможете легко адаптировать эту настройку к своей среде, заменив имена хостов и частные IP-адреса своими собственными. Нет необходимости использовать название региона центра обработки данных в вашей схеме именования, но мы используем его здесь, чтобы обозначить, что эти хосты принадлежат к частной сети определенного центра обработки данных. Если вы используете несколько центров обработки данных, вы можете настроить внутренний DNS в каждом соответствующем центре обработки данных.
Наша цель
К концу этого руководства у нас будет основной DNS-сервер, ns1, и, при необходимости, дополнительный DNS-сервер, ns2, который будет служить в качестве резервного.
Вот таблица с примерами имен и IP-адресов:
Host | Role | Private FQDN | Private IP Address |
---|---|---|---|
ns1 | Primary DNS Server | ns1.nyc3.example.com | 10.128.10.11 |
ns2 | Secondary DNS Server | ns2.nyc3.example.com | 10.128.20.12 |
Давайте начнем с установки нашего основного DNS-сервера ns1.
Установите BIND на DNS-серверы
Примечание. Текст, выделенный красным, важен! Он часто используется для обозначения чего-то, что необходимо заменить вашими собственными настройками или что это следует изменить или добавить в файл конфигурации. Например, если вы видите что-то вроде host1.nyc3.example.com, замените его на полное доменное имя вашего собственного сервера. Аналогичным образом, если вы видите host1_private_IP, замените его частным IP-адресом вашего собственного сервера.
На обоих DNS-серверах, ns1 и ns2, установите BIND с помощью yum:
- sudo yum install bind bind-utils
Подтвердите приглашение, введя y
.
Теперь, когда BIND установлен, давайте настроим основной DNS-сервер.
Настройка основного DNS-сервера
Конфигурация BIND состоит из нескольких файлов, которые включаются из основного файла конфигурации, named.conf
. Эти имена файлов начинаются с \named, потому что это имя процесса, который запускает BIND. Мы начнем с настройки файла параметров.
Настроить привязку
Процесс BIND известен как named. Таким образом, многие файлы ссылаются на «named», а не на «BIND».
На ns1 откройте файл named.conf
для редактирования:
- sudo vi /etc/named.conf
Над существующим блоком options
создайте новый блок ACL с именем \trusted. Здесь мы определим список клиентов, от которых мы разрешим рекурсивные DNS-запросы (т.е. ваши серверы, которые находятся в одном и том же центра обработки данных как ns1). Используя наш пример частных 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-адрес ns1 в директиву 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 на\«доверенный»:
...
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-сервер.
Далее мы настроим локальный файл, чтобы указать наши зоны DNS.
Настроить локальный файл
На ns1 откройте файл named.conf.local
для редактирования:
- sudo vi /etc/named/named.conf.local
Файл должен быть пуст. Здесь мы укажем наши прямые и обратные зоны.
Добавьте зону пересылки со следующими строками (замените имя зоны на свое):
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 своим собственным полным доменным именем, а затем замените второе \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» (замените имена и частные IP-адреса). Используя наши примеры имен и частных IP-адресов, мы добавим записи 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
Сохраните и закройте файл db.nyc3.example.com
.
Наш последний пример файла прямой зоны выглядит следующим образом:
- $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 своим собственным полным доменным именем, а затем замените второе \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
Выполните следующую команду, чтобы проверить синтаксис файлов named.conf*
:
- sudo named-checkconf
Если в ваших именованных файлах конфигурации нет синтаксических ошибок, вы вернетесь к командной строке и не увидите никаких сообщений об ошибках. Если есть проблемы с вашими файлами конфигурации, просмотрите сообщение об ошибке и раздел «Настройка основного DNS-сервера», а затем повторите попытку 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.
Начать привязку
Начать привязку:
- sudo systemctl start named
Теперь вы захотите включить его, чтобы он запускался при загрузке:
- sudo systemctl enable named
Теперь ваш основной DNS-сервер настроен и готов отвечать на DNS-запросы. Перейдем к созданию вторичного DNS-сервера.
Настройка вторичного DNS-сервера
В большинстве сред рекомендуется настроить дополнительный DNS-сервер, который будет отвечать на запросы, если основной становится недоступным. К счастью, дополнительный DNS-сервер настроить намного проще.
На ns2 отредактируйте файл named.conf
:
- sudo vi /etc/named.conf
Примечание. Если вы предпочитаете пропустить эти инструкции, вы можете скопировать файл named.conf
для ns1 и изменить его, чтобы он прослушивал файлы ns2. частный IP-адрес и не разрешать передачи.
Над существующим блоком options
создайте новый блок ACL с именем \trusted. Здесь мы определим список клиентов, от которых мы разрешим рекурсивные DNS-запросы (т.е. ваши серверы, которые находятся в одном и том же центра обработки данных как ns1). Используя наш пример частных 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-адрес ns1 в директиву 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
.
Теперь отредактируйте файл named.conf.local
:
- sudo chmod 755 /etc/named
- sudo vi /etc/named/named.conf.local
Определите подчиненные зоны, которые соответствуют основным зонам на первичном DNS-сервере. Обратите внимание, что тип — «ведомый», файл не содержит пути, и есть директива 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
- };
Теперь сохраните и выйдите из named.conf.local
.
Выполните следующую команду, чтобы проверить правильность ваших файлов конфигурации:
- sudo named-checkconf
Как только это проверится, запустите BIND:
- sudo systemctl start named
Включите BIND для запуска при загрузке:
sudo systemctl enable named
Теперь у вас есть первичный и вторичный DNS-серверы для разрешения имени частной сети и IP-адреса. Теперь вы должны настроить свои серверы для использования ваших частных DNS-серверов.
Настройка DNS-клиентов
Прежде чем все ваши серверы в «доверенном» ACL-списке смогут запрашивать ваши DNS-серверы, вы должны настроить каждый из них на использование ns1 и ns2 в качестве серверов имен. Этот процесс зависит от в ОС, но для большинства дистрибутивов Linux необходимо добавить серверы имен в файл /etc/resolv.conf
.
CentOS-клиенты
В CentOS, RedHat и Fedora Linux VPS просто отредактируйте файл resolv.conf
:
- sudo vi /etc/resolv.conf
Затем добавьте следующие строки в начало файла (замените свой частный домен и частные IP-адреса ns1 и ns2):
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
Теперь сохраните и выйдите. Теперь ваш клиент настроен на использование ваших DNS-серверов.
Клиенты Ubuntu
В Ubuntu и Debian Linux VPS вы можете отредактировать файл head
, который добавляется к resolv.conf
при загрузке:
- sudo vi /etc/resolvconf/resolv.conf.d/head
Добавьте в файл следующие строки (замените свой частный домен и частные IP-адреса ns1 и ns2):
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
Теперь ваш клиент настроен на использование ваших DNS-серверов.
Тестовые клиенты
Используйте nslookup
, включенный в пакет \bind-utils, чтобы проверить, могут ли ваши клиенты запрашивать ваши серверы имен. Вы должны иметь возможность делать это на всех клиентах, которые вы настроили и используете. в «доверенном» ACL.
Прямой поиск
Например, мы можем выполнить прямой поиск, чтобы получить IP-адрес host1.nyc3.example.com, выполнив следующую команду:
- nslookup host1
Запрос «host1» заменяется на «host1.nyc3.example.com», так как для параметра search
задан ваш частный поддомен, а DNS-запросы будут пытаться просмотреть этот поддомен, прежде чем искать хост в другом месте. . Вывод приведенной выше команды будет выглядеть следующим образом:
Output:Server: 10.128.10.11
Address: 10.128.10.11#53
Name: host1.nyc3.example.com
Address: 10.128.100.101
Обратный поиск
Чтобы проверить обратный поиск, запросите DNS-сервер с частным IP-адресом host1:
- nslookup 10.128.100.101
Вы должны увидеть вывод, который выглядит следующим образом:
Output: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
).
Поздравляем! Теперь ваши внутренние DNS-серверы настроены правильно! Теперь мы рассмотрим ведение записей вашей зоны.
Ведение DNS-записей
Теперь, когда у вас есть работающий внутренний DNS, вам необходимо поддерживать записи DNS, чтобы они точно отражали среду вашего сервера.
Добавление хоста в DNS
Всякий раз, когда вы добавляете хост в свою среду (в том же центре обработки данных), вы захотите добавить его в DNS. Вот список шагов, которые вам необходимо предпринять:
Основной сервер имен
- Файл зоны переадресации: добавьте запись \A для нового хоста, увеличьте значение \Serial
- Файл обратной зоны: добавьте запись \PTR для нового хоста, увеличьте значение \Serial
- Добавьте частный IP-адрес нового хоста в \доверенный список управления доступом (
named.conf.options
)
Затем перезагрузите BIND:
- sudo systemctl reload named
Дополнительный сервер имен
- Добавьте частный IP-адрес нового хоста в \доверенный список управления доступом (
named.conf.options
)
Затем перезагрузите BIND:
- sudo systemctl reload named
Настройте новый хост для использования вашего DNS
- Настройте resolv.conf для использования ваших DNS-серверов
- Протестируйте с помощью
nslookup
Удаление хоста из DNS
Если вы удаляете хост из своей среды или хотите просто вывести его из DNS, просто удалите все, что было добавлено при добавлении сервера в DNS (т. е. в обратном порядке вышеописанным действиям).
Заключение
Теперь вы можете обращаться к частным сетевым интерфейсам ваших серверов по имени, а не по IP-адресу. Это упрощает настройку служб и приложений, поскольку вам больше не нужно запоминать частные IP-адреса, а файлы будут легче читать и понимать. Кроме того, теперь вы можете изменить свои конфигурации, чтобы они указывали на новые серверы в одном месте, ваш основной DNS-сервер, вместо того, чтобы редактировать множество распределенных файлов конфигурации, что упрощает обслуживание.
После того, как вы настроили свой внутренний DNS и ваши файлы конфигурации используют частные полные доменные имена для указания сетевых подключений, очень важно, чтобы ваши DNS-серверы обслуживались должным образом. Если они оба станут недоступны, ваши службы и приложения, которые полагаются на них, перестанут работать должным образом. Вот почему рекомендуется настроить DNS как минимум с одним вторичным сервером и поддерживать работающие резервные копии всех из них.