Немного натренированное название, но я недостаточно разбираюсь в предмете, чтобы придумать более подходящий.
Я снова и снова читал, что anycast - отличное решение для балансировки нагрузки и предпочтительное решение для балансировки нагрузки DNS. Однако мне интересно, что anycast имеет только преимущество балансировки нагрузки и не обеспечивает избыточности. В то время как простое решение DNS без балансировки нагрузки (т.е. только несколько записей A) не предлагает никакой балансировки нагрузки, но, по-видимому, предлагает лучшую избыточность.
Я внимательно изучил службы DNS и заметил, что в 2016 году у Dyn произошел сбой: https://en.wikipedia.org/wiki/2016_Dyn_cyberattack . Но две вещи:
1) Если что-то пойдет не так с сервером за конкретным объявлением anycast, будут ли автоматически пробоваться другие маршруты? Если да, то почему Dyn пострадал от такого сбоя - или это связано с тем, что DNS работает на UDP?
Например, если мы пытаемся подключиться к синему узлу и следуем маршруту 1-2-6, и обнаруживаем, что маршрут 6 сломан (не удается подключиться к серверу или какая-то ошибка), будут маршруты 1-2-5 или 1- 3-4 пробовать автоматически?
2) Есть ли что-нибудь, что клиент может сделать, чтобы уменьшить эту проблему?
3) Мне кажется, что anycast с большей вероятностью принесет в жертву конкретный регион, чтобы другие регионы оставались в сети, в отличие от большего количества циклического перебора DNS, который не обеспечит такую же производительность, но обеспечит лучшую амортизацию такой атаки. Итак, почему (при условии, что мои мысли верны), похоже, будет большой толчок для anycast и меньше - для большего количества служб DNS с циклическим перебором, которые возвращали бы порядок серверов, релевантный для пользователя.
Я в курсе этого вопроса Несколько центров обработки данных и HTTP-трафик: DNS Round Robin - ЕДИНСТВЕННЫЙ способ обеспечить мгновенное переключение при отказе? хотя я не считаю это дубликатом, так как меня интересуют причины, по которым anycast может терпеть неудачу.
Итак, сначала давайте кратко рассмотрим, что подразумевается под использованием anycast для DNS:
Данный IP-адрес а - это преобразователь, который мы хотим сделать более доступным. В а хозяин является членом А / 24 подсеть. Anycast может выполняться с определенными маршрутами хоста (т.е. а/ 32), но обычно это наблюдается только в частных сетях, а не в общем Интернете.
Существует некий механизм, позволяющий А подсеть динамически объявляется только тогда, когда соответствующая служба DNS работает. Обратите внимание (а это действительно важно), что сама реклама может исходить с одного хоста внутри сайта, на котором работает преобразователь, со всего физического сайта, содержащего несколько экземпляров указанного преобразователя (т.е. многие хосты, на которых запущены преобразователи, сайт в целом использует один маршрут).
Тот же маршрут (А) будет рекламироваться из нескольких точек в общедоступном Интернете. Это может быть большой провайдер (читай: точки присутствия, рассредоточенные по всему миру), представляющий один и тот же маршрут в каждой точке соединения с зарубежными сетями или один и тот же маршрут, исходящий из точек, размещенных у нескольких операторов.
Итак - когда произвольный клиент отправляет пакет по любому IP-адресу, указанный пакет будет стремиться найти себя в «ближайшей» точке рекламы. Я поместил пугающие кавычки вокруг самых близких, потому что они близки только в том смысле, как была выложена топология маршрутизации и какие политики используются для маршрутизаторов на этом пути. Вполне возможно, что ближайший экземпляр адреса anycast может оказаться самым дальним физически.
Если, в свою очередь, точка, в которой объявляется этот маршрут, терпит неудачу (... что может быть результатом сбоя службы на хосте и отмены маршрута или более традиционной проблемы с доступностью сети), то пакеты, привязанные к адресу anycast, будут направляется к следующему ближайшему (опять же - в терминах протокола маршрутизации) экземпляру маршрута. Во время повторной конвергенции сети разрешение клиента может завершиться ошибкой и попытаться повторить попытку, при этом повторная попытка теперь идет по более длинному пути для достижения, по-видимому, того же адреса. Все это прозрачно как для клиентского процесса, так и для пользователя, и с точки зрения сети лучше всего рассматривать это как следование альтернативному пути к данной сети.
Иногда полезно думать о произвольной сети как о логической конструкции. Это виртуальная подсеть, которая содержит интересующую вас службу. Эта виртуальная подсеть доступна по многим путям в сети.
Тем не менее, вот основные предостережения в отношении любого дизайна:
Поскольку нет гарантии, что данный пакет для IP-адреса anycast достигнет одного и того же физического хоста, этот подход действительно соответствует только протоколам без установления соединения.
Надежность решения зависит от логики, связывающей правильную работу сервиса с объявлением маршрута. Если служба прекратит работу, а маршрут будет продолжать рекламироваться, возникнет потенциально значительная черная дыра.
Получение рекламы о любом маршруте хорошо и должным образом- распространять по общедоступному Интернету нетривиально. Создавать горячие точки очень просто: конкретный экземпляр произвольного маршрута, который предпочтительнее для большинства клиентов. Это все еще потенциально достойное решение высокой доступности (для более простых типов сбоев), но оно не относится к балансировке нагрузки.
Теперь - наконец - когда все это изложено, на ваш вопрос легче ответить:
Нет ничего присущий к любому запросу, что делает его более устойчивым к DDoS-атакам. Каждый из потенциально миллионов потоков DDoS-трафика найдет свой путь к ближайшему экземпляру, что, вероятно, сделает его недоступным для других легитимных клиентов, которые в противном случае были бы направлены к этим точкам.
Теперь, если подавляющее большинство хостов в используемых ботнетах находилось, скажем, в Восточной Европе, и один из маршрутов anycast был создан в соседнем PoP (опять же - «поблизости» с точки зрения топологии маршрутизации), тогда этот трафик упадет до одной точки, в то время как большая часть остального мира продолжит использовать тот же маршрут, который также проходил в удобных точках на других континентах. В этом конкретном случае anycast, возможно, был бы одним из Лучший механизмы минимизации ущерба от DDoS-атаки. Это сильно зависит от того, как были распределены маршруты anycast и как была настроена политика (см. № 3 выше - нетривиальная проблема).
Очевидно, что этот вариант использования не столь убедителен в случае DDoS-атаки, которая действительно распределен. Однако при правильном проектировании локализация маршрутов anycast означает, что атакующая нагрузка теперь может быть распределена по произвольному количеству географически распределенных физических хостов. Это будет иметь тенденцию ослаблять эффект атаки на цель, а также потенциально распространять воздействие на большую часть сети. Опять же - огромный сумма зависит от того, как все было спроектировано и настроено.
Почему это считается победой по круговой системе? Просто потому, что можно развернуть произвольное количество хостов без необходимости в отдельных балансировщиках нагрузки на отдельных IP-адресах, а также нет зависимости от значения тайм-аута для конкретных клиентов, решающих перейти на другой преобразователь. Можно было буквально развернуть тысячу хостов в пределах единый центр обработки данных с одним и тем же IP-адресом и соответствующим образом распределять трафик (например, огромные практические ограничения, основанные на размере таблиц ECMP и т. д.) или развернуть тысячу географически разнесенных сайтов каждый с тысячей хозяев. Все это может быть выполнено без изменения конфигурации клиента, без (по общему признанию, обычно кластеризованной) точки отказа балансировщика нагрузки и т. Д. Короче говоря, при правильной настройке он масштабируется так же, как и Интернет в целом.