И когда мы пытаемся например из России открыть web-сайт, расположенный в США (и NS сервера соответственно там же), и домен не нашелся в DNS-кеше вашего провайдера — то ждать придется долго. Может даже целую секунду: пока мы через океан получим имена NS серверов домена, пока разрезолвим их IP, пока отправим и получим собственно сам DNS запрос…
Пару лет назад Google завела свои публичные DNS сервера, а для агитации перехода на них — они разработали утилитку NameBench, которая прогоняет тесты DNS по вашей истории серфинга и показывает, насколько Google DNS быстрее DNS сервера вашего провайдера.
Но мне удалось сделать свой DNS сервер, который работает быстрее Google Public DNS, и в этой краткой заметке хочу поделится результатами.
PDNSD
pdnsd — кэширующий DNS proxy. Помимо банального кэширования DNS запросов (с возможностью жестко задавать минимальный TTL — может быть нужно на очень плохом интернете), он умеет отсылать запрос одновременно на несколько адресов одновременно, и отдавать клиенту первый вернувшийся ответ. Именно это — и дает нам основное преимущество в скорости.
Ставится в 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-мегабитный интернет. А уж для медленных (радио)линков с большой латентностью и потерей пакетов — и вовсе разница может быть как между небом и землей.
ссылка на оригинал статьи http://habrahabr.ru/post/159013/
Добавить комментарий