Как настроить BIND в качестве DNS-сервера частной сети на CentOS 7

Вступление

Важная часть управления конфигурацией сервера и инфраструктурой включает в себя поддержание простого способа поиска сетевых интерфейсов и IP-адресов по имени путем настройки правильной системы доменных имен (DNS). Использование полных доменных имен (FQDN) вместо IP-адресов для указания сетевых адресов облегчает настройку служб и приложений и повышает удобство сопровождения файлов конфигурации. Настройка собственного DNS для вашей частной сети - отличный способ улучшить управление вашими серверами.

В этом руководстве мы рассмотрим, как настроить внутренний DNS-сервер, используя программное обеспечение сервера имен BIND (BIND9) в CentOS 7, которое может использоваться вашими виртуальными частными серверами (VPS) для разрешения частных имен хостов и частных IP-адресов. адреса. Это обеспечивает центральный способ управления внутренними именами хостов и частными IP-адресами, что необходимо, когда ваша среда расширяется до нескольких хостов.

Версия этого руководства для Ubuntu находится вhere.

Предпосылки

Для завершения этого урока вам понадобится следующее:

  • Некоторые серверы, которые работают в одном центре обработки данных и имеютprivate networking enabled

  • Новый VPS в качестве основного DNS-сервера,ns1

  • Необязательно: новый VPS в качестве вторичного DNS-сервера,ns2

  • Доступ с правами root ко всему вышеперечисленному (steps 1-4 here)

Если вы не знакомы с концепциями DNS, рекомендуется прочитать хотя бы первые три части нашегоIntroduction to Managing DNS.

Пример хостов

Для примера, мы будем предполагать следующее:

  • У нас есть два существующих VPS, называемых «host1» и «host2»

  • Оба VPS существуют в центре обработки данных nyc3

  • На обоих VPS включены частные сети (и они находятся в подсети 10.128.0.0/16)

  • Оба VPS так или иначе связаны с нашим веб-приложением, которое работает на «example.com».

Исходя из этих предположений, мы решили, что имеет смысл использовать схему именования, которая использует «nyc3.example.com» для ссылки на нашу частную подсеть или зону. Следовательно, частное полное доменное имя (FQDN)host1 будет «host1.nyc3.example.com». Обратитесь к следующей таблице соответствующих деталей:

Host Role Частное полное доменное имя Частный IP-адрес

host1

Общий хост 1

host1.nyc3.example.com

10.128.100.101

host2

Общий хост 2

host2.nyc3.example.com

10.128.200.102

Note: Существующие настройки будут отличаться, но примеры имен и IP-адресов будут использоваться для демонстрации того, как настроить DNS-сервер для обеспечения работающего внутреннего DNS. Вы сможете легко адаптировать эту настройку к своей среде, заменив имена хостов и частные IP-адреса своими собственными. Нет необходимости использовать имя региона центра обработки данных в вашей схеме именования, но мы используем его здесь для обозначения того, что эти хосты принадлежат частной сети конкретного центра обработки данных. Если вы используете несколько центров обработки данных, вы можете настроить внутренний DNS в каждом соответствующем центре данных.

Наша цель

К концу этого руководства у нас будет первичный DNS-серверns1 и, возможно, вторичный DNS-серверns2, который будет служить резервным.

Вот таблица с примерами имен и IP-адресов:

Host Role Частное полное доменное имя Частный IP-адрес

ns1

Первичный DNS-сервер

ns1.nyc3.example.com

10.128.10.11

ns2

Вторичный DNS-сервер

ns2.nyc3.example.com

10.128.20.12

Давайте начнем с установки нашего основного DNS-сервера ns1.

Установите BIND на DNS-серверы

Note: Текст, выделенный вred, важен! Он часто используется для обозначения чего-то, что должно быть заменено вашими собственными настройками или что оно должно быть изменено или добавлено в файл конфигурации. Например, если вы видите что-то вроде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. Таким образом, многие из файлов называются «именованными», а не «BIND».

Наns1 откройте файлnamed.conf для редактирования:

sudo vi /etc/named.conf

Над существующим блокомoptions создайте новый блок ACL под названием «доверенный». Здесь мы определим список клиентов, которым мы будем разрешать рекурсивные DNS-запросы (т.е. ваши серверы, которые находятся в том же центре обработки данных, что и ns1). Используя наш пример частных IP-адресов, мы добавимns1,ns2,host1 иhost2 в наш список доверенных клиентов:

/etc/named.conf — 1 of 4

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:

/etc/named.conf — 2 of 4

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» на «доверенный»:

/etc/named.conf — 3 of 4

...
options {
...
        allow-transfer { 10.128.20.12; };      # disable zone transfers by default
...
        allow-query { trusted; };  # allows queries from "trusted" clients
...

В конце файла добавьте следующую строку:

/etc/named.conf — 4 of 4

include "/etc/named/named.conf.local";

Теперь сохраните и выйдите изnamed.conf. Приведенная выше конфигурация указывает, что только ваши собственные серверы («доверенные») смогут запрашивать ваш DNS-сервер.

Далее мы настроим локальный файл, чтобы указать наши DNS-зоны.

Настроить локальный файл

Наns1 откройте файлnamed.conf.local для редактирования:

sudo vi /etc/named/named.conf.local

Файл должен быть пустым. Здесь мы укажем нашу прямую и обратную зоны.

Добавьте прямую зону следующими строками (замените имя зоны своим):

/etc/named/named.conf.local — 1 of 2

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»):

