Почему при огромном количестве HTTP-запросов DNS не резолвит домены?

Мне нужно проверить 200 миллионов доменов на доступность и приндлежность к той или иной CMS.

Я использую PHP 7.1 и делаю проверку большим количеством процессов.

ЖЕЛЕЗО И НАСТРОЙКИ

  • Сервер: Multicore CPU, 64GB RAM, SSD disks, 500 Mbits dedicated bandwidth (OVH server).
  • В файле resolv.conf Google DNS: 8.8.8.8 / 8.8.4.4
  • ulimit -n установлен в значение 655350
  • Использую nload для анализа загрузки канала


ТЕСТИРОВАНИЕ

Я проверял первый 1 миллион доменов из БД изпользуя разное количество параллельно запущенных процессов. Я столкнулся с проблемой, что увеличивая количество процессов, количество доменов, которые не отвечают в течение 30 секунд, сильно увеличилось. Вот результаты.

1. 1000 процессов

Тест: 1,000,000 доменов, 1000 параллельных процессов, средняя загрузка канала 85 Mbits, общее время проверки 1 час.
Результат: 65% доменов успешно зарезолвлены, 35% не были зарезолвлены из-за таймаута.


2. 300 процессов

Тест: 1,000,000 доменов, 300 параллельных процессов, средняя загрузка канала 70 Mbits, общее время проверки 2 часа.
Результат: 85% доменов успешно зарезолвлены, 15% не были зарезолвлены из-за таймаута.


ВЫВОДЫ

Как мы можем видеть, увеличивая количество процессов в 3 раза, мы не получаем увеличение загрузки канала в 3 раза.
Сильно увеличивается количество доменов, которые не были доступны/незарезолвлены. При этом скорость проверки была увеличена в 2 раза.

ВОПРОС

Где узкое место такой проверки? Как я могу использовать всю пропускную способность канала в 500 Mbit? Должен ли я использовать свой собственный DNS сервер и если так, то как его правильно сконфигурировать?

Буду рад любым идеям и советам!
  • Вопрос задан
  • 292 просмотра
Пригласить эксперта
Ответы на вопрос 4
athacker
@athacker
Поставьте unbound, он будет сам рекурсивные запросы слать. Как правильно сконфигурировать -- описано в документации. В принципе, дефолтного конфига будет достаточно, нужно только внешние/внутренние интерфейсы будет указать, ну и в ACL прописать разрешение только на резолв с адреса 127.0.0.1.
Ответ написан
Комментировать
@MechanID
Админ хостинг провайдера
Причина проблемы - гуглднс вас рейтлимитит.
Решение - использовать другой, предпочтительной свой рекурсивный днс например как посоветывал вам athacker.
Ответ написан
Комментировать
begemot_sun
@begemot_sun
Программист в душе.
А у меня есть решение, которое может отресолвить кучу DNS используя сторонние DNS-сервера. Скажем есть лист из 30к таких DNS-серверов, моё решение может взять 4 ГБ файл (емайлов) и отресолвить MX и A записи за время порядка 40 минут для обычного сервера без наворотов. Если интересно, то можно адаптировать под ваши нужды.
Ответ написан
Комментировать
@neovav
Вам надо вначале определиться с целью, что Вы хотите получить, затем разобраться как это работает.
1. Я бы для начала определял данные домена по WHOIS.
https://www.imena.ua/domains/whois?domain=toster.ru
2. Затем я бы у серверов:
nserver: ns1.habradns.net.
nserver: ns2.habradns.net.
nserver: ns3.habradns.net.
Проверял актуальность и время жизни записи для домена. На основе этих данных я бы понимал как часто нужно обновлять сведения о домене.
3. После этого, можно проверять сайт на доступность (зная его имя и IP) и какие CMS, сервисы и прочее там установлено.
Для проверки этого можно использовать как прямое обращение, так и косвенное, через кеш поисковиков.

P.S. Ну и для анонимности я бы это делал через TOR, VPN или на худой конец использовал бы прокси
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы