Jump to content
Калькуляторы

Балансировка между серверами ДНС

Добрый день.

Коллеги, поделитесь знаниями, как сделать баласировку нагрузки между серверами ДНС, чтобы не получалось, что при подключении клиентов по DHCP все будут ломиться на примари DNS.

Проблема в том, что нужна одна большая сеть типа 10.0.0.0/8. То есть на подсети с разными ДНС я ее разбить не могу.

Share this post


Link to post
Share on other sites

>> все будут ломиться на примари DNS.

Разок не получат ответ и перейдут на второй сервер. К стати, в DHCP нет примари/не примари. ДНС отдаются списком без выделения какой либо роли. По RFC, после получения адреса, ДНС, к которому пойдёт первый запрос, должен выбираться случайно, если ДНС серверов пришло более одного.

Share this post


Link to post
Share on other sites

Добрый день.

Коллеги, поделитесь знаниями, как сделать баласировку нагрузки между серверами ДНС, чтобы не получалось, что при подключении клиентов по DHCP все будут ломиться на примари DNS.

Проблема в том, что нужна одна большая сеть типа 10.0.0.0/8. То есть на подсети с разными ДНС я ее разбить не могу.

Какой DHCP?

Почему сегментировать не можете?

Share this post


Link to post
Share on other sites

Добрый день.

Коллеги, поделитесь знаниями, как сделать баласировку нагрузки между серверами ДНС, чтобы не получалось, что при подключении клиентов по DHCP все будут ломиться на примари DNS.

Проблема в том, что нужна одна большая сеть типа 10.0.0.0/8. То есть на подсети с разными ДНС я ее разбить не могу.

Какой DHCP?

Почему сегментировать не можете?

 

DHCP на рутере Cisco. Клиент поставил задачу, что все абоненты (несколько тысяч человек) должны быть в одной сети.

Share this post


Link to post
Share on other sites

Поставьте несколько DNS серверов с одинаковыми IP адресами в разных участках сети - если терминация всей подсети будет происходить не в одном месте.

Share this post


Link to post
Share on other sites

Клиент поставил задачу, что все абоненты (несколько тысяч человек) должны быть в одной сети.

ссзб

Share this post


Link to post
Share on other sites

Клиент поставил задачу, что все абоненты (несколько тысяч человек) должны быть в одной сети.

ссзб

Это понятно, но головняк-то мой получится...

 

Поставьте несколько DNS серверов с одинаковыми IP адресами в разных участках сети - если терминация всей подсети будет происходить не в одном месте.

 

В одном. Грубо говоря, громадная площадка с толпой людей:)

Share this post


Link to post
Share on other sites

В одном. Грубо говоря, громадная площадка с толпой людей:)

Как вариант можно настроить средствами anycast-маршрутизации.

Настройте на лупбеках серверов одинаковые адреса, добавьте эти интерфейсы в DNS-сервер (в смысле разрешите отвечать на запросы с адреса лупбека), на маршрутизаторе прописывайте маршруты на адрес лупбека на два эти сервера, и выдаете клиентам адреса лупбеков в качестве DNS сервера. Можно вместо статики настроить динамическую маршрутизацию, принцип не меняется.

Маршрутизатор должен уметь ECMP load-balancing и балансировку на /32 сети (последний пункт поддерживают не все L3-свитчи). Из недостатков - нет связи между маршрутом на сервере и статусом DNS сервера: при остановке DNS на одном из серверов трафик все равно будет направляться к нему.

 

Разок не получат ответ и перейдут на второй сервер.

В разных ОС по-разному, Windows вроде бы посылает запросы на оба сервера одновременно. А FreeBSD для определения недоступности DNS-сервера требуется несколько минут, правда в некоторых приложениях своя реализация резолвинга, более шустрая.

Share this post


Link to post
Share on other sites
Windows вроде бы посылает запросы на оба сервера одновременно.

Это не так. WireShark в руки.

 

А FreeBSD для определения недоступности DNS-сервера

Это не в ОС. Это в glibc.

Share this post


Link to post
Share on other sites

Ну будут ломиться на один, и что? Как бы нагрузка по сегодняшним меркам смешная.

Share this post


Link to post
Share on other sites

днс сервера в этой сети будут не самым слабым местом. Где-то на последнем месте

Share this post


Link to post
Share on other sites

Проблема в том, что нужна одна большая сеть типа 10.0.0.0/8.

в одном бродкасте?

Share this post


Link to post
Share on other sites

Добрый день.

Коллеги, поделитесь знаниями, как сделать баласировку нагрузки между серверами ДНС, чтобы не получалось, что при подключении клиентов по DHCP все будут ломиться на примари DNS.

Проблема в том, что нужна одна большая сеть типа 10.0.0.0/8. То есть на подсети с разными ДНС я ее разбить не могу.

Я в дхцп делаю роундробин выдачу двух днс по dhcprequest.

Share this post


Link to post
Share on other sites

Проще взять сервер потолще и поднять нормальный рекурсор на pdns и будет счастье. Это вообще, иллюзия что нагрузка будет большая. Если уж сильно хочется - haproxy в помощь.

