Понедельник, 19.11.2018, 09:12
Информатика и ИКТ
Приветствую Вас Гость | RSS
Главная Локальный PDNSD Регистрация Вход
Меню сайта

oszone.net

IT-N-образование

Yandex_tech

mail_news

Rambler

Радио Одинцово

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Делаем свой локальный DNS (PDNSD), с блэкджеком и быстрее Google Public DNS

С каждым годом скорость интернета — как последней мили, так и магистральных каналов становится все выше. Лишь одно неизменно — латентность уже уперлась в физические ограничения: скорость света в оптоволокне — около 200тыс километров в секунду, и соответственно, быстрее чем за ~150ms ответ от сервера через атлантический океан не получить в обозримой перспективе (хотя конечно есть изыски, вроде оптоволокна с воздушной сердцевиной или радиорелейной связи, но это для простых смертных едва-ли доступно). 

Когда мы пытаемся например из России открыть web-сайт, расположенный в США (его NS сервера вероятно там же), и домен не нашелся в DNS-кэше вашего провайдера — то ждать придется долго даже на гигабитном интернете, возможно даже целую секунду: пока мы через океан получим имена NS серверов домена, пока разрезолвим их IP, пока отправим и получим собственно сам DNS запрос… 

Пару лет назад Google завела свои публичные DNS сервера, а для агитации перехода на них — они разработали утилиткуNameBench, которая прогоняет тесты DNS по вашей истории серфинга и показывает, насколько Google DNS быстрее DNS сервера вашего провайдера. 

Но мне удалось сделать свой DNS сервер, который работает быстрее Google Public DNS, и в этой краткой заметке хочу поделится результатами.

PDNSD

pdnsd — кэширующий DNS proxy. Помимо банального кэширования DNS запросов (с возможностью жестко задавать минимальный TTL — может быть нужно на очень плохом интернете), он умеет отсылать запрос одновременно на несколько «родительских» DNS серверов, и отдавать клиенту первый вернувшийся ответ. Именно это — и дает нам основное преимущество в скорости.

Ставится в Ubuntu — банальным apt-get.

Пара моментов в конфиге


global {
 perm_cache=10240; //Максимальный размер кэша в килобайтах. 
 //По дефолту было 1024, все записи у меня не влазили.
 cache_dir="/var/cache/pdnsd";
[...]
 min_ttl=60m; // Минимальное время сохранения записи в кэше.
 //Даже если TTL придет меньше 60минут - будет 60минут
 max_ttl=1w; // Максимальное время сохранения записи в кэше
 neg_ttl=5m; //Время кеширования отрицательных ответов (т.е. если домен не найден)
[..]
 par_queries=3; //Количество одновременно опрашиваемых "родительских" DNS серверов
}

server {
 label = "main";
 ip = 85.21.192.5 //Тут 4 сервера, если первые 3 не ответят, то будет отправлен запрос на 4-й
 , 213.234.192.7 //Первые 2 сервера - это сервер вашего провайдера, и какого-нибудь соседнего
 , 8.8.4.4 //Это Google Public DNS - у них закэшировано все редкое и резолвят они быстро
 , 8.8.8.8
 ;
[..]
}


В принципе, кэширование можно сделать менее агрессивным (min_ttl=1m например), но за год работы проблем особых не возникло. В случае проблем — при желании можно вытереть одну запись из кэша: 
sudo pdnsd-ctl record 3.14.by delete
или сразу все:
sudo pdnsd-ctl empty-cache


Результаты тестирования в NameBench



Видим, что для 50% запросов ответ мы получаем менее чем за 10мс, для 85% быстрее Google Public DNS, ну а дальше результаты естественно совпадают с гуглом.

По результатам тестов NameBench нам радостно сообщает:
8.8.8.8 Slower replica of SYS-192.167.0.98 [192.167.0.98]
8.8.4.4 Slower replica of SYS-192.167.0.98 [192.167.0.98]

Таким образом, умный кэширующий DNS прокси с параллельными запросами — позволяет ускорить даже 100-мегабитный интернет. А уж для медленных (радио)линков с большой латентностью и потерей пакетов — и вовсе разница может быть как между небом и землей.
Поиск

Календарь
«  Ноябрь 2018  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930

Форма входа

nixp.ru

OpenNet

Новые программы

SLO.ru

Погода
Яндекс.Погода

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Архив записей

    Copyright MyCorp © 2018