Ускорение сетевого доступа с помощью кэширования доменных имен 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 |
Вернуться на главную страницу |