Как настроить BIND в качестве DNS-сервера частной сети в Ubuntu 14.04
Введение
Важная часть управления конфигурацией сервера и инфраструктурой включает поддержку простого способа поиска сетевых интерфейсов и IP-адресов по имени путем настройки надлежащей системы доменных имен (DNS). Использование полных доменных имен (FQDN) вместо IP-адресов для указания сетевых адресов упрощает настройку служб и приложений и повышает удобство сопровождения файлов конфигурации. Настройка собственного DNS для вашей частной сети — отличный способ улучшить управление вашими серверами.
В этом руководстве мы рассмотрим, как настроить внутренний DNS-сервер с помощью программного обеспечения сервера имен BIND (BIND9) в Ubuntu 14.04, который может использоваться вашими виртуальными частными серверами (VPS) для разрешения частных имен хостов и частных IP-адресов. адреса. Это обеспечивает централизованный способ управления вашими внутренними именами хостов и частными IP-адресами, что необходимо, когда ваша среда расширяется до нескольких хостов.
Версию этого руководства для CentOS можно найти здесь.
Предпосылки
Для выполнения этого урока вам потребуется следующее:
- Некоторые серверы, которые работают в одном центре обработки данных и имеют включенную частную сеть
- Новый 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, обновите apt:
- sudo apt-get update
Теперь установите BIND:
- sudo apt-get install bind9 bind9utils bind9-doc
Режим IPv4
Прежде чем продолжить, давайте установим BIND в режим IPv4. На обоих серверах отредактируйте файл параметров службы bind9
:
- sudo vi /etc/default/bind9
Добавьте «-4» к переменной OPTIONS
. Это должно выглядеть следующим образом:
OPTIONS="-4 -u bind"
Сохранить и выйти.
Теперь, когда BIND установлен, давайте настроим основной DNS-сервер.
Настройка основного DNS-сервера
Конфигурация BIND состоит из нескольких файлов, которые включаются из основного файла конфигурации, named.conf
. Эти имена файлов начинаются с \named, потому что это имя процесса, который запускает BIND. Мы начнем с настройки файла параметров.
Настроить файл параметров
На ns1 откройте файл named.conf.options
для редактирования:
- sudo vi /etc/bind/named.conf.options
Над существующим блоком 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
. В настоящее время начало блока выглядит следующим образом:
options {
directory "/var/cache/bind";
...
}
Под директивой directory
добавьте выделенные строки конфигурации (и замените их правильным IP-адресом ns1), чтобы это выглядело примерно так:
options {
directory "/var/cache/bind";
recursion yes; # enables resursive queries
allow-recursion { trusted; }; # allows recursive queries from "trusted" clients
listen-on { 10.128.10.11; }; # ns1 private IP address - listen on private network only
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
8.8.4.4;
};
...
};
Теперь сохраните и выйдите из named.conf.options
. Приведенная выше конфигурация указывает, что только ваши собственные серверы («доверенные») смогут запрашивать ваш DNS-сервер.
Далее мы настроим локальный файл, чтобы указать наши зоны DNS.
Настроить локальный файл
На ns1 откройте файл named.conf.local
для редактирования:
- sudo vi /etc/bind/named.conf.local
Если не считать нескольких комментариев, файл должен быть пустым. Здесь мы укажем наши прямые и обратные зоны.
Добавьте зону пересылки со следующими строками (замените имя зоны на свое):
zone "nyc3.example.com" {
type master;
file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
allow-transfer { 10.128.20.12; }; # ns2 private IP address - secondary
};
Предполагая, что наша частная подсеть — 10.128.0.0/16, добавьте обратную зону с помощью следующих строк (обратите внимание, что имя нашей обратной зоны начинается с \128.10, что является перестановкой октета \10.128 »):
zone "128.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.10.128"; # 10.128.0.0/16 subnet
allow-transfer { 10.128.20.12; }; # ns2 private IP address - secondary
};
Если ваши серверы охватывают несколько частных подсетей, но находятся в одном центре обработки данных, обязательно укажите дополнительную зону и файл зоны для каждой отдельной подсети. Когда вы закончите добавлять все нужные вам зоны, сохраните и закройте файл named.conf.local
.
Теперь, когда наши зоны указаны в BIND, нам нужно создать соответствующие файлы прямой и обратной зон.
Создать файл прямой зоны
В файле прямой зоны мы определяем записи DNS для прямого поиска DNS. То есть, когда DNS получает запрос имени, например, \host1.nyc3.example.com, он будет искать в файле зоны пересылки для разрешения соответствующего частного IP-адреса host1.
Давайте создадим каталог, в котором будут находиться файлы нашей зоны. Согласно нашей конфигурации named.conf.local, это место должно быть /etc/bind/zones
:
- sudo mkdir /etc/bind/zones
Мы будем основывать наш файл прямой зоны на образце файла зоны db.local
. Скопируйте его в нужное место с помощью следующих команд:
- cd /etc/bind/zones
- sudo cp ../db.local ./db.nyc3.example.com
Теперь давайте отредактируем наш файл прямой зоны:
- sudo vi /etc/bind/zones/db.nyc3.example.com
Изначально это будет выглядеть примерно так:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost. ; delete this line
@ IN A 127.0.0.1 ; delete this line
@ IN AAAA ::1 ; delete this line
Во-первых, вы захотите отредактировать запись SOA. Замените первый \localhost на полное доменное имя ns1, затем замените \root.localhost на \admin.nyc3.example.com. Кроме того, каждый раз, когда вы редактируете файл зоны, вам следует увеличить значение serial перед перезапуском процесса named
— мы увеличим его до \3. Это должно выглядеть примерно так:
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
Теперь удалите три записи в конце файла (после записи SOA). Если вы не знаете, какие строки удалить, они помечены комментарием \удалить эту строку выше.
В конце файла добавьте свои записи серверов имен со следующими строками (замените имена своими). Обратите внимание, что во втором столбце указано, что это записи \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
, создайте файл обратной зоны. Мы будем основывать наши файлы обратной зоны на образце файла зоны db.127
. Скопируйте его в нужное место с помощью следующих команд (заменив имя файла назначения, чтобы оно соответствовало вашему определению обратной зоны):
- cd /etc/bind/zones
- sudo cp ../db.127 ./db.10.128
Отредактируйте файл обратной зоны, который соответствует обратной зоне (зонам), определенным в named.conf.local
:
- sudo vi /etc/bind/zones/db.10.128
Изначально это будет выглядеть примерно так:
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost. ; delete this line
1.0.0 IN PTR localhost. ; delete this line
Так же, как и в файле прямой зоны, вы захотите отредактировать запись SOA и увеличить значение serial. Это должно выглядеть примерно так:
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
Теперь удалите две записи в конце файла (после записи SOA). Если вы не знаете, какие строки удалить, они помечены комментарием \удалить эту строку выше.
В конце файла добавьте свои записи серверов имен со следующими строками (замените имена своими). Обратите внимание, что во втором столбце указано, что это записи \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 db.nyc3.example.com
И чтобы проверить конфигурацию обратной зоны \128.10.in-addr.arpa”, выполните следующую команду (измените числа, чтобы они соответствовали вашей обратной зоне и файлу):
- sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128
Когда все ваши файлы конфигурации и зоны не содержат ошибок, вы должны быть готовы перезапустить службу BIND.
Перезапустить привязку
Перезапустите привязку:
- sudo service bind9 restart
Теперь ваш основной DNS-сервер настроен и готов отвечать на DNS-запросы. Перейдем к созданию вторичного DNS-сервера.
Настройка вторичного DNS-сервера
В большинстве сред рекомендуется настроить дополнительный DNS-сервер, который будет отвечать на запросы, если основной становится недоступным. К счастью, дополнительный DNS-сервер настроить намного проще.
На ns2 отредактируйте файл named.conf.options
:
- sudo vi /etc/bind/named.conf.options
В верхней части файла добавьте ACL с частными IP-адресами всех ваших доверенных серверов:
acl "trusted" {
10.128.10.11; # ns1
10.128.20.12; # ns2 - can be set to localhost
10.128.100.101; # host1
10.128.200.102; # host2
};
Под директивой directory
добавьте следующие строки:
recursion yes;
allow-recursion { trusted; };
listen-on { 10.128.20.12; }; # ns2 private IP address
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
8.8.4.4;
};
Сохраните и закройте named.conf.options
. Этот файл должен выглядеть точно так же, как файл named.conf.options
для ns1, за исключением того, что он должен быть настроен для прослушивания частного IP-адреса ns2. .
Теперь отредактируйте файл named.conf.local
:
- sudo vi /etc/bind/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
Как только это проверится, перезапустите привязку
- sudo service bind9 restart
Теперь у вас есть первичный и вторичный DNS-серверы для разрешения имени частной сети и IP-адреса. Теперь вы должны настроить свои серверы для использования ваших частных DNS-серверов.
Настройка DNS-клиентов
Прежде чем все ваши серверы в «доверенном» ACL-списке смогут запрашивать ваши DNS-серверы, вы должны настроить каждый из них на использование ns1 и ns2 в качестве серверов имен. Этот процесс зависит от в ОС, но для большинства дистрибутивов Linux необходимо добавить серверы имен в файл /etc/resolv.conf
.
Клиенты 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-серверов.
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-серверов.
Тестовые клиенты
Используйте nslookup
, чтобы проверить, могут ли ваши клиенты запрашивать ваши серверы имен. Вы должны иметь возможность сделать это на всех клиентах, которые вы настроили и которые находятся в «доверенном» 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 service bind9 reload
Дополнительный сервер имен
- Добавьте частный IP-адрес нового хоста в \доверенный список управления доступом (
named.conf.options
)
Затем перезагрузите BIND:
- sudo service bind9 reload
Настройте новый хост для использования вашего DNS
- Настройте resolv.conf для использования ваших DNS-серверов
- Протестируйте с помощью
nslookup
Удаление хоста из DNS
Если вы удаляете хост из своей среды или хотите просто вывести его из DNS, просто удалите все, что было добавлено при добавлении сервера в DNS (т. е. в обратном порядке вышеописанным действиям).
Заключение
Теперь вы можете обращаться к частным сетевым интерфейсам ваших серверов по имени, а не по IP-адресу. Это упрощает настройку служб и приложений, поскольку вам больше не нужно запоминать частные IP-адреса, а файлы будут легче читать и понимать. Кроме того, теперь вы можете изменить свои конфигурации, чтобы они указывали на новые серверы в одном месте, ваш основной DNS-сервер, вместо того, чтобы редактировать множество распределенных файлов конфигурации, что упрощает обслуживание.
После того, как вы настроили свой внутренний DNS и ваши файлы конфигурации используют частные полные доменные имена для указания сетевых подключений, очень важно, чтобы ваши DNS-серверы обслуживались должным образом. Если они оба станут недоступны, ваши службы и приложения, которые полагаются на них, перестанут работать должным образом. Вот почему рекомендуется настроить DNS как минимум с одним вторичным сервером и поддерживать работающие резервные копии всех из них.