Библиотека сайта rus-linux.net
Серверы Linux. Часть III. Сервер DNS
Оригинал: Introduction to DNSАвтор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 11 июля 2015 г.
Глава 4. Вводная информация о серверах DNS
4.10. Кэш DNS
Протокол DNS предусматривает кэширование данных.
В том случае, если клиент отправляет запрос локальному серверу DNS, который не обладает необходимой информацией для ответа на него, локальный сервер будет осуществлять поиск в в рамках дерева серверов DNS сервера, обладающего необходимой информацией. Локальный сервер имен начнет поиск сервера с отправки запроса корневому серверу, после чего перейдет к серверу, обслуживающему домен верхнего уровня и в конце концов обменяется данными с сервером, обслуживающим интересующий домен. После того, как локальный сервер имен получит информацию для ответа на запрос, он передаст эту информацию отправившему запрос клиенту, а также сохранит копию данных в своем кэше. Благодаря этому в случае отправки идентичного запроса этим же или другим клиентом этому же серверу имен, необходимая информация будет извлекаться уже из кэша сервера.
Рассмотрим пример, в котором клиент отправляет запрос на получение данных ресурсной записи A домена www.linux-trianing.be локальному серверу имен. Это первый подобный запрос, принятый данным локальным сервером имен. Локальный сервер имен установит, что он не обладает информацией о данном домене, как и сервер имен, обслуживающий домен верхнего уровня .be, и корневой сервер. В результате сервер имен использует информацию от корневого сервера для отправки итеративного запроса.
Корневой сервер DNS отправит ссылку на сервер, который обслуживает домен верхнего уровня .be (корневые серверы DNS не осуществляют разрешение полностью определенных доменных имен, а также не отвечают на рекурсивные запросы).
После этого локальный сервер имен отправит итеративный запрос серверу, обслуживающему домен верхнего уровня .be. Этот сервер отправит в ответ ссылку на сервер имен, который обладает информацией о домене linux-training.be.
После получения ссылки на сервер DNS, обладающий информацией о домене, локальный сервер имен отправит запрос информации о домене www.linux-training.be на этот сервер (или один из ведомых серверов, работающих с этим сервером). После того, как локальный сервер DNS получит IP-адрес, соответствующий домену www.linux-training.be, он отправит его клиенту, от которого был принят запрос.
Помимо кэширования данных ресурсной записи A домена www.linux-training.be, локальный сервер DNS также добавит в кэш данные ресурсных записей NS и A сервера имен домена linux-training.be, а также сервера имен домена верхнего уровня .be.
4.11. Пример настройки зоны DNS
Процесс настройки зоны DNS заключается в создании записи для зоны DNS в файле конфигурации /etc/bind/named.conf.local со ссылкой на другой файл (который является базой данных зоны).
Ниже приведен пример упомянутой записи из файла конфигурации /etc/bnd/named.conf.local.
root@debian7:~# cat /etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "paul.local" IN {
type master;
file "/etc/bind/db.paul.local";
allow-update { none; };
};
root@debian7:~#
Для создания файла базы данных зоны DNS может быть использован простой метод, заключающийся в копировании и редактировании файла базы данных уже существующей зоны DNS (что гораздо проще создания данного файла с нуля).
root@debian7:/etc/bind# cp db.empty db.paul.local root@debian7:/etc/bind# vi db.paul.local
А это пример файла базы данных зоны DNS.
root@debian7:/etc/bind# cat db.paul.local
; zone for classroom teaching
$TTL 86400
@ IN SOA debianpaul.paul.local. root.paul.local (
2014100100 ; Serial
1h ; Refresh
1h ; Retry
2h ; Expire
86400 ) ; Negative Cache TTL
;
; name servers
;
IN NS ns1
IN NS debianpaul
IN NS debian7
;
; servers
;
debianpaul IN A 10.104.33.30
debian7 IN A 10.104.33.30
ns1 IN A 10.104.33.30
;www IN A 10.104.33.30
4.12. Пример: создание кэширующего сервера DNS
1. Установите программные компоненты сервера DNS в дистрибутиве Debian.
root@debian7:~# aptitude update && aptitude upgrade ... root@debian7:~# aptitude install bind9 ... root@debian7:~# dpkg -l | grep bind9 | tr -s ' ' ii bind9 1:9.8.4.dfsg.P1-6+nmu2+deb7u2 amd64 Internet Domain Name Server ii bind9-host 1:9.8.4.dfsg.P1-6+nmu2+deb7u2 amd64 Version of 'host' bundled... ii bind9utils 1:9.8.4.dfsg.P1-6+nmu2+deb7u2 amd64 Utilities for BIND ii libbind9-80 1:9.8.4.dfsg.P1-6+nmu2+deb7u2 amd64 BIND9 Shared Library use... root@debian7:~#
2. Исследуйте используемые по умолчанию конфигурационные файлы сервера DNS. Можете ли вы дать пояснения относительно предназначения каждого из этих файлов?
root@debian7:~# ls -l /etc/bind итого 52 -rw-r--r-- 1 root root 2389 сен 5 20:25 bind.keys -rw-r--r-- 1 root root 237 сен 5 20:25 db.0 -rw-r--r-- 1 root root 271 сен 5 20:25 db.127 -rw-r--r-- 1 root root 237 сен 5 20:25 db.255 -rw-r--r-- 1 root root 353 сен 5 20:25 db.empty -rw-r--r-- 1 root root 270 сен 5 20:25 db.local -rw-r--r-- 1 root root 3048 сен 5 20:25 db.root -rw-r--r-- 1 root bind 463 сен 5 20:25 named.conf -rw-r--r-- 1 root bind 490 сен 5 20:25 named.conf.default-zones -rw-r--r-- 1 root bind 374 окт 1 20:01 named.conf.local -rw-r--r-- 1 root bind 913 окт 1 13:24 named.conf.options -rw-r----- 1 bind bind 77 окт 1 11:14 rndc.key -rw-r--r-- 1 root root 1317 сен 5 20:25 zones.rfc191
3. Настройте кэширующий сервер DNS. Режим кэширования запросов является стандартным режимом работы сервера, используемым по умолчанию. После настройки кэширующий сервер DNS будет осуществлять разрешение доменных имен и сохранять в кэше полученные данные. Во многих руководствах даются рекомендации относительно использования перенаправляющего сервера DNS, но в данном примере мы попытаемся организовать работу сервера DNS без него!
Оказывается, кэширующий сервер DNS может работать и без перенаправляющего сервера DNS! Вы можете воспользоваться сниффером для ознакомления с ходом процесса обмена данным при разрешении доменных имен. Только что установленный вами сервер DNS не будет использовать кэш, а также данные из файла конфигурации (/etc/resolv.conf) вашей локальной системы. Но откуда же тогда он получает информацию? И что вы можете узнать в процессе перехвата трафика протокола DNS?
4. Опишите в подробностях процессы, происходящие при использовании кэширующего сервера DNS без перенаправляющего сервера DNS. Хотя представленный ниже снимок окна сниффера Wireshark и может оказаться полезным, вы можете узнать гораздо больше, самостоятельно перехватывая и анализируя трафик протокола DNS.
Вы должны обнаруживать трафик по направлению к корневому серверу имен каждый раз при разрешении нового имени домена верхнего уровня. Помните о том, что протокол DNS предусматривает кэширование, следовательно, при повторении запроса будет генерироваться гораздо меньший объем трафика, ведь ваш сервер DNS хранит ответ на ранее полученный запрос в памяти.
4.13. Пример: настройка кэширующего сервера DNS для работы с перенаправляющим сервером DNS
5. Используйте адрес общедоступного сервера DNS компании Google в качестве адреса перенаправляющего сервера DNS. IP-адресом данного сервера является адрес 8.8.8.8.
Секция описания перенаправляющего сервера DNS файла конфигурации сервера DNS до внесения изменений:
root@debian7:~# grep -A2 'forwarders {' /etc/bind/named.conf.options
// forwarders {
// 0.0.0.0;
// };
Команда для изменения данного файла:
root@debian7:~# vi /etc/bind/named.conf.options
Секция описания перенаправляющего сервера DNS файла конфигурации сервера DNS после внесения изменений:
root@debian7:~# grep -A2 'forwarders {' /etc/bind/named.conf.options
forwarders {
8.8.8.8;
};
Команда для перезапуска службы сервера DNS:
root@debian7:~# service bind9 restart Stopping domain name service...: bind9. Starting domain name service...: bind9.
6. Дайте пояснения относительно целей использования перенаправляющего сервера DNS. Что делает наш сервер DNS после получения запроса?
root@debian7:~# nslookup > server Default server: 10.104.33.30 Address: 10.104.33.30#53 > linux-training.be Server: 10.104.33.30 Address: 10.104.33.30#53 Non-authoritative answer: Name: linux-training.be Address: 188.93.155.87 >
Ниже приведен фрагмент вывода команды tcpdump udp port 53, генерируемый при использовании упомянутой выше утилиты nslookup для получения информации о домене linux-training.be.
root@debian7:~# tcpdump udp port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
Вы должны обнаружить две следующие строки в выводе утилиты tcpdump:
10.104.33.30.19381 > google-public-dns-a.google.com.domain: 18237+% [1au] A? \ linux-training.be. (46) google-public-dns-a.google.com.domain > 10.104.33.30.19381: 18237 1/0/1 A 188\ .93.155.87 (62)
Ниже приведен достаточно старый снимок окна сниффера Wireshark, который может оказаться полезным, причем в случае самостоятельного перехвата трафика вы должны будете увидеть информацию об аналогичных пакетах (но IP-адреса будут отличаться).
7. Что случится, если вы отправите запрос для получения информации об этом же доменном имени еще раз?
8. Почему в выводе утилиты присутствует информация об "неавторитативном ответе" (non-authoritative answer)? В каком случае сервер является авторитативным?
9. Вы можете использовать утилиту dig вместо утилиты nslookup.
root@debian7:~# dig @10.104.33.30 linux-training.be +short 188.93.155.87 root@debian7:~#
10. Как мы можем избежать указания IP-адреса сервера DNS при использовании утилиты dig или nslookup?
Достаточно изменить содержимое данного конфигурационного файла:
root@debian7:~# cat /etc/resolv.conf nameserver 10.46.101.1 root@debian7:~#
Следующим образом:
root@debian7:~# cat /etc/resolv.conf nameserver 10.104.33.30 root@debian7:~#
11. Откуда утилита dig получает информацию при разрешении доменного имени в первый раз? А во второй раз? Что вы думаете по этому поводу?
| Предыдущий раздел: | Оглавление | Следующий раздел: |
| 4.3. Кэширующие серверы DNS | 4.14. Пример: настройка первичного авторитативного сервера DNS |
