пʼятниця, 4 травня 2012 р.

Ускоряем сёрфинг в Интернете

Для многих не секрет, что служба разрешения имён 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

  • Укажите в файле /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.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments