Для многих не секрет, что служба разрешения имён DNS очень важная составляющая любых сетей и Интернет не исключение. Когда мы посещаем какие-либо ресурсы в онлайн мы используем понятные человеку имена вместо понятных компьютеру числа в IP адресе. DNS как раз этим и занимается - преобразует имена в числа для компьютеров и числа в имена для нас.
Любые задержки в преобразовании сказываются на скорости сетевых соединений и сёрфинг в Интернете не исключение. Хотите ускорить работу Ubuntu в Интернете? Вперёд.
НОВИЧКАМ лучше НЕ ПРИМЕНЯТЬ советы изложенные в данной статье!
Сначала опишу изменения в работе DNS, которые произошли в Ubuntu 12.04.
Раньше все DNS сервера, в ручную или автоматически полученные от DHCP, прописывались в файле /etc/resolv.conf. Теперь введена служба resolvconf и файл /etc/resolv.conf ею перезаписывается и ваши ручные правки будут утеряны.
Теперь Resolvconf хранит в /etc/resolvconf/resolv.conf.d/ каталоге файлы base, head, original и tail файлы. Всё хранится в resolv.conf формате:
- base: используется, когда нет вообще никаких данных
- head: используется для заголовка в /etc/resolv.conf
- original: просто резервная копия оригинального resolv.conf во время установки resolvconf
- tail: любая информация из этого файла добавляется в конец /etc/resolv.conf
Можно пойти другим путём и указать ваши DNS сервера через параметр dns-nameservers в /etc/network/interfaces у каждого соединения.
Второе изменение в работе DNS - Dnsmasq теперь резолвер DNS по умолчанию.
Для чего это придумано? А дело в том, что стандартное разрешение имён DNS осуществлялось библиотекой и она не могла определять состояние ваших DNS серверов и если с ним были проблемы, то возникали не нужные таймауты при разрешении имён DNS.
Уже за это не стоит ругать Dnsmasq службу, а поблагодарить её за умение определять "мёртвые" сервера DNS и исключать временно их из обслуживания.
И второе, Dnsmasq умеет отправлять DNS трафик через относительно медленный VPN только для связанных с ним подсетями и доменами. Остальной DNS трафик может идти через другие, возможно, быстрые локальные соединения.
Реальный пример. Ваш компьютер подключён к локальной сети провайдера. DHCP сервер провайдера выдаёт вам IP адрес и адреса DNS серверов. Эти настройки "применяются" к вашей сетевой карте и вы можете обращаться в локальной сети провайдера к локальным ресурсам.
Выход в Интернет провайдер осуществляет через дополнительное соединение, которое вы должны были настроить по инструкции. Чаще всего это PPTP сервер провайдера, который "выведет" вас в Интернет.
Такая схема, любимая российскими провайдерами, не понятно почему прижилась, хотя во всём мире это считается моветоном. Ну это лирическое отступление.
И так у вас уже два соединения. Одно - локальное соединение с сетью провайдера, где вы слушаете музыку, играете, качаете файлы с локальных серверов провайдера. Второе соединение - для доступа к Интернет.
Так вот это второе соединение тоже может аннонсировать свои DNS сервера и в результате у вас есть список DNS серверов провайдера, которые обслуживают вас.
Dnsmasq умеет НЕ посылать все DNS запросы в ваше VPN (PPTP, PPPoE и т.д.) соединение и забивать довольно латентный канал VPN, а посылать в VPN канал только нужный трафик. Все остальные запросы, к примеру к локальным сайтам, пойдут через локальное быстрое соединение.
Хорошо? Хорошо!
Только в этой бочке счастья, одна ложка дёгтя! Dnsmasq - оказывается всё таки кеширующий разрешатель имён DNS, но не ровня Bind. Dnsmasq заметно проигрывает Bind, особенно при наличии нескольких сетей и множества DNS серверов в системе.
-c, --cache-size= Set the size of dnsmasq's cache. The default is 150 names. Setting the cache size to zero disables caching.
Проблема может усугубится тем, что если вы любитель ручных настроек сети и вас коробит от NetworkManager, вы можете указать в /etc/network/interfaces для каждого соединения нужный DNS сервер с помощью dns-nameservers.
НО забыть уточнить (с помощью dns-search и dns-domain) для каких доменов обращаться, тогда мы получаем ситуацию, когда Dnsmasq долбится с запросами к конкретному DNS серверу, тот не может или не хочет обслуживать нас и возникают задержки. Dnsmasq вынужден дождаться окончания таймаута и перейти к опросу следующего DNS сервера. И так на каждый запрос.
Выход?
Поставить кеширующий DNS резолвер BIND, который является официальным стандартом от ISC. Он будет запоминать наши запросы/ответы и преобразование имён ускорится. Существенно.
Указать в системе что у вас единственный DNS преобразователь имён и это вы сами.
Как это сделать?
- Напомните себе ваши текущие DNS сервера.
cat /etc/resolv.conf
- Ставим Bind.
sudo apt-get install bind9
- Определитесь как вы разруливаете сеть. Автоматически через NetworkManager или в ручную.
- Что делать если сеть настраиваете в ручную и вас бесит NetworkManager?
Через /etc/resolvconf/resolv.conf.d/tail
nameserver 127.0.0.1или через /etc/network/interfaces
dns-nameservers 127.0.0.1укажите что вы сами себе DNS сервер.
- Что делать если всё настроено автоматически через NetworkManager?
Вам нужно в свойствах соединения указать во вкладке "Параметры IPv4" что вам нужен только IP адрес, а DNS сервера вы укажите сами. Выставьте "Способ настройки" = "Автоматически (DHCP, только адрес)" и укажите Серверы DNS 127.0.0.1
- Что делать если сеть настраиваете в ручную и вас бесит NetworkManager?
- Укажите в файле /etc/bind/named.conf.options в секции forwarders те DNS сервера, которые BIND будет опрашивать и запоминать от них положительные и отрицательные ответы. Желательно указать DNS сервера провайдера, если хотите посещать его ресурсы. Я традиционно дополнительно указываю Google DNS сервер с красивым адресом 8.8.8.8.
forwarders { 192.168.1.123; 10.1.2.3; 8.8.8.8; };
и перезапустите BIND
sudo service bind9 restart
. - Отключите хороший разрешатель (resolver) DNS имён - dnsmasq. В /etc/NetworkManager/NetworkManager.conf закомментируйте dns=dnsmasq строку и
sudo restart network-manager
или рестарт ПК. - Проверьте командой
ifconfig -a
, что с IP адресами у вас всё нормально. - Проверьте командой
sudo netstat -nap4|grep 53
, что 53 порт DNS службы обслуживает процесс named (bind9) - Проверьте командой
nslookup ya.ru
, что преобразование происходит корректно и вас обслуживает DNS сервер 127.0.0.1, то есть вы сами.
А намного станет лучше? Если вы фанат Google Chrome, который по умолчанию использует трюк для ускорения и все упоминаемые сайты на странице заранее резолвит, то выигрыш, вообще, обалденный.
Да и вообще, теперь у вас на борту свой кеширующий DNS сервер, который не только преобразует имена, но и запоминает ответы.
Надеюсь вы оцените скорость. В целом ускорить систему вы сможете по статье Ускорение Ubuntu.
Немає коментарів:
Дописати коментар