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

Вопрос по DNS Round-Robin не пойму, как правильно сделать

Допустим у меня есть три сервера, srv1, srv2, srv3.

На этих серверах поднят одинаковый набор сервисов. Допустим DNS, FTP и NTP.

Я хочу распределить нагрузку и заодно настроить отказоустойчивость. Для первого я использую RR, для второго обеспечиваю синхронизацию данных (либо настройками самого ПО, если оно это умеет, либо самописными скриптами).

Как должна быть задана зона, чтобы RR работал правильно?

Допустим я делаю так:

;base
srv1 A x.y.z.1
srv2 A x.y.z.2
srv3 A x.y.z.3
ns1 CNAME srv1
ns2 CNAME srv2
ns3 CNAME srv3
ftp1 CNAME srv1
ftp2 CNAME srv2
ftp3 CNAME srv3
ntp1 CNAME srv1
ntp2 CNAME srv2
ntp3 CNAME srv3

;round-robin
ns  CNAME srv1
   CNAME srv2
   CNAME srv3
ntp CNAME srv1
   CNAME srv2
   CNAME srv3
ftp CNAME srv1
   CNAME srv2
   CNAME srv3

Но так не работает, DNS-сервер (что BIND, что NSD) сообщает, что для одного имени нельзя задавать несколько CNAME.

Если сделать так:

;round-robin
ns  A x.y.z.1
   A x.y.z.2
   A x.y.z.3
ntp A x.y.z.1
   A x.y.z.2
   A x.y.z.3
ftp A x.y.z.1
   A x.y.z.2
   A x.y.z.3

то в этом случае ошибок не выдается и DNS нормально запускается.

Но мне почему-то вспоминается, что делать несколько A-записей для одного IP-адреса не рекомендуется. Как минимум, будут проблемы с проверкой обратной зоны.

 

Посоветуйте, как правильно такое сделать?

Share this post


Link to post
Share on other sites

Но мне почему-то вспоминается, что делать несколько A-записей для одного IP-адреса не рекомендуется. Как минимум, будут проблемы с проверкой обратной зоны.

Никаких проблем не будет. А вот делать NS как CNAME - не рекомендуется, поскольку глюков огрести с этим можно много и довольно вероятно.

Share this post


Link to post
Share on other sites

Это я указал для примера.

Я раньше так однажды сделал, с глюками столкнулся и больше так не делаю.

Share this post


Link to post
Share on other sites

ОК, я бы еще не рекомендовал писать round-robin как RR, поскольку для DNS RR - это почти всегда resource record :)

 

А обратную зону мало кто проверяет, да никто и не мешает нескольким адресам поставить в соответствие одно имя.

Share this post


Link to post
Share on other sites

Кстати, по обратной зоне тоже пара вопросов.

Разве может на один IP-адрес ссылаться несколько записей?

То есть можно ли написать так?

10 PTR www.domain.ru.
10 PTR mail.domain.ru.

В BIND у меня это не получалось.

 

И как в обратную зону добавляют большие объемы записей?

Допустим у меня есть пул динамических адресов /16 (x.y.0.0-x.y.255.255). И я хочу, чтобы для этого пула автоматически создавались A и PTR записи в формате x.y.a.b<>pool-a-b.domain.ru.

В BIND можно использовать макрос $GENERATE. Но это именно что макрос, он на самом деле генерирует огромную зону на 64к записей и это прекрасно видно на slave-серверах, которые загружают ее целиком.

А можно ли настроить DNS-сервер таким образом, чтобы он автоматически формировал ответ, если запись напрямую не описана в зоне?

Share this post


Link to post
Share on other sites

У меня получилось, смотрите:

6.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.4.1.1.0.0.2.ip6.arpa. 3600 IN PTR test1.record.

6.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.4.1.1.0.0.2.ip6.arpa. 3600 IN PTR test.record.

 

А можно ли настроить DNS-сервер таким образом, чтобы он автоматически формировал ответ, если запись напрямую не описана в зоне?

В BIND10 такое, насколько я помню, обещали. Но с тех пор утекло много воды, сменились разработчики, руководство, поменяли вообще весь проект и я как-то за ним следить перестал. Думаю, что для реверсного DNS нужна поддержка DNSSEC, а без подписанной большой зоны DNSSEC нормально не работает, разве что с opt-out (как в .com, например. но чего это им стоило!). В конце концов, 64к записей - это довольно-таки скромная зона.

Share this post


Link to post
Share on other sites

Anycast и ospf? Шутить изволите?

 

Нет.

А Вы первый раз слышите эти два слова? или вместе? :)

Share this post


Link to post
Share on other sites

anycast + ospf.

А какая связь с DNS?

Или имеется ввиду отказоустойчивость и распределение нагрузки делать с помощью таких способов, а не DNS Round-Robin?

Помоему это только для контролируемой сети подходит. А запросы извне таким образом не распределить.

А round-robin это дешево и сердито.

Share this post


Link to post
Share on other sites

Допустим у меня есть три сервера, srv1, srv2, srv3.

На этих серверах поднят одинаковый набор сервисов. Допустим DNS, FTP и NTP.

Я хочу распределить нагрузку и заодно настроить отказоустойчивость. Для первого я использую RR

Если сделать так:

;round-robin
ntp A x.y.z.1
   A x.y.z.2
   A x.y.z.3

то в этом случае ошибок не выдается и DNS нормально запускается.

Но мне почему-то вспоминается, что делать несколько A-записей для одного IP-адреса не рекомендуется.

Посоветуйте, как правильно такое сделать?

 

При внедрении у себя unbound обнаружил, что unbound требует расширенную форму указания нескольких адресов, иначе просто не крутит:

ntp    0   	A   	1.2.3.4
   0   	A   	1.2.3.5
   0   	A   	1.2.3.6
   0   	A   	1.2.3.7

Share this post


Link to post
Share on other sites

У меня прекрасно крутит.

Только в конфиге в секции server нужно явно указать, чтобы использовать round-robin.

Share this post


Link to post
Share on other sites

Есть мнение что в случае с раундробином надо заставить ДНС отдавать одну запись из списка а не весь список и потом клиент выбирает что использовать.

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

 

Я в пауэрднсе это делал процедуркой в MySQL, может есть другие пути.

Share this post


Link to post
Share on other sites
Есть мнение что в случае с раундробином надо заставить ДНС отдавать одну запись из списка а не весь список и потом клиент выбирает что использовать.

Клиент подключается к кому может, по очереди из всего списка.

Если вам нужно балансировать то это не к ДНС.

Share this post


Link to post
Share on other sites

anycast + ospf.

А какая связь с DNS?

Или имеется ввиду отказоустойчивость и распределение нагрузки делать с помощью таких способов, а не DNS Round-Robin?

Помоему это только для контролируемой сети подходит. А запросы извне таким образом не распределить.

А round-robin это дешево и сердито.

 

 

Чуть-чуть расширьте кругозор.

Round-Robin - имеет несколько недостатков:

1) сервис ДНС как точка отказа

2) один неработающий IP из списка будет давать ошибку клиенту. При 3-х IP - ошибка будет для трети запросов.

 

Так как в большинстве случаев, у провайдера только одна точка терминации абонентского траффика, то Round-Robin здесь вообще бесполезен.

У оставшихся - уже несколько точек терминации абонентского траффика. У кого-то есть автоматизазация переключения сбойнувшего оборудования, а у кого-то нет.

 

Вот тут предлагаю использовать anycast сеть для размещения на локалхост интерфейсах этих точек терминации абонентского траффика.

Если какой-то сервис выходит со строя, то достаточно удалить IP с локалхоста и по OSPF получить живой маршрут к этому IP с соседней точки и перенаправлять туда запросы.

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