DNS-сервери вже використовують anycast. Чи додасть більше IP-адрес підвищить масштабованість?


9

RFC 1034 вимагає, щоб ми призначили принаймні дві IP-адреси для DNS-серверів. Однак надмірність вже може бути досягнута однією IP-адресою, якщо ми будемо використовувати будь-яку адресацію. BGP anycast, схоже, масштабується на сотні або навіть тисячі серверів.

Якщо так, то чому нам ще потрібні кілька IP-адрес для серверів DNS? Чи насправді це підвищує надмірність (сприяє доступності), якщо у нас вже є будь-яка трансляція, або це лише міф?

З якими проблемами та помилками ми можемо зіткнутися, якщо будемо використовувати лише одну IP-адресу?

Маючи на увазі, я маю на увазі повністю пропускати вторинні DNS-адреси або використовувати неправдивий IP (наприклад 1.2.3.4) для другої адреси, коли для деяких установок потрібно щонайменше дві.

Відповіді:


16

Один anycast IP-адреса не дає вам такої ж надмірності, як дві одноосібні IP-адреси у різних IP-префіксах.

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

Я бачив налаштування DNS у будь-якому режимі, коли DNS-сервер знизився, але пакети все одно будуть спрямовані на цей DNS-сервер. Що б не піклувався про рекламу префікса, може просто не знати, що сервер DNS знизився.

Це стає ще більш складним, якщо розглянутий DNS-сервер не є авторитетним DNS-сервером, а скоріше рекурсивним резолютором.

У такому рекурсивному резолютору необхідно мати як адресу anycast для прийому запитів від клієнтів, так і одноадресні адреси для запитів авторитетних серверів DNS. Але якби одноразові адреси знизилися, це може легко виглядати достатньо здоровим, що все-таки буде спрямовано запити.

Anycast - чудовий інструмент для масштабування та зменшення затримки. Але для надмірності він не повинен стояти окремо.

Однак кілька резервних басейнів anycast є хорошим рішенням щодо доступності. Добре відомий приклад - 8.8.8.8 та 8.8.4.4. Обидва є адресами anycast, але їх ніколи не слід перенаправляти на один і той же фізичний DNS-сервер (якщо припустимо, що Google зробив свою роботу добре).

Якщо у вас є 10 фізичних серверів DNS, ви можете налаштувати їх як 2 пули з 5 серверами у кожному пулі або 5 пулами з 2 у кожному пулі. Ви хочете уникати наявності одного фізичного сервера DNS одночасно в декількох пулах.

То скільки IP-адрес слід виділити? Потрібно мати IP-адреси, які можна налаштувати як anycast незалежно один від одного. Зазвичай це означає, що вам потрібно буде виділити цілий / 24 адресного простору IPv4 або / 48 адресного простору IPv6 для кожного пулу. Це може дуже обмежити кількість басейнів, які ви можете мати.

Крім того, якщо ми говоримо про авторитетних серверах, відповідь DNS зі всіма вашими записами NS, а клей A і AAAA повинен вміщуватися в одному пакеті 512 байт. Для кореневих серверів це було розроблено до 13 адрес. Але це не включало клей та IPv6, тому число, до якого ви доїдете, було б меншим.

Кожен пул повинен бути максимально розподілений географічно. Якщо у вас є 5 серверів у Європі та 5 у Нот Америці та 2 IP-адреси anycast, ви не створюєте один пул, що охоплює кожен континент. Ви ставите 2 з Європи в басейн з 3 з Північної Америки, а інші 5 в інший басейн.

Якщо у вас є більше 2 пулів anycast, ви можете дозволити фізичному серверу тимчасово перебувати в більшій кількості пулів. Але ви ніколи не повинні дозволяти фізичному серверу бути у всіх пулах одночасно.

Поєднувати будь-яку трансляцію та одноадресну інформацію можливо, але потрібно бути обережним. Якщо у вас є IP-адреси для двох пулів, я б не поєднував. Але якщо у вас є тільки один anycast IP для роботи, може бути доцільним також включати одноадресні IP-адреси. Проблема полягає в тому, що включення одноадресних IP-адрес не дасть вам гарної затримки та балансування навантаження.