Share this post


Link to post
Share on other sites

Я в дхцп делаю роундробин выдачу двух днс по dhcprequest.

 

Как?

 

По теме, поднимите unbound, кеш побольше, чем по-умолчанию и, собственно, всё.

Share this post


Link to post
Share on other sites

Как?

Меняю местами первичный и вторичный сервера в строке опции днс.

Share this post


Link to post
Share on other sites

Поставьте несколько DNS серверов с одинаковыми IP адресами в разных участках сети - если терминация всей подсети будет происходить не в одном месте.

Совет курильщика.

Share this post


Link to post
Share on other sites

Добрый день.

Коллеги, поделитесь знаниями, как сделать баласировку нагрузки между серверами ДНС, чтобы не получалось, что при подключении клиентов по DHCP все будут ломиться на примари DNS.

Проблема в том, что нужна одна большая сеть типа 10.0.0.0/8. То есть на подсети с разными ДНС я ее разбить не могу.

 

top - 11:00:18 up 8 days, 20:48,  1 user,  load average: 0.18, 0.16, 0.14
Tasks: 101 total,   1 running, 100 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.1 us,  2.7 sy,  0.0 ni, 91.2 id,  0.0 wa,  0.0 hi,  1.0 si,  0.0 st
KiB Mem:   1018248 total,   646148 used,   372100 free,   138300 buffers
KiB Swap:     8188 total,      140 used,     8048 free.    83220 cached Mem

 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
10554 named     20   0  256244 121176   3036 S  7.6 11.9   3:11.12 named
  11 root      20   0       0      0      0 S  0.7  0.0  39:43.11 rcuos/0
 841 root      20   0  452744   9928   6900 S  0.7  1.0  76:29.90 NetworkManager
  10 root      20   0       0      0      0 S  0.3  0.0  35:16.52 rcu_sched
 822 root      20   0  186916   4576   3664 S  0.3  0.4   9:29.94 vmtoolsd
2462 mysql     20   0  907468  91436   7748 S  0.3  9.0   4:58.56 mysqld
10590 root      20   0  123676   1608   1112 R  0.3  0.2   0:00.09 top
   1 root      20   0  129484   3928   2308 S  0.0  0.4   0:23.76 systemd
   2 root      20   0       0      0      0 S  0.0  0.0   0:00.10 kthreadd
   3 root      20   0       0      0      0 S  0.0  0.0   2:23.89 ksoftirqd/0
...

Полторы тысячи абонентов живут в интернете. Виртуалка под VMWare ESXi. RPZ с блеклистом на список роскомнадзора.

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

Share this post


Link to post
Share on other sites

2ShyLion реализацию rpz покажите?

Share this post


Link to post
Share on other sites

2ShyLion реализацию rpz покажите?

 

Там все просто как 3 кпейки.

 

У меня хост, запрашивающий данные из РКН и DNS сервер разные, поэтому на первом мастер зоны, а на DNS сервере-слейв.

Скрипт после парсинга пинает мастера: rndc reload zapret, а дальше все само. Серийник только не забудь увеличивать ( уменя тупо time() ).

 

Мастер:

zone "zapret" IN {
       type master;
       file "zapret.zone";
       allow-transfer {
               slave_ip;
       };
       also-notify { slave_ip; };
       //это важно, там есть имена с подчеркиванием
       check-names ignore;
};

 

Файл зоны:

# head /var/named/zapret.zone
$ORIGIN zapret.
$TTL 1H
@       SOA     localhost.      root (1490176736 1h 15m 30d 2h)
       NS      localhost.
cannabay.org    A       127.0.0.1
*.cannabay.org  A       127.0.0.1
eoliaseeds.com  A       127.0.0.1
*.eoliaseeds.com        A       127.0.0.1
www.weedy.be    A       127.0.0.1
*.www.weedy.be  A       127.0.0.1
и т.д.

 

Сам сервер DNS:

options {
       вся обычная фигня...

       response-policy {zone "zapret"; };
};

zone "zapret" IN {
       type slave;
       masters { master_ip; };
       check-names ignore;
};

 

named ванильный из стандартного репозитория CentOS 7

Share this post


Link to post
Share on other sites

Спасибо, а то у меня зонами обычными сделано, пухнет сильно.

Share this post


Link to post
Share on other sites

Логирование:

logging {
       channel rpz {
               file "data/rpz.log" versions 7 size 1m;
               severity info;
               print-time yes;
       };
       category rpz { rpz; };
}

 

22-Mar-2017 15:57:22.707 client x.x.x.72#39667 (f-slots.org): rpz QNAME Local-Data rewrite f-slots.org via f-slots.org.zapret
22-Mar-2017 15:57:22.708 client x.x.x.72#39667 (casino-automats.com): rpz QNAME Local-Data rewrite casino-automats.com via casino-automats.com.zapret
22-Mar-2017 15:57:22.711 client x.x.x.72#39667 (slotosfera.com): rpz QNAME Local-Data rewrite slotosfera.com via slotosfera.com.zapret

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this