DNS HOWTO: Настройка кеширующего сервера имен.
Next Previous Contents3. Настройка кеширующего сервера имен.
Это первый шаг в настройке DNS, очень полезный для dialup пользователей
Кеширующий сервер найдет ответ на запрос об имени машины и запомнит его, чтобы ответить, когда вы запросите эту же информацию в следующий раз. Это значительно уменьшит время ожидания ответа при следующем запросе, особенно если у вас медленное соединение.
Для начала вам нужен файл, названный /etc/named.conf
. Из него
named читает информацию при старте. Сейчас он должен просто содержать
следующие строки:
// Файл настроек для только кеширующего сервера options { directory "/var/named"; // Раскомментируйте следующую строку, если вы // работаете через firewall и система не работает: // query-source port 53; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };
Строка `directory
' задает где искать файлы. Все файлы используемые
впоследствии, будут именоваться относительно этой директории. Таким образом
pz
-- это директория в директории /var/named
, т.е.,
/var/named/pz
. /var/named
-- это правильная директория
согласно Linux File system Standard (Стандарту файловой системы Linux).
Файл названный /var/named/root.hints
должен находится в
указанной директории. Он должен содержать следующую информацию:
; Здесь может быть комментарии, если у вас уже есть этот файл. ; Если их нет, то не беспокойтесь. . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241
Этот файл описывает имена корневых серверов имен по всему миру. Их список изменяется время от времени и эта часть в дальнейшем должна сопровождаться. Смотрите раздел по сопровождению для того, чтобы узнать как хранить эту информацию соответствующей действительности.
Следующий раздел в named.conf
-- это последняя зона
. Я
объясню как она используется в следующих разделах, сейчас просто создайте
файл, названный 127.0.0
в поддиректории pz
:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.
Далее вам необходимо, чтобы ваш файл /etc/resolv.conf
выглядел
примерно так:
search subdomain.your-domain.edu your-domain.edu nameserver 127.0.0.1
Строка `search
' задает в каких доменах должен идти поиск машин с
кокторыми вы хотите соединиться. Строка `nameserver
' указывает адрес
вашего сервера имен, в нашем случае это ваша собственная машина, поскольку
на ней запущен named (127.0.0.1 это правильный адрес, также никаких
проблем, если ваша машина имеет другой адрес). Если вы хотите перечислите
несколько серверов имен, то поместите их по одному в строку со словом
`nameserver
' для каждого. (Замечание: Named никогда не читает этот
файл, это делает программа resolver, которая использует named).
Проиллюстрируем как это работает: Если клиент пытается найти машину с
именем foo
, то сначала программа пытается найти машину с полным
именем foo.subdomain.your-domain.edu
, затем с именем
foo.your-fomain.edu
, и в конце концов foo
. Если клиент
пытается найти sunsite.unc.edu
, то сначала пробуется
sunsite.unc.edu.subdomain.your-domain.edu
(да это глупо, но вот
так это работает), затем sunsite.unc.edu.your-domain.edu
, и в
конце концов sunsite.unc.edu
. Вы можете не помещать слишком много
доменов в строку поиска, поскольку поиск в них займет слишком много
времени.
Пример предполагает, что вы находитесь в домене
subdomain.your-domain.edu
, и ваша машина вероятно называется
your-machine.subdomain.your-domain.edu
. Строка поиска не должна
содержать ваш TLD (Top Level Domain (Домен Верхнего Уровня), `edu
' в
нашем случае). Если вам необходимо часто соединяться с машиной в другом
домене, то вы можете добавить этот домен в строку поиска, примерно вот так:
search subdomain.your-domain.edu your-domain.edu other-domain.com
и так далее. Очевидно, что вам необходимо поместить в эту строку имена настоящих доменов, вместо вышеприведенных. Пожалуйста заметьте отсутствие точки в конце имени домена. Это важно, пожалуйста заметьте отсутствие точки в конце имени доменов.
Далее в зависимости от вашей версии libc вам необходимо вносить
исправления либо в файл /etc/nsswitch.conf
, либо в файл
/etc/host.conf
. Если у вас уже есть файл nsswitch.conf
, то
значит мы будем вносить исправления в него, если же его нет, то мы будем
вносить изменения в файл host.conf
.
/etc/nsswitch.conf
Это длинный файл описывающий как получить разные типы данных, из какого
файла или базы данных. В начале он обычно содержит полезные комментарии,
которые вы должны учесть при чтении этого файла. После того, как вы найдете
строку начинающуюся с `hosts:
', вы должны увидеть:
hosts: files dns
Если в этом файле нет строки начинающейся с `
hosts:
', то поместите
вышеприведенную строку в файл. Эта строка указывает программам сначала
выполнять поиск в файле /etc/hosts
, а затем просматривать DNS в
соответствии с порядком указанном в файле resolv.conf
.
/etc/host.conf
Этот файл вероятно содержит разные данные, одна из строк должна
начинаться со слова order
и выглядеть примерно так:
order hosts,bind
Если строки с `order
' нет, то вы должны ее добавить. Она заставляет
подпрограмму разрешения имен сначала посмотреть в файле
/etc/hosts
, а затем сделать запрос к серверу имен (который в
resolv.conf
указан как машина с адресом 127.0.0.1).
3.1 Запуск named
После этих приготовлений пришло время запуска named. Если вы используете
dialup соединение, то сначала производите подключение. Наберите `ndc
start
' без опций, и нажмите клавишу return. Если это не работает, то
попробуйте следующую команду `/usr/sbin/ndc start
'. Если опять
попытка не удалась, то смотрите раздел
Вопросы и ответы. Если вы посмотрите в файл сообщений syslog (обычно названный
/var/adm/messages
, но может быть другая директория
/var/log
и другой файл syslog
в которые необходимо
посмотреть) во время запуска named (выполните команду tail -f
/var/log/messages
), то вы должны увидеть что-то подобное следующему:
(строки заканчивающиеся на \ продолжаются на следующей строке)
Feb 15 01:26:17 roke named[6091]: starting. named 8.1.1 Sat Feb 14 \
00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
(IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.
Если есть какие-нибудь сообщения об ошибках, то значит вы что-то сделали неправильно. Named укажет в каком файле ошибка (я надеюсь, что это один из файлов named.conf и root.hints :-). Завершите выполнение named и проверьте файлы конфигурации.
Теперь вы можете протестировать ваше настройку. Запустите nslookup для проверки вашей работы.
$ nslookup
Default Server: localhost
Address: 127.0.0.1
>
Если это выглядит так, то значит вы заставили систему работать. Мы так
надеемся. Если что-то другое, то вернитесь назад и все проверьте. Каждый
раз когда вы изменяете файл named.conf
, вам необходимо перезапустить
named, используя команду ndc restart
.
Теперь мы можем ввести запрос на поиск информации. Попробуйте найти
машину близкую к вам. pat.uio.no
находится близко от меня, в
Университете Осло:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Name: pat.uio.no
Address: 129.240.130.16
Сейчас nslookup попросит ваш named посмотреть информацию о машине
pat.uio.no
. Затем он соединится с одним из серверов имен,
перечисленных в вашем файле root.hints
, и запросит у него путь к
данной машине. Это может занять какое-то время, до того как вы получите
результаты, поскольку система может понадобится попробовать найти заданную
машину во всех доменах, перечисленных в вашем файле
/etc/resolv.conf
.
Если вы запросите то же самое, то вы получите такой ответ:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
Name: pat.uio.no
Address: 129.240.2.50
Заметим, что мы в это раз получили сообщение `Non-authoritative
answer:
'. Это означает, что named в этот раз не делал запрос к внешним
серверам имен, информация находиться в кеше. Но кешированная информация
может быть устаревшей. Так что он вас информируют об этой (весьма
незначительной) опасности сообщением `Non-authorative
answer:
'. nslookup
выдает это сообщение, когда вы второй раз
запрашиваете об одной и той же машине -- это знак того, что named
кеширует информацию и это значит, что он работает правильно. Вы можете
завершить работу nslookup
дав команду `exit
'.
3.2 Как сделать лучше
В больших, хорошо организованных академических сетях или сетях ISP
(Internet Service Provider) вы иногда сможете обнаружить, что
администраторы сети настроили иерархию серверов DNS, которые помогут
облегчить загрузку внутренней сети, также загрузку внешних серверов. Не так
легко узнать находитесь ли вы внутри такой сети или нет. Однако это не
совсем важно, и используя DNS-сервер вашего сетевого провайдера как
``forwarder'' вы можете сделать ответы на запросы быстрее и уменьшить
загрузку вашей сети. Если вы используете модем, то это может быть большой
победой. Для пользы этого примера мы предполагаем, что ваш сетевой
провайдер имеет два сервера имен, который вы можете использовать, с
сетевыми номерами 10.0.0.1
и 10.1.0.1
. Затем в вашем файле
named.conf
, внутри открывающего раздела под названием ``options''
вставьте следующие строки:
forward first; forwarders { 10.0.0.1; 10.1.0.1; };
Перезапустите ваш сервер имен и протестируйте его используя nslookup. Все должно работать отлично.
3.3 Поздравления
Теперь вы знаете как установить кеширующий сервер имен. Возьмите пива, молока или того, что вы предпочитаете и отпразднуйте это.
Next Previous Contents