Тестирование
производительности
DNS-серверов
Андрей Лескин
QratorLabs/HLL
Что такое DNS?
Что такое DNS?
• Коротко:
highloadlab.com  178.248.233.7
Что такое DNS?
• Коротко:
highloadlab.com  178.248.233.7
• Длинно:

(список
неполон)
DNS-серверы
• minidns dns server
https://code.google.com/p/minidns/source/browse/minidns
“wc -l minidns”
107 (!!!)
DNS-серверы
• minidns dns server
https://code.google.com/p/minidns/source/browse/minidns
“wc -l minidns”
107 (!!!)
DNS-серверы
• minidns dns server
https://code.google.com/p/minidns/source/browse/minidns
“wc -l minidns”
107 (!!!)

• Authoritative.
There can be only one!

• Caching.
The cache is out there...
А что мы хотим?
• Скорость
• Устойчивость
• Производительность
А что мы хотим?
• Скорость
• Устойчивость
• Производительность

SUPER
Authoritative
Server

SLOW
Authoritative
Server

SUPER
Caching
Server

QUERIES
QUERIES
А что мы хотим?
• Скорость
• Устойчивость
• Производительность

SUPER
Authoritative
Server

SLOW
Authoritative
Server

SUPER
Caching
Server

QUERIES

• Доменов: МАЛО
• Запросов: МНОГО

QUERIES
DNS test. А что уже было сломано до нас?
DNS test. А что уже было сломано до нас?

• dnsperf & resperf?
DNS test. А что уже было сломано до нас?

• dnsperf & resperf? NO
• tcpreplay?
DNS test. А что уже было сломано до нас?

• dnsperf & resperf? NO
• tcpreplay? NO
• Ideal/real world data? NOOO!!!
DNS test. How?
DNS test. How?
DNS test. Measurements

• QPS, RPS = PPS
• Traffic: Mbit/s
• CPU load avg
• Поведение при повышении нагрузки
• А еще есть крутилки и включалки!
DNS test. А на что будем смотреть?
• Knot (1.2.0 & 1.3.0-RC5)
• Yadifa (1.0.2)
• NSD3 (3.2.15)
• NSD4 (4.0.0b4)
• PowerDNS (3.3)
• TinyDNS (1.05)
• Unbound (1.4.16)
• Pdnsd (1.2.8)

• Server:
Dual Xeon E5-2670
32Gb RAM DDR3 1333Mhz
Intel X520-DA2 10Gbit
• Generator:
Single Xeon E5-2670
32Gb RAM DDR3 1333Mhz
Intel X520-DA2 10Gbit
• Gentoo Linux 3.7.9
DNS test. Setup
• Максимально ванильно!
• Authoritative:
300 сформированных зон
• Caching:
Прогреваем кэш на такой же объем
данных
Results. Выбираем победителя крутилок.
Knot-1.2.0, queries=1
Results. Выбираем победителя крутилок.
Knot-1.2.0, queries=1
Results. Queries in flow: 01
Knot
NSD
Unbound
Yadifa
PowerDNS
Pdnsd
TinyDNS
Results. Queries in flow: 01
Knot
NSD
Unbound
Yadifa
PowerDNS
Pdnsd
TinyDNS
Results. Queries in flow: 02
Knot
NSD
Unbound
PowerDNS
Pdnsd
Yadifa
TinyDNS
Results. Queries in flow: 02
Knot
NSD
Unbound
PowerDNS
Pdnsd
Yadifa
TinyDNS
Results. Queries in flow: 02
Knot
NSD
Unbound
PowerDNS
Pdnsd
Yadifa
TinyDNS
Results. Queries in flow: 20
Knot
NSD
Unbound
PowerDNS
Pdnsd
Yadifa
TinyDNS
Подводные камни.

IT HAPPENS.
BE PREPARED
Подводные камни. Local.

• Knot-1.2.0
Победитель может все... Или не все?
Подводные камни. Local.

• Knot-1.2.0
Победитель может все... Или не все?

• Yadifa-1.0.2
Нужно больше золота!
Подводные камни. Local.

• Knot-1.2.0
Победитель может все... Или не все?

• Yadifa-1.0.2
Нужно больше золота!

• Pdnsd
Приз за оригинальность.
Подводные камни. Global.
Камень

Контр-камень

• UDP

• BCP38

Мне кажется, пакет пришел оттуда... Но я не
гарантирую это!

Когда случится счастье – нам не ведомо!
Подводные камни. Global.
Камень

Контр-камень

• UDP

• BCP38

Мне кажется, пакет пришел оттуда... Но я не
гарантирую это!

• DNS cache poisoning (Kaminsky)
Адрес поменялся! Иди сюда!

Когда случится счастье – нам не ведомо!

• DNSSec

Это счастье есть, но мало кто пользуется 
Подводные камни. Global.
Камень

Контр-камень

• UDP

• BCP38

Мне кажется, пакет пришел оттуда... Но я не
гарантирую это!

• DNS cache poisoning (Kaminsky)

Когда случится счастье – нам не ведомо!

• DNSSec

Адрес поменялся! Иди сюда!

Это счастье есть, но мало кто пользуется 

• Стать DNS Amplifier

• Можно самостоятельно:
- закрыть рекурсию извне
- RRL (DROP, SLIP)
- DROP пакетов с src_port 53

Чтобы не быть жертвой - надо не быть жертвой

- dig isoc.org ANY (26 vs 2435)
- открытая рекурсия
Подводные камни. Сам не выжил.
Подводные камни. Сам не выжил.
Подводные камни. Сам не выжил.
Спасибо!
Андрей Лескин
serenheit@highloadlab.com

Андрей Лескин, QratorLabs/HLL