/etc/named/named.conf.local — 2 of 2

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». Это должно выглядеть примерно так:

/etc/named/zones/db.nyc3.example.com — 1 of 3

@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL

После этого добавьте свои записи сервера имен со следующими строками (замените имена своими). Обратите внимание, что во втором столбце указано, что это записи «NS»:

/etc/named/zones/db.nyc3.example.com — 2 of 3

; 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 следующим образом:

/etc/named/zones/db.nyc3.example.com — 3 of 3

; 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.

Наш последний пример файла зоны пересылки выглядит следующим образом:

/etc/named/zones/db.nyc3.example.com — complete

$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». Это должно выглядеть примерно так:

/etc/named/zones/db.10.128 — 1 of 3

@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

После этого добавьте свои записи сервера имен со следующими строками (замените имена своими). Обратите внимание, что во втором столбце указано, что это записи «NS»:

/etc/named/zones/db.10.128 — 2 of 3

; 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-адреса в соответствии с вашими серверами:

/etc/named/zones/db.10.128 — 3 of 3

; 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

Сохраните и закройте файл обратной зоны (повторите этот раздел, если вам нужно добавить больше файлов обратной зоны).

Наш последний пример обратного файла зоны выглядит следующим образом:

/etc/named/zones/db.10.128 — complete

$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

Если в ваших именованных файлах конфигурации нет синтаксических ошибок, вы вернетесь в командную строку и не увидите сообщений об ошибках. Если есть проблемы с вашими файлами конфигурации, просмотрите сообщение об ошибке и разделConfigure Primary DNS Server, затем попробуйте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. Давайте перейдем к созданию вторичного DNS-сервера.

Настройте дополнительный DNS-сервер

В большинстве сред рекомендуется установить дополнительный DNS-сервер, который будет отвечать на запросы, если основной станет недоступным. К счастью, вторичный DNS-сервер гораздо проще настроить.

Наns2 отредактируйте файлnamed.conf:

sudo vi /etc/named.conf

[.note] #Note: Если вы предпочитаете пропустить эти инструкции, вы можете скопировать файлns1named.conf и изменить его так, чтобы он прослушивал частный IP-адресns2, не разрешая переводы.
#

Над существующим блокомoptions создайте новый блок ACL под названием «доверенный». Здесь мы определим список клиентов, которым мы будем разрешать рекурсивные DNS-запросы (т.е. ваши серверы, которые находятся в том же центре обработки данных, что и ns1). Используя наш пример частных IP-адресов, мы добавимns1,ns2,host1 иhost2 в наш список доверенных клиентов:

/etc/named.conf — 1 of 4

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:

/etc/named.conf — 2 of 4

options {
        listen-on port 53 { 127.0.0.1; 10.128.20.12; };
#        listen-on-v6 port 53 { ::1; };
...

Измените директивуallow-query с «localhost» на «доверенный»:

/etc/named.conf — 3 of 4

...
options {
...
        allow-query { trusted; }; # allows queries from "trusted" clients
...

В конце файла добавьте следующую строку:

/etc/named.conf — 4 of 4

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-сервере, обязательно добавьте их все здесь:

/etc/named/named.conf.local

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):

/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

Теперь сохраните и выйдите. Ваш клиент теперь настроен на использование ваших DNS-серверов.

Клиенты Ubuntu

В Ubuntu и Debian Linux VPS вы можете редактировать файлhead, который добавляется кresolv.conf при загрузке:

sudo vi /etc/resolvconf/resolv.conf.d/head

Добавьте в файл следующие строки (замените свой частный домен и частные IP-адресаns1 иns2):

/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

Ваш клиент теперь настроен на использование ваших 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-адрес вашего нового хоста в «доверенный» ACL (named.conf.options)

Затем перезагрузите BIND:

sudo systemctl reload named

Вторичный сервер имен

  • Добавьте частный IP-адрес вашего нового хоста в «доверенный» ACL (named.conf.options)

Затем перезагрузите BIND:

sudo systemctl reload named

Настройте новый хост для использования вашего DNS

  • Настройте resolv.conf для использования ваших DNS-серверов

  • Тест с использованиемnslookup

Удаление хоста из DNS

Если вы удаляете хост из своей среды или хотите просто извлечь его из DNS, просто удалите все, что было добавлено, когда вы добавили сервер в DNS (т.е. обратный шаг выше).

Заключение

Теперь вы можете обращаться к частным сетевым интерфейсам ваших серверов по имени, а не по IP-адресу. Это упрощает настройку служб и приложений, поскольку вам больше не нужно запоминать частные IP-адреса, а файлы легче читать и понимать. Кроме того, теперь вы можете изменить свои конфигурации так, чтобы они указывали на новые серверы в одном месте, ваш основной DNS-сервер, вместо того, чтобы редактировать различные распределенные файлы конфигурации, что облегчает обслуживание.

После того, как вы настроили внутренний DNS и ваши файлы конфигурации используют частные полные доменные имена для определения сетевых подключений, этоcritical, что ваши DNS-серверы обслуживаются должным образом. Если они оба станут недоступны, ваши сервисы и приложения, которые на них полагаются, перестанут функционировать должным образом. Вот почему рекомендуется настроить DNS как минимум с одним вторичным сервером и поддерживать рабочие резервные копии всех из них.

Related