Якщо фізичний сервер буде доступний як unicast, так і anycast, ви можете ризикувати, щоб користувачі потрапили на той же сервер, що і основний та вторинний, і втратити доступ, якщо він знизиться. Цього можна уникнути, використовуючи лише одноадресні адреси серверів, які не є пулом anycast, або завжди надаючи користувачам дві одноадресні адреси.

Чим більше одноразових адрес ви введете в суміш, тим менше запитів буде надіслано на адресу anycast, і тим менше вигоди ви отримаєте від anycast з точки зору затримки та масштабованості.


Ви маєте на увазі, що найкращий спосіб досягти масштабованості - це використовувати багато вторинних одноадресних адрес (так само старий спосіб встановлення ns1.domain, ns2.d, ns3.d ... ns300.d), а не використовувати anycast?
Pacerier

@Pacerier Ні, це не те, що я маю на увазі. Я уточню це у своїй відповіді.
kasperd

+1. Помилка маршрутизації може навіть призвести ваш одноадресний в пекло (тупик). Маючи другу окрему адресу, ви маєте більше ніж один "квиток" на це;)
TomTom

2
+1 Я хотів би додати, що додавання фальшивого ip як другої адреси звучить як жахлива ідея
реалізується

1
@Pacerier ви отримуєте балансування навантаження, використовуючи кілька одноадресних адрес. Проблема полягає в затримці, клієнти просто не знають, які IP-адреси знаходяться поблизу, а які - далеко. Він також не може масштабувати наскільки далеко. Ви можете використовувати лише близько 5 серверів, якщо ви хочете, щоб записи клеїв A і AAAA вміщувалися в 512 байт. Поєднати одну трансляцію будь-якої трансляції та декілька одноадресних проблем проблематично, оскільки ви, ймовірно, отримаєте більше навантаження на одноадресні адреси, ніж на адресу anycast.
kasperd

4

Найкраща практика - використовувати принаймні дві адреси з різних префіксів та давати їм ім’я під двома різними TLD. Обидві ці адреси можуть бути будь-якими переданими, якщо ви хочете. Маючи лише одну IP-адресу, ви отримаєте єдину точку відмови. Якщо маршрутизація до цієї адреси не працює (помилка конфігурації, екземпляр anycast працює неправильно, префікс викрадено тощо), то весь ваш домен стає недоступним.

Кожна адреса anycast потребує принаймні /24IPv4 або /48префікса IPv6 для маршрутизації в BGP. Менші (довші) префікси в багатьох місцях зазвичай не приймаються у глобальній таблиці маршрутизації.

Ніколи не ставив неправдиву IP-адресу як DNS-сервер. Це спричинить серйозні затримки для резолюторів.


Що ще гірше, що "фальшива" IP-адреса - це чужа адреса. Вони отримували б запити. Якщо вони будуть роздратовані на весь цей трафік, вони можуть надіслати відповіді з високим TTL, щоб змусити його на деякий час.
kasperd

@kasperd, А як щодо спеціальних зарезервованих IP-адрес, які нікому не належать?
Pacerier

1
@Pacerier Використання RFC 1918, 4193 або 6598 адресного простору обмежує шкоду. Але все одно це призведе до уповільнення або навіть відмови.
kasperd

3

У RFC 1034 зазначено лише, що вам потрібні два DNS-сервери. Це не обов'язкова вимога, а рекомендація, тому робіть з нею все, що вам завгодно. Незалежно від того, якщо ви хочете HA, вашим 2 DNS-серверам можна призначити один і той же IP за допомогою anycast, і єдине, що ваші кінцеві користувачі помітять, коли один DNS-сервер вийде з ладу, - це моментальна відсутність зв’язку під час відновлення мережі.

Отже, підсумовуючи, так, використовуючи anycast, достатньо, щоб відповідати RFC 1034.


Хм, якщо потрібна одна IP-адреса, чому Google пропонує дві адреси ( 8.8.8.8і 8.8.4.4) для своїх DNS-серверів? У них вже є будь-який канал, тому чому б просто не запропонувати одну адресу 8.8.8.8?
Pacerier

1
Як ви здогадуєтесь, я б сказав не переривати зв’язок під час конвергенції мережі? Тому що вони глобальний гравець і хочуть переконатися, що вони максимально широко застосовуються, щоб усунути будь-яку можливу точку відмови? Я не зовсім впевнений, але я знаю, що всі ми не можемо бути google :)
Здійснюється
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.