Поиск по сайту:

Как настроить 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:

  1. sudo yum install bind bind-utils

Подтвердите приглашение, введя y.

Теперь, когда BIND установлен, давайте настроим основной DNS-сервер.

Настройка основного DNS-сервера

Конфигурация BIND состоит из нескольких файлов, которые включаются из основного файла конфигурации, named.conf. Эти имена файлов начинаются с \named, потому что это имя процесса, который запускает BIND. Мы начнем с настройки файла параметров.

Настроить привязку

Процесс BIND известен как named. Таким образом, многие файлы ссылаются на «named», а не на «BIND».

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

  1. 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 для редактирования:

  1. 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:

  1. sudo chmod 755 /etc/named
  2. sudo mkdir /etc/named/zones

Теперь давайте отредактируем наш файл прямой зоны:

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

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

  1. $TTL 604800
  2. @ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
  3. 3 ; Serial
  4. 604800 ; Refresh
  5. 86400 ; Retry
  6. 2419200 ; Expire
  7. 604800 ) ; Negative Cache TTL
  8. ;
  9. ; name servers - NS records
  10. IN NS ns1.nyc3.example.com.
  11. IN NS ns2.nyc3.example.com.
  12. ; name servers - A records
  13. ns1.nyc3.example.com. IN A 10.128.10.11
  14. ns2.nyc3.example.com. IN A 10.128.20.12
  15. ; 10.128.0.0/16 - A records
  16. host1.nyc3.example.com. IN A 10.128.100.101
  17. 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:

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

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

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

  1. $TTL 604800
  2. @ IN SOA nyc3.example.com. admin.nyc3.example.com. (
  3. 3 ; Serial
  4. 604800 ; Refresh
  5. 86400 ; Retry
  6. 2419200 ; Expire
  7. 604800 ) ; Negative Cache TTL
  8. ; name servers
  9. IN NS ns1.nyc3.example.com.
  10. IN NS ns2.nyc3.example.com.
  11. ; PTR Records
  12. 11.10 IN PTR ns1.nyc3.example.com. ; 10.128.10.11
  13. 12.20 IN PTR ns2.nyc3.example.com. ; 10.128.20.12
  14. 101.100 IN PTR host1.nyc3.example.com. ; 10.128.100.101
  15. 102.200 IN PTR host2.nyc3.example.com. ; 10.128.200.102

Проверьте синтаксис конфигурации BIND

Выполните следующую команду, чтобы проверить синтаксис файлов named.conf*:

  1. sudo named-checkconf

Если в ваших именованных файлах конфигурации нет синтаксических ошибок, вы вернетесь к командной строке и не увидите никаких сообщений об ошибках. Если есть проблемы с вашими файлами конфигурации, просмотрите сообщение об ошибке и раздел «Настройка основного DNS-сервера», а затем повторите попытку named-checkconf.

Команду named-checkzone можно использовать для проверки правильности ваших файлов зон. Его первый аргумент указывает имя зоны, а второй аргумент указывает соответствующий файл зоны, которые оба определены в named.conf.local.

Например, чтобы проверить конфигурацию зоны пересылки \nyc3.example.com, выполните следующую команду (измените имена в соответствии с вашей зоной пересылки и файлом):

  1. sudo named-checkzone nyc3.example.com /etc/named/zones/db.nyc3.example.com

И чтобы проверить конфигурацию обратной зоны \128.10.in-addr.arpa”, выполните следующую команду (измените числа, чтобы они соответствовали вашей обратной зоне и файлу):

  1. sudo named-checkzone 128.10.in-addr.arpa /etc/named/zones/db.10.128

Когда все ваши файлы конфигурации и зоны не содержат ошибок, вы должны быть готовы перезапустить службу BIND.

Начать привязку

Начать привязку:

  1. sudo systemctl start named

Теперь вы захотите включить его, чтобы он запускался при загрузке:

  1. sudo systemctl enable named

Теперь ваш основной DNS-сервер настроен и готов отвечать на DNS-запросы. Перейдем к созданию вторичного DNS-сервера.

Настройка вторичного DNS-сервера

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

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

  1. 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:

  1. sudo chmod 755 /etc/named
  2. sudo vi /etc/named/named.conf.local

Определите подчиненные зоны, которые соответствуют основным зонам на первичном DNS-сервере. Обратите внимание, что тип — «ведомый», файл не содержит пути, и есть директива masters, которая должна быть установлена на частный IP-адрес основного DNS-сервера. Если вы определили несколько обратных зон в основной DNS-сервер, обязательно добавьте их все сюда:

  1. zone "nyc3.example.com" {
  2. type slave;
  3. file "slaves/db.nyc3.example.com";
  4. masters { 10.128.10.11; }; # ns1 private IP
  5. };
  6. zone "128.10.in-addr.arpa" {
  7. type slave;
  8. file "slaves/db.10.128";
  9. masters { 10.128.10.11; }; # ns1 private IP
  10. };

Теперь сохраните и выйдите из named.conf.local.

Выполните следующую команду, чтобы проверить правильность ваших файлов конфигурации:

  1. sudo named-checkconf

Как только это проверится, запустите BIND:

  1. 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:

  1. 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 при загрузке:

  1. 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:

  1. sudo resolvconf -u

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

Тестовые клиенты

Используйте nslookup, включенный в пакет \bind-utils, чтобы проверить, могут ли ваши клиенты запрашивать ваши серверы имен. Вы должны иметь возможность делать это на всех клиентах, которые вы настроили и используете. в «доверенном» ACL.

Прямой поиск

Например, мы можем выполнить прямой поиск, чтобы получить IP-адрес host1.nyc3.example.com, выполнив следующую команду:

  1. 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:

  1. 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:

  1. sudo systemctl reload named

Дополнительный сервер имен

  • Добавьте частный IP-адрес нового хоста в \доверенный список управления доступом (named.conf.options)

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

  1. sudo systemctl reload named

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

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

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

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

Заключение

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

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