|
Выключатели легранд Интернет-магазин электрики. Системы зданий. legrand1.ru |
|
Ремонт ситроен Отзывы и оценки товаров. Техническая и художественная литература. maxitop.ru |
Известно, что для разрешения имен сервисов в IP-адреса используется доменная служба имен DNS (Domain Name Service). Пользователь вводит в строке веб-браузера адрес, например www.google.com происходит запрос к одному из таких серверов, в результате программа получает IP-адрес удаленной системы, по которому и обращается в дальнейшем к сервису. На все про все уходит приблизительно 30-60 ms, а во время большой нагрузки даже больше вплоть до 90. Задача в том, чтобы сократить это время, а для администратора небольшой сети и снизить нагрузку на канал.
Напомню, что DNS сервера прописываются в файле /etc/resolv.conf, в котором после параметра nameserver следует IP-адрес DNS-сервера, при этом обычно на первом месте ставят DNS провайдера так как к нему обращение идет быстрее.
nameserver 194.44.245.244
nameserver 207.46.225.60
Также в этом файле могут присутствовать параметры: domain и search. В записи domain вводится доменное имя локальной системы, а в записи search приводится список доменов на тот случай, если задается только имя. Если к какой-либо системе пользователь обращается часто, он может ввести имя домена в запись search, а затем использовать в качестве адреса только имя.
Для тех, кто пользуется ADSL, применяется и файл /etc/ppp/resolv.conf, имеющий такую же структуру. Статически адреса и соответствующие им имена узлов также можно сохранить в файле /etc/hosts, в таком виде.
127.0.0.1 localhost
При этом порядок работы с ними описан в /etc/host.conf. Например, запись
order host bind
Укажет, что для разрешения адреса сначала необходимо прочитать файл hosts, а в случае отсутствия требуемой записи запросить DNS сервер. И, наконец, в файле /etc/hostname содержит имя локальной системы.
Существует 13 корневых DNS-серверов обозначаемых буквами от А до М, на которых хранится содержимое всех зарегистрированных в зон, и к которым можно обращаться напрямую. Их список можно получить, зайдя http://www.root-servers.org/. Далее каждую зону (ru, ua и пр.) обслуживают свои сервера, и так далее. DNS-получив запрос клиента ищет информацию в своих таблицах, и если не находит ее обращается далее вверх, и получив ответ отсылает его запрашивающему клиенту. Ни кто не мешает самому создать такой сервер, для своих нужд в самом низу иерархии.
Установление соответствия между именами и ip-адресами нужно не только пользователю. Большинство программ работающих с сетью также требуют разрешения имени, например для ведения журнала, поэтому кеширование DNS даже для небольшой сети может принести существенный прирост в скорости соединений. Если вы для выхода в Интернет используете мобильный телефон с GPRS, то вам также стоит задуматься об установке кеширующего DNS. По опыту время DNS запроса в этом случае бывает достаточно велико, чтобы забыть о конфортной работе. К тому же при нынешних расценках на счету каждый байт, и хотя размер DNS запроса невелик, при активном серфинге за месяц на бутылку пива себе сэкономить можно.
Если обратиться на форуме за помощью, то скорее всего вам посоветуют поставить BIND (Berkeley Internet Name Domain). Эта можно сказать культовая программа была разработана в 80-е годы в Университете Беркли, для 4.3BSD UNIX, ее автор – Кевин Дунлар (Kevin Dunlap). Фактически DNS и вырос на BIND, концепция службы имен развивалась вместе с этим сервером. Дошло уже до того, что эти два понятия практически стали не разделимы. Вроде того “мы говорим DNS — подразумеваем BIND“. Но популярность в данном случае не пошла на пользу. Как и в случае с Sendmail, WU-FTPD и других приложений написанных на ранних этапах развития Интернете в BIND периодически обнаруживались серьезные уязвимости. Не то, что их нет в других программах, просто здесь больше всего ищут. Хотя наслоение кода за пару десятков лет естественно ситуацию не улучшает. Дошло уже дело до того, что BIND со временем получил новую расшифровку — Buggy Internet Name Daemon, в основном благодаря одноименной публикации Д.Дж.Бернстайн (D. J. Bernstein) (http://cr.yp.to/djbdns/blurb/unbind.html). Последняя версия BIND 9 переписана с нуля, и считается более безопасной. Но те, кто пробовал настроить BIND, наверняка отметят относительную сложность процесса.
Ну, что ж. Будем искать ему замену. Запрос к репозитарию Ubuntu “sudo apt-cache search dns”, среди предлагаемых решений показал и Dnsmasq, о настройках которого и поговорим дальше.
Dnsmasq (http://www.thekelleys.org.uk/dnsmasq/doc.html), является простым в настройке кеширующим DNS и (опционально) DHCP сервером. Разработан специально для применения в небольших, в том числе и домашних сетях, использующих NAT и соединяющихся с Интернет посредством модема, ADSL и прочих вариантов. Поддерживаемые платформы: Linux, различные варианты *BSD и Mac OS X. Dnsmasq включен во многие дистрибутивы Linux: Gentoo, Debian, Slackware, SUSE, Fedora и других. При загрузке dnsmasq считывает информацию с файла hosts, которую будет использовать как для служб DNS так и DHCP. В случае использования DHCP, можно dnsmasq настроить так, чтобы информация о клиентах получивших IP, автоматически заносилась в hosts. Сервер DHCP поддерживает статический и динамический режим раздачи IP-адресов, работу с несколькими сетями.
Различают два типа серверов: сервер умеющий хранить таблицы соответствий между именами и IP-адресами компьютеров (доменные зоны) и кеширующие (forwarding) DNS сервер, которые просто запоминают информацию и при повторном запросе выдают ее из своей памяти. Dnsmasq поддерживает, оба этих режима.
Загрузить Dnsmasq можно отсюда http://packages.ubuntu.com/dnsmasq или используя утилиту apt, вводим следующую команду.
$sudo apt-get install dnsmasq
Если не получилось, подключите universe репозитарии в /etc/apt/sources.list убрав комментарии со следующих строк.
deb http://ca.archive.ubuntu.com/ubuntu/ dapper universe
deb-src http://ca.archive.ubuntu.com/ubuntu/ dapper universe
Обновите список пакетов “sudo apt-get update” и повторите установку.
Все настройки Dnsmasq производятся в файле /etc/dnsmasq.conf. Большинство параметров в нем можно не трогать, а оставить, как есть. Для начала снимаем знак комментария со строки.
listen-address=127.0.0.1
Теперь открываем /etc/resolv.conf и добавляем следующую строку ставя ее первой по списку чем указываем, что сервером имен по-умолчанию является локальная система.
nameserver 127.0.0.1
Вот в принципе и все. Хотя провайдеры для раздачи IP-адресов используют DHCP, в этом случае клиент dhcp3 получая ответ на запрос, произведет обновление файла /etc/resolv.conf, и затрет нашу запись. Такой вариант, нам не подходит. Поэтому дополнительно в файле /etc/dhcp3/dhclient.conf снимаем знак комментария с параметра prepend, чтобы запись приобрела такой вид.
prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope;
В этом случае при получении обновления, первой строкой будет вставлена запись nameserver 127.0.0.1
Хотя если хотите, чтобы записи о некоторых DNS серверах сохранились, можно эту строку записать и так (в моем естественно случае).
prepend domain-name-servers 127.0.0.1, 194.44.245.244, 207.46.225.60;
Теперь все готово. Чтобы оценить время ответа DNS сервера будет использовать утилиту dig (domain information groper), которая используется для сбора информации от серверов имен. Параметров у dig много, но в данном случае поступим просто.
$ dig google.com
; <<>> DiG 9.3.2 <<>> google.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62579
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 170 IN A 64.233.187.99
google.com. 170 IN A 72.14.207.99
google.com. 170 IN A 64.233.167.99
;; AUTHORITY SECTION:
google.com. 158531 IN NS ns4.google.com.
google.com. 158531 IN NS ns1.google.com.
google.com. 158531 IN NS ns2.google.com.
google.com. 158531 IN NS ns3.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 161053 IN A 216.239.32.10
ns2.google.com. 161129 IN A 216.239.34.10
ns3.google.com. 334439 IN A 216.239.36.10
ns4.google.com. 161802 IN A 216.239.38.10
;; SERVER: 194.44.245.244#53(194.44.245.244)
;; WHEN: Tue Nov 14 15:18:58 2006
;; MSG SIZE rcvd: 212
Как видите с помощью dig можно изучать правила написания файлов при создании собственной DNS зоны. В ответ мы на запрос получили записи типа «адрес» (A, прямое преобразование) и адреса доменных серверов всех его поддоменов (записи типа NS), а также адрес DNS сервера который его обработал — 194.44.245.244. И в конце дано время запроса – 71 мс. Если произвести запрос повторно, то это время уменьшится до 20-30 мс.
Теперь перезапускаем dnsmasq, чтобы он смог перечитать конфигурационные файлы снова замеряем время ответа
$ sudo /etc/init.d/dnsmasq restart
Restarting DNS forwarder and DHCP server: dnsmasq.
Первый запрос – 20 мс, но теперь информация находится в локальном кеше. Повторяем.
$ dig google.com
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 156 IN A 64.233.187.99
google.com. 156 IN A 72.14.207.99
google.com. 156 IN A 64.233.167.99
;; Query time: 9 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Nov 14 15:27:35 2006
;; MSG SIZE rcvd: 76
Теперь поздравляем себя с успехом
. Как видите, в позиции SERVER стоит локальный компьютер 127.0.0.1 и время ответа составляет уже 9 мс, то есть результата мы добились. Также обратите внимание на отличие в работе. В ответ на запрос dnsmasq показал только A записи, но в нашем случае этого достаточно. Кроме этого dnsmasq может кешировать PTR записи обратного преобразования.
Для соединения с Интернет я использую PPPoE, для корректной работы dnsmasq в этом случае требуется сделать еще несколько шагов иначе при обновлении файлов, вся информация затрется. Для начала создадим для dnsmasq, используя /etc/resolv.conf отдельный файл с DNS настройками.
$ sudo cp /etc/resolv.conf /etc/resolv.dnsmasq.conf
Теперь в /etc/dnsmasq.conf в параметре resolv-file пропишем этот файл.
resolv-file=/etc/resolv.dnsmasq.conf
В /etc/resolv.conf оставляем, только:
nameserver 127.0.0.1
Так как ADSL использует свой resolv.conf , заменяем и его тоже.
$ sudo cp /etc/resolv.conf /etc/ppp/resolv.conf
И наконец в файле настроек ADSL соединения /etc/ppp/peers/dsl-provider запретим обновлять resolv.conf комментируя следующую линию:
#usepeerdns
Перезапускаем dnsmasq, соединяемся с Интернет “pon dsl-provider” и наслаждаемся быстрой работой.
Вот в принципе и все. Настройка DHCP сервера также проста, поэтому при необходимости ее разберете сами. Если все же dnsmasq показался вам достаточно сложным, попробуйте nscd (Name Service Cache Daemon), который еще проще в настройках. Dnsmasq имеет один некритичный, но недостаток, после перезагрузки он потеряет всю информацию и процесс наполнения локального кеша начнется сначала. Если вас это не устраивает и необходимо сохранение кеша попробуйте pdnsd, который обладает такой функциональностью. Linux forever!
3 Комментариев к Ускоряем веб-серфинг с Dnsmasq
Ноябрь 25th, 2008 | 18:55
А случаем нет перевода dnsmasq.conf ?
Ноябрь 25th, 2008 | 19:05
Да нет, большая часть параметров там понятна
Февраль 25th, 2010 | 15:09
если добавить nameserver 127.0.0.1 в файл /etc/resolv.conf.head, тогда при перезаписи /etc/resolv.conf первой строчкой будет содержимое из resolv.conf.head.