Bind dns server настройка
DNS (Domain Name System, система доменных имён) — система, в которой все доменные имена серверов находятся в определённой иерархии. Для чего она нужна?
Настройка собственной DNS позволяет более гибко и точно конфигурировать систему и не зависеть от третьих лиц. В этой статье мы рассмотрим, как настроить DNS с помощью сервера имён BIND на Ubuntu.
Термины
Зона — часть иерархии доменных имён, которая размещается на DNS-сервере. Она нужна для того, чтобы установить рамки, в пределах которых распространяется ответственность конкретного сервера или группы серверов.
FQDN — это имя полное имя домена, которое включает в себя имена всех родительских доменов.
Ресурсная запись — это единица хранения информации. Проще говоря, это запись, которая содержит связь имени с какой-либо служебной информацией. Ресурсная запись состоит из следующих элементов:
- Имя (NAME) — имя или IP-адрес, которому принадлежит зона.
- Время жизни (Time to Live, TTL) — время хранения записи в кэше DNS, по прошествии которого запись удаляется.
- Класс (CLASS) — тип сети, чаще всего IN — Internet.
- Тип (TYPE) — назначение записи
- Различная информация (DATA)
Want to learn more? Join the DigitalOcean Community!
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.
An important part of managing server configuration and infrastructure includes maintaining an easy way to look up network interfaces and IP addresses by name, by setting up a proper Domain Name System (DNS). Using fully qualified domain names (FQDNs), instead of IP addresses, to specify network addresses eases the configuration of services and applications, and increases the maintainability of configuration files. Setting up your own DNS for your private network is a great way to improve the management of your servers.
In this tutorial, we will go over how to set up an internal DNS server, using the BIND name server software (BIND9) on CentOS 7, that can be used by your Virtual Private Servers (VPS) to resolve private host names and private IP addresses. This provides a central way to manage your internal hostnames and private IP addresses, which is indispensable when your environment expands to more than a few hosts.
The Ubuntu version of this tutorial can be found here.
Adding Host to DNS
Whenever you add a host to your environment (in the same datacenter), you will want to add it to DNS. Here is a list of steps that you need to take:
Primary Nameserver
- Forward zone file: Add an “A” record for the new host, increment the value of “Serial”
- Reverse zone file: Add a “PTR” record for the new host, increment the value of “Serial”
- Add your new host’s private IP address to the “trusted” ACL ( named.conf.options )
Then reload BIND:
Secondary Nameserver
- Add your new host’s private IP address to the “trusted” ACL ( named.conf.options )
Then reload BIND:
Configure New Host to Use Your DNS
- Configure resolv.conf to use your DNS servers
- Test using nslookup
Configure Options File
On ns1, open the named.conf.options file for editing:
Above the existing options block, create a new ACL block called “trusted”. This is where we will define list of clients that we will allow recursive DNS queries from (i.e. your servers that are in the same datacenter as ns1). Using our example private IP addresses, we will add ns1, ns2, host1, and host2 to our list of trusted clients:
Now that we have our list of trusted DNS clients, we will want to edit the options block. Currently, the start of the block looks like the following:
Below the directory directive, add the highlighted configuration lines (and substitute in the proper ns1 IP address) so it looks something like this:
Now save and exit named.conf.options . The above configuration specifies that only your own servers (the “trusted” ones) will be able to query your DNS server.
Next, we will configure the local file, to specify our DNS zones.
Ubuntu Clients
On Ubuntu and Debian Linux VPS, you can edit the head file, which is prepended to resolv.conf on boot:
Add the following lines to the file (substitute your private domain, and ns1 and ns2 private IP addresses):
Now run resolvconf to generate a new resolv.conf file:
Your client is now configured to use your DNS servers.
Настройка дополнительного DNS-сервера
В большинстве сред правильным решением будет создание дополнительного DNS-сервера, который будет отвечать на запросы, если основной сервер окажется недоступным. К счастью, настройка дополнительного DNS-сервера выполняется намного проще.
На сервере ns2 отредактируйте файл named.conf.options :
В верхней части файла добавьте ACL с частными IP-адресами всех ваших доверенных серверов:
Под директивой directory добавьте следующие строки:
Сохраните и закройте файл named.conf.options . Этот файл должен выглядеть так же, как файл named.conf.options сервера ns1, за исключением того, что его необходимо настроить на прослушивание частного IP-адреса ns2.
Теперь необходимо отредактировать файл named.conf.local :
Определите slave-зоны, соответствующие master-зонам основного DNS-сервера. Обратите внимание, что в качестве типа используется slave, в файле отсутствует путь, и существует директива masters , которая должна быть настроена на частный IP-адрес основного DNS-сервера. Если вы определили несколько зон для обратного просмотра на основном DNS-сервере, обязательно проверьте, что все они были добавлены на этом этапе:
Сохраните и закройте файл named.conf.local .
Запустите следующую команду для проверки валидности ваших файлов конфигурации:
После выполнения проверки перезапустите BIND:
Разрешите подключение DNS к серверу, внеся изменения в правила брандмауэра UFW:
Теперь у вас есть основной и дополнительный DNS-серверы для имени частной сети и преобразования IP-адреса. Теперь вам нужно настроить ваши клиентские серверы, чтобы они могли использовать ваши частные DNS-серверы.
Обратная зона
Обратная зона DNS — это особая доменная зона, которая предназначена для того, чтобы определять имя узла по его IP адресу. Например, адрес узла 192.168.1.10 в обратной нотации превращается в 10.1.168.192.in-addr.arpa. Благодаря тому, что используется иерархическая модель, можно делегировать управление зоной владельцу диапазона IP-адресов.
По своей сути, PTR-запись определяет домен по адресу, а значит это практически то же самое, что и A-запись. Она используется в основном для проверки почтовых серверов.
Для настройки зоны обратного просмотра создадим новый файл зоны:
и поместим в него следующее содержимое:
Проверим зону и убедимся в корректности конфигурации:
Теперь эту зону нужно добавить в конфигурационный файл named.conf :
После этого проверяем синтаксис и перезагружаем bind9.
Можно приступать к аналогичной настройке на вторичном сервере. В named.conf.local добавьте следующую конфигурацию:
На этом этапе мы завершили работу с локальными доменными зонами. Можно приступать к конфигурации внешней доменной зоны.
Настройка файла параметров
На сервере ns1 откройте файл named.conf.options для редактирования:
Над существующим блоком options создайте новый блок ACL (список контроля доступа) под названием “trusted”. Именно здесь мы создадим список клиентов, для которых мы будем разрешать рекурсивные DNS-запросы (т. е. запросы от ваших серверов, находящихся в том же центре обработки данных, что и ns1). С помощью нашего примера частных IP-адресов мы добавим ns1, ns2, host1 и host2 в наш список надежных клиентов:
Теперь, когда у нас есть список доверенных DNS-клиентов, нам нужно отредактировать блок options . В настоящее время начало блока выглядит следующим образом:
Под директивой directory добавьте выделенные цветом строки конфигурации (и замените в соответствующем IP-адресе ns1), чтобы результат выглядел примерно следующим образом:
После завершения редактирования сохраните и закройте файл named.conf.options . Согласно конфигурация выше, только ваши собственные серверы (т. е. доверенные) смогут запрашивать у вашего DNS-сервера внешние домены.
Далее мы настроим локальный файл, чтобы задать ваши DNS-зоны.
Первичный DNS-сервер
Первичный DNS-сервер — сервер, который хранит главную копию файла данных зоны. Все зоны будем хранить в каталоге /etc/bind/master-zones основного DNS-сервера . Создадим директорию:
В ней создадим файл для описания зоны:
… и добавим в него SOA-, NS- и A-записи:
После этого необходимо запустить проверку утилитой named-checkzone .
named.conf.local. Это ещё один файл, который включается в общий конфиг сервера. В нём мы укажем локальные зоны:
После того, как пропишем нужные данные, проверим конфиг и перезагрузим bind9 (флаг -z проверяет файлы зон):
Create Forward Zone File
Let’s create the directory where our zone files will reside. According to our named.conf.local configuration, that location should be /etc/named/zones :
Now let’s edit our forward zone file:
After that, add your nameserver records with the following lines (replace the names with your own). Note that the second column specifies that these are “NS” records:
Our final example forward zone file looks like the following:
Now let’s move onto the reverse zone file(s).
Прямой просмотр
Теперь мы можем проверить обратный просмотр.
Conclusion
Now you may refer to your servers’ private network interfaces by name, rather than by IP address. This makes configuration of services and applications easier because you no longer have to remember the private IP addresses, and the files will be easier to read and understand. Also, now you can change your configurations to point to a new servers in a single place, your primary DNS server, instead of having to edit a variety of distributed configuration files, which eases maintenance.
Once you have your internal DNS set up, and your configuration files are using private FQDNs to specify network connections, it is critical that your DNS servers are properly maintained. If they both become unavailable, your services and applications that rely on them will cease to function properly. This is why it is recommended to set up your DNS with at least one secondary server, and to maintain working backups of all of them.
Create Reverse Zone File(s)
On ns1, for each reverse zone specified in the named.conf.local file, create a reverse zone file.
Edit the reverse zone file that corresponds to the reverse zone(s) defined in named.conf.local :
After that, add your nameserver records with the following lines (replace the names with your own). Note that the second column specifies that these are “NS” records:
Then add PTR records for all of your servers whose IP addresses are on the subnet of the zone file that you are editing. In our example, this includes all of our hosts because they are all on the 10.128.0.0/16 subnet. Note that the first column consists of the last two octets of your servers’ private IP addresses in reversed order. Be sure to substitute names and private IP addresses to match your servers:
Save and exit the reverse zone file (repeat this section if you need to add more reverse zone files).
Our final example reverse zone file looks like the following:
Настройка режима IPv4 для Bind
Прежде чем продолжить, давайте настроим режим IPv4 в BIND, так как наша частная сеть использует исключительно IPv4. На обоих серверах отредактируйте файл настроек по умолчанию bind9 с помощью следующей команды:
Добавьте “-4” в конец параметра OPTIONS . Результат будет выглядеть следующим образом:
Сохраните файл и закройте его после завершения.
Перезапустите BIND для вступления изменений в силу:
Теперь, после установки BIND, давайте настроим основной DNS-сервер.
Настройка представлений
Настройка представлений позволяет гибко управлять разрешением имён из разных подсетей. В файле /etc/bind/named.conf укажем:
В этом же файле можно прописать директивы для указания тех узлов и адресов сетей, от которых нужно принимать или отклонять запросы.
Затем нужно заново перезагрузить bind9:
После перезагрузки сервера с другого компьютера локальной сети можно запросить наличие у сервера 172.16.0.5 SOA-записи:
На этом этапе настройка основного DNS-сервера завершена. Далее в статье — вторичный сервер, настройка почтового сервера и обратная зона.
Create Forward Zone File
Let’s create the directory where our zone files will reside. According to our named.conf.local configuration, that location should be /etc/bind/zones :
We will base our forward zone file on the sample db.local zone file. Copy it to the proper location with the following commands:
Now let’s edit our forward zone file:
Initially, it will look something like the following:
Now delete the three records at the end of the file (after the SOA record). If you’re not sure which lines to delete, they are marked with a “delete this line” comment above.
At the end of the file, add your nameserver records with the following lines (replace the names with your own). Note that the second column specifies that these are “NS” records:
Our final example forward zone file looks like the following:
Now let’s move onto the reverse zone file(s).
Добавление хоста в DNS
При добавлении хоста в вашу среду (в одном центре обработки данных) вам нужно добавить его в DNS. Здесь представлен список шагов, которые вам нужно предпринять:
Основной сервер доменных имен
- Файл зоны для прямого просмотра: добавьте запись A для нового хоста, увеличив значение “Serial”
- Файл зоны для обратного просмотра: добавьте запись PTR для нового хоста, увеличив значение “Serial”
- Добавьте частный IP-адрес вашего нового хоста в доверенный ACL ( named.conf.options )
Протестируйте ваши файлы конфигурации:
Затем перезагрузите BIND:
Ваш основной сервер должен быть настроен для использования нового хоста.
Дополнительный сервер доменных имен
- Добавьте частный IP-адрес вашего нового хоста в доверенный ACL ( named.conf.options )
Проверьте синтаксис конфигурации:
Затем перезагрузите BIND:
Ваш вторичный сервер теперь будет принимать подключения с нового хоста.
Настройка нового хоста для использования вашей DNS
- Настройте /etc/resolv.conf для использования ваших DNS-серверов
- Выполните проверку с помощью nslookup
Removing Host from DNS
If you remove a host from your environment or want to just take it out of DNS, just remove all the things that were added when you added the server to DNS (i.e. the reverse of the steps above).
Configure DNS Clients
Before all of your servers in the “trusted” ACL can query your DNS servers, you must configure each of them to use ns1 and ns2 as nameservers. This process varies depending on OS, but for most Linux distributions it involves adding your name servers to the /etc/resolv.conf file.
Our Goal
By the end of this tutorial, we will have a primary DNS server, ns1, and optionally a secondary DNS server, ns2, which will serve as a backup.
Here is a table with example names and IP addresses:
Let’s get started by installing our Primary DNS server, ns1.
Клиенты CentOS
В CentOS, RedHat и Fedora Linux отредактируйте файл /etc/sysconfig/network-scripts/ifcfg- eth0 . Возможно, вам придется заменить eth0 на имя вашего основного сетевого интерфейса:
Сохраните файл и закройте его после завершения.
Перезапустите сетевую службу с помощью следующей команды:
Команда может зависнуть на несколько секунд, но через короткое время вы должны вернуться в командную строку.
Убедитесь, что изменения вступили в силу, введя следующую команду:
Вы должны увидеть ваши серверы доменных имен и домена поиска в списке:
Ваш клиент теперь может подключиться и использовать ваши DNS-серверы.
Prerequisites
To complete this tutorial, you will need the following:
- Some servers that are running in the same datacenter and have private networking enabled
- A new VPS to serve as the Primary DNS server, ns1
- Optional: A new VPS to serve as a Secondary DNS server, ns2
- Root access to all of the above (steps 1-4 here)
If you are unfamiliar with DNS concepts, it is recommended that you read at least the first three parts of our Introduction to Managing DNS.
Создание файла (файлов) зоны для обратного просмотра
В ns1 для каждой зоны обратного просмотра, заданной в файле named.conf.local, необходимо создать файл зоны для обратного просмотра. При создании нашего файла (или файлов) зоны для обратного просмотра мы будем опираться в качестве примера на файл зоны db.local. Скопируйте его в надлежащее место с помощью следующих команд (замените имя файла назначения, чтобы оно соответствовало определению вашей зоны для обратного просмотра):
Отредактируйте файл зоны для обратного просмотра, который соответствует зоне(-ам), определенной(-ым) в named.conf.local:
Первоначально он будет выглядеть примерно следующим образом:
Как и в случае с файлом зоны для прямого просмотра, вам нужно изменить запись SOA и увеличить значение serial. Он должен выглядеть следующим образом:
Теперь удалите две записи в конце файла (после записи SOA). Если вы уверены, какие строки следует удалить, удаляйте строки с комментарием “delete this line”.
В конце файла добавьте записи для имени сервера со следующими строками (замените имена на собственные). Обратите внимание, что во втором столбце указывается, что это записи “NS”.
Затем добавьте записи PTR для всех ваших серверов, чей IP-адрес соответствует подсети файла зоны, который вы редактируете. В нашем примере это будут все наши хосты, поскольку все они находятся в подсети 10.128.0.0/16 . Обратите внимание, что первый столбец включает два последних байта частных IP-адресов ваших серверов в обратном порядке. Обязательно замените имена и частные IP-адреса согласно данным ваших серверов:
Сохраните и закройте файл зоны для обратного просмотра (повторите описанные в данном разделе действия, если вам потребуется добавить дополнительные файлы зоны для обратного просмотра).
Полученный нами в итоге пример файла зоны для обратного просмотра выглядит следующим образом:
Мы завершили редактирование наших файлов, и теперь мы можем проверить наши файлы на ошибки.
Добавление MX-записи
Проверим синтаксис и перезапустим bind9:
Check BIND Configuration Syntax
Run the following command to check the syntax of the named.conf* files:
If your named configuration files have no syntax errors, you will return to your shell prompt and see no error messages. If there are problems with your configuration files, review the error message and the Configure Primary DNS Server section, then try named-checkconf again.
The named-checkzone command can be used to check the correctness of your zone files. Its first argument specifies a zone name, and the second argument specifies the corresponding zone file, which are both defined in named.conf.local .
And to check the “ 128.10 .in-addr.arpa” reverse zone configuration, run the following command (change the numbers to match your reverse zone and file):
When all of your configuration and zone files have no errors in them, you should be ready to restart the BIND service.
Configure Local File
On ns1, open the named.conf.local file for editing:
Aside from a few comments, the file should be empty. Here, we will specify our forward and reverse zones.
Add the forward zone with the following lines (substitute the zone name with your own):
Assuming that our private subnet is 10.128.0.0/16, add the reverse zone by with the following lines (note that our reverse zone name starts with “128.10” which is the octet reversal of “10.128”):
If your servers span multiple private subnets but are in the same datacenter, be sure to specify an additional zone and zone file for each distinct subnet. When you are finished adding all of your desired zones, save and exit the named.conf.local file.
Now that our zones are specified in BIND, we need to create the corresponding forward and reverse zone files.
Install BIND on DNS Servers
On both DNS servers, ns1 and ns2, update apt:
Now install BIND:
Example Hosts
For example purposes, we will assume the following:
Note: Your existing setup will be different, but the example names and IP addresses will be used to demonstrate how to configure a DNS server to provide a functioning internal DNS. You should be able to easily adapt this setup to your own environment by replacing the host names and private IP addresses with your own. It is not necessary to use the region name of the datacenter in your naming scheme, but we use it here to denote that these hosts belong to a particular datacenter’s private network. If you utilize multiple datacenters, you can set up an internal DNS within each respective datacenter.
Our Goal
By the end of this tutorial, we will have a primary DNS server, ns1, and optionally a secondary DNS server, ns2, which will serve as a backup.
Here is a table with example names and IP addresses:
Let’s get started by installing our Primary DNS server, ns1.
Restart BIND
Your primary DNS server is now setup and ready to respond to DNS queries. Let’s move on to creating the secondary DNS server.
Test Clients
Use nslookup —included in the “bind-utils” package—to test if your clients can query your name servers. You should be able to do this on all of the clients that you have configured and are in the “trusted” ACL.
Создание файла для зоны прямого просмотра
Давайте создадим директорию, в которой будут находиться наши файлы зоны. Согласно конфигурации named.conf.local, это должна быть директория /etc/bind/zones :
При создании нашего файла зоны для прямого просмотра мы будем опираться в качестве примера на файл зоны db.local . Скопируйте его в надлежащее место с помощью следующих команд:
Теперь необходимо отредактировать наш файл зоны для прямого просмотра:
Первоначально он будет выглядеть примерно следующим образом:
Далее удалите три записи в конце файла (после записи SOA). Если вы уверены, какие строки следует удалить, удаляйте строки с комментарием “delete this line”.
В конце файла добавьте записи для имени сервера со следующими строками (замените имена на собственные). Обратите внимание, что во втором столбце указывается, что это записи “NS”.
Полученный нами в итоге пример файла зоны для прямого просмотра выглядит следующим образом:
Теперь пришло время перейти к файлу (файлам) зоны для обратного просмотра.
Ubuntu Clients
On Ubuntu and Debian Linux VPS, you can edit the head file, which is prepended to resolv.conf on boot:
Add the following lines to the file (substitute your private domain, and ns1 and ns2 private IP addresses):
Now run resolvconf to generate a new resolv.conf file:
Your client is now configured to use your DNS servers.
Configure Secondary DNS Server
In most environments, it is a good idea to set up a secondary DNS server that will respond to requests if the primary becomes unavailable. Luckily, the secondary DNS server is much easier to configure.
On ns2, edit the named.conf file:
Note: If you prefer to skip these instructions, you can copy ns1’s named.conf file and modify it to listen on ns2’s private IP address, and not allow transfers.
Above the existing options block, create a new ACL block called “trusted”. This is where we will define list of clients that we will allow recursive DNS queries from (i.e. your servers that are in the same datacenter as ns1). Using our example private IP addresses, we will add ns1, ns2, host1, and host2 to our list of trusted clients:
Now that we have our list of trusted DNS clients, we will want to edit the options block. Add the private IP address of ns1 to the listen-on port 53 directive, and comment out the listen-on-v6 line:
Change allow-query directive from “localhost” to “trusted”:
At the end of the file, add the following line:
Now save and exit named.conf . The above configuration specifies that only your own servers (the “trusted” ones) will be able to query your DNS server.
Next, we will configure the local file, to specify our DNS zones.
Save and exit named.conf .
Now edit the named.conf.local file:
Now save and exit named.conf.local .
Run the following command to check the validity of your configuration files:
Once that checks out, start BIND:
Enable BIND to start on boot:
Now you have primary and secondary DNS servers for private network name and IP address resolution. Now you must configure your servers to use your private DNS servers.
Configure Secondary DNS Server
In most environments, it is a good idea to set up a secondary DNS server that will respond to requests if the primary becomes unavailable. Luckily, the secondary DNS server is much easier to configure.
On ns2, edit the named.conf.options file:
At the top of the file, add the ACL with the private IP addresses of all of your trusted servers:
Below the directory directive, add the following lines:
Save and exit named.conf.options . This file should look exactly like ns1’s named.conf.options file except it should be configured to listen on ns2’s private IP address.
Now edit the named.conf.local file:
Now save and exit named.conf.local .
Run the following command to check the validity of your configuration files:
Once that checks out, restart bind
Now you have primary and secondary DNS servers for private network name and IP address resolution. Now you must configure your servers to use your private DNS servers.
Настройка локального файла
На сервере ns1 откройте файл named.conf.local для редактирования:
Добавьте зону прямого просмотра со следующими строками, заменив имя зоны на собственное, и закрытый IP-адрес дополнительного DNS сервера в директиве allow-transfer :
Если, согласно нашему предположению, нашей частной подсетью является 10.128.0.0/16 , добавьте зону обратного просмотра с помощью следующих строк (обратите внимание, что имя зоны обратного просмотра начинается с “128.10”, что представляет собой битное преобразование "10.128"):
Если ваши серверы охватывают несколько частных подсетей, но находятся в одном центре обработки данных, обязательно указывайте дополнительную зону и файл зоны для каждой отдельной подсети. После добавления всех необходимых зон сохраните и закройте файл named.conf.local .
Теперь, когда наши зоны указаны в BIND, нам нужно создать соответствующие файлы для зоны прямого и обратного просмотра.
Внешняя доменная зона
Во-первых, для того, чтобы запросы из внешней сети обрабатывались нашим сервером нужно в файле конфигурации named.conf.options добавить внешний адрес в директиву listen-on :
Далее создадим файл зоны (не забудьте изменить серийный номер!) и добавим в него внешние IP-адреса.
Затем создадим для зон внешнего просмотра отдельный файл, чтобы раздавать разные доменные зоны клиентам из разных подсетей.
И добавим в него следующее содержимое:
После этого подключим файл в named.conf , добавив такой блок:
Осталось проверить эту зону и перезагрузить bind9:
На вторичном DNS-сервере в named.conf.options нам нужно указать внешний адрес сервера:
И точно так же, как на первой машине, создаём новый файл named.conf.external:
Со следующим содержимым:
Далее в named.conf добавляем следующий блок:
И выполняем трансфер:
Reverse Lookup
To test the reverse lookup, query the DNS server with host1’s private IP address:
You should see output that looks like the following:
Congratulations! Your internal DNS servers are now set up properly! Now we will cover maintaining your zone records.
Отладка
При настройке DNS-сервера очень важно внимательно отнестись к журналированию запросов. Это поможет при отладке на начальных стадиях, а во время полноценной работы сервера вы сможете в полной мере контролировать работу служб.
Bind9 позволяет полноценно настраивать правила журналирования — писать в один файл, разные категории помещать в разные журнал и так далее.
Для того, чтобы записать отладочную информацию в один файл, нужно создать правила журналирования и подключить их в основной конфиг. Для этого создадим файл log.conf :
И поместим в него содержимое:
После этого подключим файл в основной конфиг:
И перезагрузим bind9:
Можно создать несколько таких файлов с разными настройками и подключать их в зависимости от стадии разработки или нагрузки на сервер.
Настройка DNS-клиентов
Прежде чем все ваши серверы в доверенном ACL смогут отправлять запросы на ваши DNS-серверы, вы должны настроить для каждого из них использование ns1 и ns2 в качестве сервера имен. Этот процесс варьируется в зависимости от операционной системы, но для большинства дистрибутивов Linux он подразумевает добавление ваших серверов доменных имен в файл /etc/resolv.conf .
Example Hosts
For example purposes, we will assume the following:
Note: Your existing setup will be different, but the example names and IP addresses will be used to demonstrate how to configure a DNS server to provide a functioning internal DNS. You should be able to easily adapt this setup to your own environment by replacing the host names and private IP addresses with your own. It is not necessary to use the region name of the datacenter in your naming scheme, but we use it here to denote that these hosts belong to a particular datacenter’s private network. If you utilize multiple datacenters, you can set up an internal DNS within each respective datacenter.
Test Clients
Use nslookup to test if your clients can query your name servers. You should be able to do this on all of the clients that you have configured and are in the “trusted” ACL.
Want to learn more? Join the DigitalOcean Community!
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.
Проверка синтаксиса конфигурации BIND
Запустите следующую команду для проверки синтаксиса файлов named.conf* :
Команда named-checkzone может использоваться для проверки корректности ваших файлов зоны. Первый аргумент команды указывает имя зоны, а второй аргумент определяет соответствующий файл зоны, оба из которых определены в named.conf.local .
А чтобы проверить конфигурацию зоны для обратного просмотра “ 128.10 .in-addr.arpa”, запустите следующую команду (замените на данные, соответствующие вашей зоне для обратного просмотра и файлу):
Когда все файлы конфигурации и зоны не будут иметь ошибок, вы должны будете перезапустить службу BIND.
Forward Lookup
Configure DNS Clients
Before all of your servers in the “trusted” ACL can query your DNS servers, you must configure each of them to use ns1 and ns2 as nameservers. This process varies depending on OS, but for most Linux distributions it involves adding your name servers to the /etc/resolv.conf file.
Reverse Lookup
To test the reverse lookup, query the DNS server with host1’s private IP address:
You should see output that looks like the following:
Congratulations! Your internal DNS servers are now set up properly! Now we will cover maintaining your zone records.
Maintaining DNS Records
Now that you have a working internal DNS, you need to maintain your DNS records so they accurately reflect your server environment.
Removing Host from DNS
If you remove a host from your environment or want to just take it out of DNS, just remove all the things that were added when you added the server to DNS (i.e. the reverse of the steps above).
Предварительные требования
Для выполнения данного руководства вам потребуется следующая инфраструктура. Создайте каждый сервер **в одном центре обработки данных **с активированной опцией частной сети:
- Свежий сервер Ubuntu 18.04, который будет использоваться в качестве основного DNS-сервера, ns1.
- (Рекомендуется) Второй сервер Ubuntu 18.04, который используется в качестве дополнительного DNS-сервера, ns2.
- Дополнительные серверы в одном центре обработки данных, которые будут использовать ваши DNS-серверы.
На каждом из этих серверов необходимо настроить административный доступ с помощью пользователя sudo и брандмауэра согласно инструкциям нашего руководства по начальной настройке сервера Ubuntu 18.04.
Если вы не знакомы с концепцией DNS, рекомендуем ознакомиться минимум с первыми тремя частями нашего руководства Введение в управление DNS.
Пример инфраструктуры и целей
В рамках данной статьи мы предполагаем следующее:
Примечание: существующая настройка будет отличаться, примеры имен и IP-адресов будут использоваться для демонстрации того, как выполнить настройку DNS-сервера для получения работающей внутренней DNS. У вас должна быть возможность легко адаптировать данную настройку для вашей среды, заменив имена хостов и частные IP-адреса на собственные. Нет необходимости использовать имя региона центра обработки данных в схеме присвоения имен, но мы используем его для обозначения хостов, принадлежащих к частной сети конкретного центра обработки данных. Если вы используете несколько центров обработки данных, вы можете настроить внутреннюю DNS внутри каждого отдельного центра обработки данных.
К концу данного руководства мы получим основной DNS-сервер, ns1, и, в качестве опции, дополнительный DNS-сервер, ns2, который будет служит в качестве резервного сервера.
Давайте начнем с установки нашего основного DNS-сервера, ns1.
Install BIND on DNS Servers
On both DNS servers, ns1 and ns2, install BIND with yum:
Confirm the prompt by entering y .
Now that BIND is installed, let’s configure the primary DNS server.
Сохранение DNS-записей
Теперь, когда у вас есть работающий внутренний DNS-сервер, вам нужно хранить ваши записи DNS, чтобы они точно отражали среду сервера.
Adding Host to DNS
Whenever you add a host to your environment (in the same datacenter), you will want to add it to DNS. Here is a list of steps that you need to take:
Primary Nameserver
- Forward zone file: Add an “A” record for the new host, increment the value of “Serial”
- Reverse zone file: Add a “PTR” record for the new host, increment the value of “Serial”
- Add your new host’s private IP address to the “trusted” ACL ( named.conf.options )
Then reload BIND:
Secondary Nameserver
- Add your new host’s private IP address to the “trusted” ACL ( named.conf.options )
Then reload BIND:
Configure New Host to Use Your DNS
- Configure resolv.conf to use your DNS servers
- Test using nslookup
Configure Local File
On ns1, open the named.conf.local file for editing:
The file should be empty. Here, we will specify our forward and reverse zones.
Add the forward zone with the following lines (substitute the zone name with your own):
Assuming that our private subnet is 10.128.0.0/16, add the reverse zone by with the following lines (note that our reverse zone name starts with “128.10” which is the octet reversal of “10.128”):
If your servers span multiple private subnets but are in the same datacenter, be sure to specify an additional zone and zone file for each distinct subnet. When you are finished adding all of your desired zones, save and exit the named.conf.local file.
Now that our zones are specified in BIND, we need to create the corresponding forward and reverse zone files.
CentOS Clients
On CentOS, RedHat, and Fedora Linux VPS, simply edit the resolv.conf file:
Then add the following lines to the TOP of the file (substitute your private domain, and ns1 and ns2 private IP addresses):
Now save and exit. Your client is now configured to use your DNS servers.
Configure Primary DNS Server
BIND’s configuration consists of multiple files, which are included from the main configuration file, named.conf . These filenames begin with “named” because that is the name of the process that BIND runs. We will start with configuring the options file.
Configure Primary DNS Server
BIND’s configuration consists of multiple files, which are included from the main configuration file, named.conf . These filenames begin with “named” because that is the name of the process that BIND runs. We will start with configuring the options file.
Заключение
Теперь вы можете обращаться к интерфейсам серверов вашей частной сети по имени, а не по IP-адресу. Это упрощает настройку служб и приложений, поскольку вам больше не нужно запоминать частные IP-адреса, а файлы будет легче читать и понимать. Кроме того, теперь вы можете изменять свои конфигурации для работы с новыми серверами в одном месте, на вашем основном DNS-сервере, вместо того чтобы редактировать целых набор самых разных файлов.
Когда ваш внутренний DNS-сервер был настроен, а файлы конфигурации используют частные FQDN для указания сетевых подключений, **критически **важно, чтобы ваши DNS-сервера обслуживались надлежащим образом. Если оба сервера окажутся недоступны, ваши службы и приложения, которые опираются на них при работе, не смогут нормально функционировать. Именно поэтому рекомендуется настроить для вашей DNS минимум один дополнительный сервер и сохранять рабочиие резервные копии всех серверов.
Заключение
Теперь вы сможете самостоятельно сконфигурировать систему так, чтобы обращаться к реусрсам по имени, а не по IP-адресу. Для этого в качестве примера мы настроили на сервере с OS Ubuntu dns с помощью пакета bind9.
Однако теперь вы должны внимательно следить за основным и вторичным серверами, поскольку они обрабатывают DNS-запросы внутри системы.
An important part of managing server configuration and infrastructure includes maintaining an easy way to look up network interfaces and IP addresses by name, by setting up a proper Domain Name System (DNS). Using fully qualified domain names (FQDNs), instead of IP addresses, to specify network addresses eases the configuration of services and applications, and increases the maintainability of configuration files. Setting up your own DNS for your private network is a great way to improve the management of your servers.
In this tutorial, we will go over how to set up an internal DNS server, using the BIND name server software (BIND9) on Ubuntu 14.04, that can be used by your Virtual Private Servers (VPS) to resolve private host names and private IP addresses. This provides a central way to manage your internal hostnames and private IP addresses, which is indispensable when your environment expands to more than a few hosts.
The CentOS version of this tutorial can be found here.
Перезапуск BIND
Если у вас есть настроенный брандмауэр UFW, откройте доступ к BIND с помощью следующей команды:
Теперь ваш основной DNS-сервер настроен и может отвечать на запросы DNS. Давайте перейдем к созданию дополнительного DNS-сервера.
Инфраструктура
Нам понадобится два сервера на Ubuntu 18.04, они будут использоваться в качестве первичного и вторичного DNS-серверов — ns1 и ns2 соответственно. А также дополнительные серверы, которые будут использовать наши настроенные серверы.
Вы должны иметь права суперпользователя на каждом из серверов. Чтобы узнать, как это получить административные доступ, воспользуйтесь статьёй в нашем блоге — Редактирование файла sudoers .
Удаление хоста из DNS
Если вы удалите хост из вашей среды или захотите просто убрать его из DNS, просто удалите все данные, которые были добавлены при добавлении сервера в DNS (т. е. выполните описанные выше шаги в обратно порядке).
Установка BIND на DNS-серверах
На обоих DNS-серверах, ns1 и ns2, обновите кэш пакета apt с помощью следующей команды:
Теперь можно переходить к установке BIND:
Forward Lookup
Create Reverse Zone File(s)
On ns1, for each reverse zone specified in the named.conf.local file, create a reverse zone file. We will base our reverse zone file(s) on the sample db.127 zone file. Copy it to the proper location with the following commands (substituting the destination filename so it matches your reverse zone definition):
Edit the reverse zone file that corresponds to the reverse zone(s) defined in named.conf.local :
Initially, it will look something like the following:
In the same manner as the forward zone file, you will want to edit the SOA record and increment the serial value. It should look something like this:
Now delete the two records at the end of the file (after the SOA record). If you’re not sure which lines to delete, they are marked with a “delete this line” comment above.
At the end of the file, add your nameserver records with the following lines (replace the names with your own). Note that the second column specifies that these are “NS” records:
Then add PTR records for all of your servers whose IP addresses are on the subnet of the zone file that you are editing. In our example, this includes all of our hosts because they are all on the 10.128.0.0/16 subnet. Note that the first column consists of the last two octets of your servers’ private IP addresses in reversed order. Be sure to substitute names and private IP addresses to match your servers:
Save and exit the reverse zone file (repeat this section if you need to add more reverse zone files).
Our final example reverse zone file looks like the following:
Клиенты Ubuntu 18.04
На Ubuntu 18.04 настройка сетевого взаимодействия выполняется с помощью Netplan, абстракции, которая позволяет вам записывать стандартную конфигурацию сети и применять ее к несовместимому сетевому ПО, отвечающему за бекэнд. Для настройки DNS нам потребуется записать файл конфигурации Netplan.
Во-первых, найдите устройство, связанное с вашей частной сетью, отправив частной подсети команду ip address :
В этом примере используется частный интерфейс eth1 .
Далее необходимо создать новый файл в /etc/netplan с именем 00-private-nameservers.yaml :
Вставьте в файл следующее содержимое. Вам потребуется изменить интерфейс частной сети, адреса ваших DNS-серверов ns1 и ns2, а также зону DNS:
Примечание: Netplan использует формат сериализации данных YAML для своих файлов конфигурации. Поскольку YAML использует структурирование текста и пробелы для определения структуры данных, убедитесь, что ваше определение имеет равномерное структурирование текста во избежание ошибок.
Сохраните файл и закройте его после завершения.
Затем вы должны сообщить Netplan о необходимости использования нового файла конфигурации с помощью команды netplan try . При наличии проблем, которые приводят к потере подключения к сети, Netplan будет автоматически перезапускать изменения по истечении определенного периода времени:
Если счетчик в нижней части обновляется корректно, это значит, что новой конфигурации удалось по крайней мере не повредить ваше соединение SSH. Нажмите ENTER, чтобы принять изменения в конфигурации.
Теперь проверьте DNS-преобразователь системы, чтобы определить, применены ли изменения в конфигурацию DNS:
Прокрутите вниз, пока не увидите раздел для вашего интерфейса частной сети. Вы должны увидеть частные IP-адреса ваших DNS-серверов, которые будут перечислены в первую очередь, а за ними идут резервные значения. Ваш домен должен находиться в строке DNS Domain:
Ваш клиент должен быть настроен на использование ваших внутренних DNS-серверов.
Tutorial Series: An Introduction to Managing DNS
DNS, or the domain name system, is an essential component of modern internet communication. It allows us to reference computers by names instead of IP addresses. In this series, we will cover the basic ideas behind DNS so that you feel comfortable working with it. Afterwards, we will walk through various ways that you can gain greater control over your domains and DNS resolution.
Важным элементом управления конфигурацией и инфраструктурой сервера является поддержание удобного способа просмотра сетевых интерфейсов и IP-адресов по имени с помощью настройки корректной системы доменных имен (DNS). Использование полных доменных имен (FQDN), а не IP-адреса, для указания сетевых адресов облегчает настройку служб и приложений и повышает поддерживаемость файлов конфигурации. Настройка собственной DNS для вашей частной сети — это отличный способ совершенствования методов управления серверами.
Из этого руководства вы узнаете, как выполнить настройку внутреннего DNS-сервера с помощью программного обеспечения сервера имен BIND (BIND9) на Ubuntu 18.04, которое может быть использовано вашими серверами для предоставления частных имен хостов и частных IP-адресов. Это служит центральным средством для управления внутренними именами хостов и частными IP-адресами, что необходимо при расширении вашей среды до более чем нескольких хостов.
Версию CentOS, используемую в данном руководстве, можно найти здесь.
Настройка основного DNS-сервера
Конфигурация BIND состоит из множества файлов, которые включены в основной файл конфигурации, named.conf . Эти имена файлов начинаются с named , потому что это имя процесса, который запускает BIND (сокращение от “domain name daemon”). Мы начнем с настройки файла параметров.
Start BIND
Now you will want to enable it, so it will start on boot:
Your primary DNS server is now setup and ready to respond to DNS queries. Let’s move on to creating the secondary DNS server.
Установка BIND на DNS-серверах
В этой статье мы будем использовать bind в качестве DNS-сервера . Установим пакет bind9 из репозитория Linux:
Кроме этого рекомендуем установить сразу инструменты мониторинга сети:
После установки запускаем службу bind9:
Основной конфигурационный файл сервера — /etc/bind/named.conf. Он описывает общие настройки и обычно разбивается на несколько других для удобства. С работы с параметрами внутри этого файла начинается настройка DNS .
named.conf.options. Этот файл содержит общие параметры сервера. В нём укажем данные для конфигурации DNS.
Чтобы проверить, что всё внесено верно, нужно воспользоваться одной из утилит демона named — named-checkconf .
Если всё написано верно, bind-сервер начал работать.
Want to learn more? Join the DigitalOcean Community!
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.
Conclusion
Now you may refer to your servers’ private network interfaces by name, rather than by IP address. This makes configuration of services and applications easier because you no longer have to remember the private IP addresses, and the files will be easier to read and understand. Also, now you can change your configurations to point to a new servers in a single place, your primary DNS server, instead of having to edit a variety of distributed configuration files, which eases maintenance.
Once you have your internal DNS set up, and your configuration files are using private FQDNs to specify network connections, it is critical that your DNS servers are properly maintained. If they both become unavailable, your services and applications that rely on them will cease to function properly. This is why it is recommended to set up your DNS with at least one secondary server, and to maintain working backups of all of them.
Check BIND Configuration Syntax
Run the following command to check the syntax of the named.conf* files:
If your named configuration files have no syntax errors, you will return to your shell prompt and see no error messages. If there are problems with your configuration files, review the error message and the Configure Primary DNS Server section, then try named-checkconf again.
The named-checkzone command can be used to check the correctness of your zone files. Its first argument specifies a zone name, and the second argument specifies the corresponding zone file, which are both defined in named.conf.local .
And to check the “ 128.10 .in-addr.arpa” reverse zone configuration, run the following command (change the numbers to match your reverse zone and file):
When all of your configuration and zone files have no errors in them, you should be ready to restart the BIND service.
Клиенты Ubuntu 16.04 и Debian
В серверах Ubuntu 16.04 и Debian вы можете изменить файл /etc/network/interfaces :
Сохраните файл и закройте его после завершения.
Перезапустите ваши сетевые службы, применив изменения с помощью следующих команд. Убедитесь, что вы заменили eth0 на имя вашего сетевого интерфейса:
В результате будет выполнен перезапуск вашей сети без отключения текущего подключения. Если все работает корректно, вы должны увидеть примерно следующее:
Еще раз проверьте, что ваши настройки были применены, введя следующую команду:
Вы должны увидеть ваши серверы доменных имен в файле /etc/resolv.conf , а также ваш домен поиска:
Ваш клиент настроен для использования ваших DNS-серверов.
Maintaining DNS Records
Now that you have a working internal DNS, you need to maintain your DNS records so they accurately reflect your server environment.
Обратный просмотр
Чтобы протестировать обратный просмотр, отправьте DNS-серверу запрос на частный IP-адрес host1:
Результат будет выглядеть следующим образом:
Поздравляем! Ваши внутренние DNS-серверы настроены надлежащим образом! Теперь мы перейдем к сохранению записей зоны.
Самые частые ресурсные записи
A-запись. Имя хоста на адрес IPv4. Для каждого сетевого интерфейса можно сделать только одну A-запись.
AAAA-запись. Это то же самое, что А-запись, только справедливо для IPv6.
CNAME. Каноническая запись. Содержит псевдоним реального имени для перенаправления.
MX. Указывает хосты для доставки почты, адресованной домену. Поле NAME содержит домен назначения, а поле DATA — приоритет и хост для приёма почты.
NS. Указывает на DNS-сервер, которым обслуживается домен.
PTR. IP-адрес в доменное имя. Необходимо для обратного преобразования имён.
SOA. Описывает основные настройки зоны.
SRV. Содержит адреса серверов, которые обеспечивают работу внутренних служб домена. Например, Jabber.
Configure Bind
BIND’s process is known as named. As such, many of the files refer to “named” instead of “BIND”.
On ns1, open the named.conf file for editing:
Above the existing options block, create a new ACL block called “trusted”. This is where we will define list of clients that we will allow recursive DNS queries from (i.e. your servers that are in the same datacenter as ns1). Using our example private IP addresses, we will add ns1, ns2, host1, and host2 to our list of trusted clients:
Now that we have our list of trusted DNS clients, we will want to edit the options block. Add the private IP address of ns1 to the listen-on port 53 directive, and comment out the listen-on-v6 line:
Below those entries, change the allow-transfer directive to from “none” to ns2’s private IP address. Also, change allow-query directive from “localhost” to “trusted”:
At the end of the file, add the following line:
Now save and exit named.conf . The above configuration specifies that only your own servers (the “trusted” ones) will be able to query your DNS server.
Next, we will configure the local file, to specify our DNS zones.
Тестирование клиентов
Используйте nslookup для проверки того, могут ли ваши клиенты отправлять запросы вашим серверам доменных имен. У вас должна быть возможность сделать это для всех клиентов, которые были настроены и находятся в доверенном ACL.
Для клиентов CentOS вам может потребоваться установка утилиты с помощью следующей команды:
Мы можем начать выполнять прямой просмотр.
CentOS Clients
On CentOS, RedHat, and Fedora Linux VPS, simply edit the resolv.conf file:
Then add the following lines to the TOP of the file (substitute your private domain, and ns1 and ns2 private IP addresses):
Now save and exit. Your client is now configured to use your DNS servers.
Вторичный сервер
Первые шаги абсолютно такие же, что и в случае с первичным сервером — установка bind9 и сетевых утилит.
Далее для того, чтобы хранить файлы зон, создадим каталог /etc/bind/slave и снабдим его необходимыми правами:
Приступаем к настройке зоны на вторичном сервере. В файл /etc/bind/named.conf.local добавляем зону
… и в основном конфигурационном файле named.conf настраиваем представления
После добавления настроек нужно проверить синтаксис, а затем перезагрузить bind9:
Если нет ошибок, нужно выполнить трансфер зоны:
Команда rndc retransfer позволяет выполнить трансфер зоны без проверки серийных номеров. Вкратце, первичный (ns1) и вторичный (ns2) DNS-серверы работают следующим образом. ns2 «смотрит» только на серийный номер зоны, игнорируя содержание всего файла.
Если номер уменьшился, то трансфер этой зоны будет прекращён. Поэтому каждый раз при редактировании зоны критически важно увеличивать серийный номер . В качестве номера рекомендуем использовать текущую дату и некий инкремент.
Как только настроили сервер и выполнили трансфер зоны, в конфиге named.conf на первичном сервере нужно ограничить передачу адресом вторичного сервера. Для этого в named.conf нужно добавить директиву allow-transfer с указанием IP-адреса вторичного DNS-сервера.
И перезагружаем сервер:
Далее все операции будем проводить на первичном сервере.
Prerequisites
To complete this tutorial, you will need the following:
- Some servers that are running in the same datacenter and have private networking enabled
- A new VPS to serve as the Primary DNS server, ns1
- Optional: A new VPS to serve as a Secondary DNS server, ns2
- Root access to all of the above (steps 1-4 here)
If you are unfamiliar with DNS concepts, it is recommended that you read at least the first three parts of our Introduction to Managing DNS.
IPv4 Mode
Before continuing, let’s set BIND to IPv4 mode. On both servers, edit the bind9 service parameters file:
Add “-4” to the OPTIONS variable. It should look like the following:
Now that BIND is installed, let’s configure the primary DNS server.
Читайте также: