|
Ускорение сетевого доступа с помощью кэширования доменных имен PDNSD Автор: (C) Сунил Томас Тоникужийил
[Sunil Thomas Thonikuzhiyil] |
|
1. Где можно найти этот документ 1. Где можно найти этот документ
2. Что такое PDNSDDNS -- это система доменных имен. Задача 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):
Сам кэш содержиться в файле /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.
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
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.
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 |
|
Вернуться на главную страницу |