Ускорение сетевого доступа с помощью кэширования доменных имен PDNSD

  Автор: (C) Сунил Томас Тоникужийил [Sunil Thomas Thonikuzhiyil]
Перевод : (C) C. Скороходов.


 

1. Где можно найти этот документ
2. Что такое PDNSD
3. Установка
4. Пример конфигурационного файла
5. Тонкая подстройка конфигурации
6. Часто задаваемые вопросы
7. Благодарности

1. Где можно найти этот документ


http://geocities.com/sunil_tt/pdnsd.txt

2. Что такое PDNSD

DNS -- это система доменных имен. Задача DNS -- перевод текстовых имен машин в числовые IP адреса, которые имеют все компьютеры, подключенные к сети. На платформе Unix служба имен обычно осуществляется программой named. Эта программа входит в пакет "BIND", координацию разработки которого для Internet Software Consortium ведет Пол Викси [Paul Vixie].

PDNSD -- это кэширующий прокси-сервер DNS. В отличие от BIND, PDNSD сохраняет кэш имен, хранящийся в RAM в виде дискового файла и считывает этот файл в начале следующего модемного соединения с Интернетом. BIND, когда он работает в кэширующем режиме на локальной машине с dial-up соединением, хранит свой кэш соответствий имен и IP адресов исключительно в оперативной памяти. Эти данные не записываются на диск после разрыва соединения -- BIND "типа" не предназначен для машин без постоянного соединения с Сетью.

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

PDNSD распространяется под лицензией GNU/GPL, скачать можно отсюда: http://home.t-online.de/home/Moestl/

Там же можно взять исходный код в виде пакетов Redhat RPM:

http://home.t-online.de/home/Moestl/

Пакеты DEB можно скачать отсюда:

ftp://ftp.debian.org/debian/pool/main/p/pdnsd/pdnsd_1.1.2.a-2_i386.deb

3. Установка

Загрузите архив pdnsd-<version>.tar.gz с одного из перечисленных выше адресо.

Распакуйте с помощью команды

tar zxvf pdnsd-<version>.tar.gz
Перейдите в каталок pdnsd-<version> и наберите на клавиатуре
$ ./configure
Скрипт configure может принимать довольно много параметров, подробности посмотрите в файле manual.txt, который поставляется с исходным кодом PDNSD. Особенно интересны параметры --prefix и --with-distribution. Вызов
$ ./configure --help
перечислит все опции.

Я предполагаю, что Вы не будете указывать какие-либо опции командной строки. Makefile, сгенерированный скриптом configure будет содержать следующие умолчания (не вредно взглянуть в сгенерированный Makefile):

PDNSD по умолчанию устанавливается в /usr/local (можно изменить с помощью опции --prefix, переданной configure). Кэш PDNSD по умолчанию располагается в var/cache/pdnsd. Файл конфигурации PDNSD pdnsd.conf будет находиться в /etc.

Теперь напечатайте:

$ make
Эта команда откомпилирует pdnsd. Я не сталкивался с какими-либо проблемами компиляции ни на Debian 2.2, ни на Redhat 6.1. После этого получите права root командой su, т.к. установка требует привелегий суперпользователя. Затем наберите:
# make install
Этот этап выполнит следующее (цитата из pdnsd manual.txt):
  1. Копирует pdnsd в $(prefix)/sbin/

  2. Копирует pdnsd-ctl в $(prefix)/sbin/

  3. Копирует файл docs/pdnsd.conf (пример конфигурационного файла) в /etc/ (и создает резервную копию /etc/pdnsd.conf под именем /etc/pdnsd.conf.old). Если у Вас уже есть файл /etc/pdnsd.conf.old и Вы не хотите, чтобы он был переписан, то скопируйте его в другое место или переименуйте перед выполнением 'make install'

  4. Создает директорию кэша, если ее нет. После установки, следует проверить права доступа к файлам и отредактировать /etc/pdnsd.conf в соответствии с Вашими нуждами. Если Вы пользуетесь опцией run_as, пожалуйста убедитесь, что владельцем каталога кэша является именно тот пользователь, которого Вы указали в этой опции! И еще, учтите, что проблема прав доступа была решена в последних релизах. К этому моменту /usr/local/sbin должен содержать двоичные файлы pdnsd и pdnsd-ctl. 'pdnsd' -- это собственно и есть демон DNS-прокси, а 'pdnsd-ctl' -- программа для управления кэшем.

Сам кэш содержиться в файле /var/cache/pdnsd/pdnsd.cache. Размер файла кэша в начальный момент равняется 4 и будет увеличиваться по мере того, как Вы будете "разгуливать" в Интернет. Соответствующее указание в /etc/pdnsd.conf выглядит, как 'perm_cache=<value>;'. По умолчанию этот параметр установлен равным 512(KB). По здравому рассуждению его можно увеличить, размер кэша 2048(KB) будет вполне безопасной величиной для машины с 64MB RAM. Рост кэша можно наблюдать только после перезагрузки или перезапуска демона PDNSD. Так происходит потому, что PDNSD сохраняет содержимое кэша в оперативной памяти только в момент остановки.

Запускать PDNSD необходимо каждый раз при запуске системы. Для этого нужно установить стартовый скрипт. Каталог rc в дистрибутиве PDNSD содержит стартовые скрипты для Redhan, SuSE и Debian. Скрипты для SuSE я не тестировал.

В зависимости от того, каким дистрибутивом Вы пользуетесь, проделайте следующее.

3.a) Debian GNU/Linux.

Скопируйте pdnsd-{version}/src/rc/Debian/pdnsd в /etc/init.d и наберите update-rc.d Если в Вашей системе установлен bind, его следует остановить. Отредактируйте /etc/resolv.conf так, чтобы в нем была следующая директива.
      nameserver 127.0.0.1
 

Закоментируйте строки, относящиеся к другим серверам имен. Запустите pdnsd командой /etc/init.d/pdnsd start. Проверьте pdnsd выполнив команду nslookup. На моем компьютере она выводит следующее:

     Default Server: debian
     Address: 127.0.0.1
     >

Остановите pdnsd командой /etc/init.d/pdnsd stop.
Запустите любимый текстовой редактор и добавьте следующую строчку в файл /etc/hosts:

     127.0.0.2    testhost

Сохраните файл и снова запустите pdnsd. Наберите nslookup. В приглашении nslookup наберите 'testhost'.

    > testhost
      Server: debian
      Address: 127.0.0.1
      Non-authoritative answer:
      Name: testhost
      Address: 127.0.0.2
Если Вы получили подобный ответ, то это означает, что Ваш pdnsd работает (не забудьте удалить эту строку из /etc/hosts)

3.b) Redhat Linux


Скопируйте pdnsd-{version}/src/rc/Redhat/pdnsd в /etc/rc.d/init.d Остановите bind, если он установлен в Вашей системе. Добавьте следующую строку в /etc/resolv.conf

    nameserver 127.0.0.1
 

Закомментируйте всё, относящееся к другим серверам имен. Командой /etc/rc.d/init.d/pdnsd start запустите pdnsd. Проверьте работу pdnsd набрав nslookup. У меня она показала

    Default Server: Redhat
    Address: 127.0.0.1
    >

Остановите pdnsd командой /etc/rc.d/init.d/pdnsd stop.
Запустите текстовой редактор и добавьте в /etc/hosts file следующую строку.

 
    127.0.0.2    testhost

Сохраните файл и снова запустите pdnsd. Наберите nslookup. В приглашении nslookup наберите 'testhost'.

  > testhost
  Server: Redhat
  Address: 127.0.0.1
  Non-authoritative answer:
  Name: testhost
  Address: 127.0.0.2
 

Если Вы получили подобный ответ, то Ваш pdnsd функционирует нормально (не забудьте удалить добавленную строчку из /etc/hosts)

4. Пример конфигурационного файла

Мой файл pdnsd.conf выглядит так
global {
 perm_cache=2048;
 cache_dir="/var/cache/pdnsd";
 max_ttl=204800;
 run_as="nobody";
 paranoid=on;
 server_port=53;
 server_ip="127.0.0.1";
}
server {
 ip="202.54.6.5";
 timeout=260;
 interval=900;
 uptest=none;
 ping_timeout=500;
 purge_cache=off;
 caching=on;
}
server {
 ip="202.54.1.30";
 timeout=260;
 interval=900;
 uptest=none;
 ping_timeout=500;
 purge_cache=off;
 caching=on;
}
server {
 ip="202.9.128.6";
 timeout=260;
 interval=900;
 uptest=none;
 ping_timeout=500;
 purge_cache=off;
 caching=on;
}
source {
 ttl=86400;
 owner="localhost.";
 serve_aliases=on;
 file="/etc/hosts";
}
/*
rr {
 ttl=86400;
 owner="localhost.";
 name="localhost.";
 a="127.0.0.1";
 soa="localhost.","root.localhost.",42,86400,900,86400,86400;
}
rr {
 ttl=86400;
 owner="localhost.";
 name="1.0.0.127.in-addr.arpa.";
 ptr="localhost.";
 soa="localhost.","root.localhost.",42,86400,900,86400,86400;
} */

Это пример работающей конфигурации (используются серверы DNS на VSNL и Indian ISP). Вам придется отредактировать секции server файла pdnsd.conf в соответствии с Вашими нуждами. (Внесите серверы DNS Вашего провайдера с соответствующими IP адресами). Еще раз запустите PDNSD и подсоединитесь к Интернет. Наберите nslookup и запросите, к примеру, yahoo.com. Ответ должен быть примерно следующим:

> yahoo.com
Server: debian
Address: 127.0.0.1
Non-authoritative answer:
Name: yahoo.com
Addresses: 204.71.200.245
Остановите PDNSD и отсоединитесь от Сети. Снова запустите PDNSD и запросите yahoo.com через nslookup. Если Вы получите такой же ответ, как и был, можно с удовольствием сделать кофе и расслабится. В противном случае Вы что-то напутали, и....??

5. Тонкая подстройка конфигурации

Если на Вашем главном сервере имен используется BIND, PDNSD очень даже подходит на роль ведомого сервера. Тут Вы, однако, попадаете на скрытые вилы: какой локальный адрес и порт должен "слушать" PDNSD? Следующие "хитрые" ragOO pdnsd.conf и named.conf помогают их обойти:

[pdnsd.conf]

global {
perm_cache=2048;
cache_dir="/var/cache/pdnsd";
max_ttl=604800;
run_as="nobody";
paranoid=off;
server_port=53
server_ip="127.0.0.2";
}
[named.conf -- только секция, относящаяся к делу]
options {
directory "/var/cache/bind";
forward first;
forwarders {127.0.0.2;202.54.6.1;202.54.1.30};
};
В GNU/Linux машина ragOO имеет локальные (lo) IP адреса с 127.0.0.1 по 8. Так делается во всех GNU/Linux системах и можно спокойно указывать адрес 127.0.0.2 для локального сервера. PDNSD слушает порт Port 53 и, заметьте, 127.0.0.2 является первым форвардером [forwarder] в named.conf. Это означает, что BIND на Вашей машине в первую очередь запрашивает адрес, соответствующий запрошенному клиентской программой имени, из кэша PDNSD, а если его там не оказывается, запрашивает DNS Вашего провайдера, если это возможно.

6. Часто задаваемые вопросы

Приведенные вопросы и ответы взяты из переписки с Томасом Моэстлом [Thomas Moestl], автором pdnsd.

Вопрос. У меня возникли проблемы с установкой по умолчанию. Кэш не растет. Его размер все время 4 байта. Я изменил права доступа на 'nobody' и кэш начал расти. Возможно, что проблема в моей конфигурации. Не сообщите ли правильные права доступа к /var/cache/pdnsd и /var/cache/pdnsd/pdnsd.cache ?

Ответ. Лучшим вариантом является предоставление пользователю, от которого запускается pdnsd прав записи в директорию кэша (и, естественно, в сам файл с кэшем): chown <user> /var/cache/pdnsd chmod 0700 /var/cache/pdnsd chown <user> /var/cache/pdnsd.cache chmod 0600 /var/cache/pdnsd/pdnsd.cache

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

7. Благодарности

Спасибо Томасу Моэстлу [Thomas Moestl], автору этой элегантной утилиты, за разъяснение неясных моментов. Он сделал меня лучшим пользователем PDNSD :-) !

Спасибо Виктору Матью Маною [Manoj Victor Mathew] и Бхату Рагхавенвдре [Raghavendra Bhat] (ragOO) за упоминание 'pdnsd' во время одного из собраний ILUG-Cochin. ragOO сделал обширную редакторскую правку и вдохновил меня на продолжение работы.

И в заключение, благодарю всех пользователей этой элегантной программы, которые, может быть, сочтут эту напыщенную болтовню полезной. Это написано для вас...;)

 


Copyright © 2001, Sunil Thomas Thonikuzhiyil.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 65 of Linux Gazette, April 2001

Вернуться на главную страницу