Рейтинг:0

Достижение высокой пропускной способности DNS QPS

флаг ru

Я пытаюсь найти максимальный QPS (запрос в секунду) виртуальной машины DNS Resolver.

У нас есть наша инфраструктура, размещенная в Azure, с виртуальной машиной (на основе привязки), выступающей в качестве распознавателя, запрашивающей собственный DNS Azure (168.63.129.16), а также локальный DNS. Я не кэширую никаких запросов в распознавателе, и каждая A-запись имеет TTL 300 секунд.

я использую днперф & resperf для запуска загрузки (только A-записи). Теперь я готовлю резолверы DNS к противостоянию DDOS-атакам со скоростью до 100 000 запросов в секунду. Я сталкиваюсь с такими проблемами, как ограничение скорости запросов между моим преобразователем и собственным преобразователем DNS Azure. В результате этого при увеличении QPS резольвер возвращает SERVFAIL ответы обратно клиенту. Однако мы не увидели ни одного SERVFAIL ответы между распознавателем и локальным DNS.

Максимальное количество запросов в секунду, которое я мог видеть при нацеливании на Azure DNS, составляет около 2100. Я много искал в Интернете, есть ли какое-либо такое ограничение скорости, сделанное Azure, но не смог найти ничего связанного. Почему-то я подозреваю, что виртуальная машина распознавателя попала в узкое место, поскольку 2K QPS очень мало для масштаба инфраструктуры Azure.

Несколько вещей (изменения sysctl ядра), которые я изменил в конце, что немного улучшилось, но не сильно.

Привязать изменения конфигурации ::

  • рекурсивные клиенты от 1000 -> 30000

Буфер UDP до более высокого значения, чем 26214400 чтобы остановить сбои буфера::

  • net.core.rmem_max
  • net.core.rmem_default

Диапазон локальных портов от 32768 61000 к 1024 61000 иметь максимум порты доступные для DNS::

  • net.ipv4.ip_local_port_range

разные изменения::

  • txqueuelen от 1000 -> 20000

  • uпределы изменено на 100000

  • net.netfilter.nf_conntrack_max изменено на гораздо более высокое значение

В дополнение к вышесказанному я увеличил размер виртуальной машины с (1 ядро, 2 ГБ ОЗУ) -> (4 ядра, 8 ГБ ОЗУ).После увеличения пропали ошибки пакетов (проверял netstat -s) но не улучшилось SERVFAIL ошибки.

я включил tcpdump чтобы проверить образец SERVFAIL ошибки. В случае сбоев преобразователь пытается отправить запрос в Azure DNS 5 раз (каждый раз через 1 секунду), но ничего не получает от Azure DNS и, следовательно, отправляет SERVFAIL ответ обратно клиенту. Загрузив pcap файл на Wireshark, я вижу, что Azure DNS отправляет ответ обратно на резольвер но резольвер уже отправил SERVFAIL ответ клиенту.

Почему соединение закрывается до получения ответа? Текущий net.netfilter.nf_conntrack_udp_timeout остается нетронутым 30 секунды, но резольвер посылает SERVFAIL через 5 секунд клиенту.

Ниже приведены tcpdump журналы во время ServFail::

чтение из файла dns4.pcap, тип ссылки EN10MB (Ethernet)
10.0.0.10.57710 > 10.0.0.11.домен: [сумма udp в порядке] 1612+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.44513 > 168.63.129.16.домен: [плохая udp cksum 0xbecd -> 0x8cfd!] 52637+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. ар: . OPT UDPsize=4096 DO (77)
10.0.0.11.32378 > 168.63.129.16.домен: [плохая udp cksum 0xbecd -> 0x3950!] 20672+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. ар: . OPT UDPsize=512 DO (77)
10.0.0.11.59973 > 168.63.129.16.домен: [плохой udp cksum 0xbecd -> 0xe2e5!] 15199+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. ар: . OPT UDPsize=512 DO (77)
10.0.0.11.29976 > 168.63.129.16.домен: [плохая udp cksum 0xbec2 -> 0x051b!] 47104+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.43442 > 168.63.129.16.домен: [плохая udp cksum 0xbec2 -> 0xe791!] 41199+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.домен > 10.0.0.10.57710: [плохая udp cksum 0x2a89 -> 0x5e30!] 1612 ServFail q: A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. 0/0/0 (66)

Как вы можете видеть из нижней строки ServFail отправляется после 5 попыток.

Если вы зашли так далеко, я должен поблагодарить вас за чтение этого длинного вопроса. Я знаю, что это слишком много вопросов, но я признателен, если у вас есть какие-то подсказки для меня, поскольку я не могу понять, в чем узкое место.

Первоначально опубликовано на суперпользователе здесь

Patrick Mevzek avatar
флаг cn
«плохая udp cksum» может быть тем, что вы хотите исследовать. Может быть признаком неисправного оборудования/сетевого соединения где-то или ошибок в ядре/драйвере сетевой карты (менее вероятно). Также рекурсивный сервер имен, который вы используете, может ограничить вашу скорость. Не совсем уверен, что понимаете, настраиваете ли вы авторитетный сервер имен, почему вы зависите от рекурсивного, и если вы настраиваете рекурсивный, почему он не имеет кеша и зависит также и от другого.
harshavmb avatar
флаг ru
Привет @PatrickMevzek, спасибо за ответ. Я подозреваю то же самое с ограничением скорости от авторитетного сервера Azure «168.63.129.16». Несмотря на неоднократные тесты, QPS не выходит за пределы «2100».Я не устанавливаю «авторитетный ns», это просто «рекурсивный ns», полагающийся на «azure» для лазурных записей, on-prem для локальных записей. Нет кэширования на рекурсивном уровне ns...
harshavmb avatar
флаг ru
Что касается `плохой udp cksum`, у меня это почти при каждом запросе. Мне нужно выяснить, почему это так безудержно. В основном я не думаю, что это основная причина этого `ServFail`..
Рейтинг:0
флаг ru

Итак, я отвечу на свой вопрос.

Скорость Azure действительно ограничивает количество запросов в секунду до 1000 на ВМ.

Это задокументировано здесь. Независимо от того, что sysctl Я делаю настройку, но у нас все еще есть проблемы с Azure из-за этого ограничения скорости.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.