Почему при огромном количестве 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 или на худой конец использовал бы прокси
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