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

ОК, я бы еще не рекомендовал писать 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.

А какая связь с 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

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

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

 

Я в пауэрднсе это делал процедуркой в 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.