Перейти к содержанию
Innovialabs

Как работает anycast-маршрутизация в CDN и DNS

Продвинутое4 мин

Коротко

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

Короткий ответ

Обычно один IP-адрес принадлежит одному месту (unicast). При anycast один и тот же IP-префикс анонсируется сразу из многих локаций — точек присутствия (PoP). Маршрутизаторы интернета выбирают для каждого пользователя один из этих анонсов, и пакеты уходят в соответствующую PoP.

Пользователь подключается к одному адресу — например, DNS-резолвера или edge-IP CDN, — а обслуживает его та локация, которую его сеть считает ближайшей.

Как это работает через BGP

Интернет — это множество независимых сетей (автономных систем, AS), которые обмениваются маршрутами по протоколу BGP.

  1. Оператор CDN или DNS владеет префиксом, например /24 в IPv4 или /48 в IPv6. Более мелкие префиксы другие сети обычно фильтруют, поэтому эти размеры — распространённый минимум.
  2. Каждая PoP анонсирует этот же префикс своим аплинкам и пирам на точках обмена трафиком.
  3. Каждый маршрутизатор получает несколько путей к префиксу и выбирает один лучший по правилам BGP: local preference, длина AS path и другие атрибуты.
  4. Трафик из конкретной сети идёт по этому пути в одну определённую PoP.

Важный нюанс: «ближайшая» означает ближайшая с точки зрения BGP, а не в километрах. Пользователь в одном городе может попасть в PoP в другой стране, если у его провайдера туда дешевле или короче AS path. Операторы настраивают это через пиринг, BGP communities и выборочные анонсы.

Почему anycast ускоряет DNS

DNS — классическая задача для anycast:

  • В основном UDP, один запрос — один ответ. Долгой сессии нет, поэтому неважно, какая PoP ответит.
  • Меньше задержка. Резолвер обращается к ближайшему узлу, а не через континенты, и каждый некешированный запрос выполняется быстрее.
  • Встроенное переключение при сбое. Если PoP падает, она отзывает анонс, и BGP переводит трафик в другие локации. Менять DNS-записи и ждать TTL не нужно.

Поэтому anycast используют корневые DNS-серверы, крупные публичные резолверы и большинство управляемых авторитативных DNS-провайдеров.

Почему anycast гасит DDoS

При объёмной атаке трафик идёт от ботов по всему миру. С anycast пакеты каждого бота попадают в ближайшую к нему PoP, поэтому атака распределяется по всей сети, а не бьёт в один дата-центр. Каждая PoP фильтрует свою долю локально.

Во время атаки операторы могут отозвать префикс с перегруженной локации или анонсировать его только с площадок, где есть запас мощности. Сам по себе anycast — не фильтр, но он превращает общую ёмкость сети в ёмкость защиты.

Ограничения для stateful-соединений

Anycast лучше всего подходит для трафика без состояния. Сессии TCP, TLS и QUIC хранят состояние на конкретном сервере, и отсюда риски:

  • Смена маршрута посреди сессии. Если BGP перестроится при открытом соединении, пакеты могут уйти в другую PoP, которая ничего не знает о сессии, и соединение оборвётся.
  • Нагрузку нельзя точно контролировать. BGP не знает о загрузке серверов, и популярный регион может перегрузить одну PoP.
  • Сложнее отладка. Разные пользователи по одному IP попадают в разные локации, и чтобы воспроизвести проблему, нужно знать, какая PoP их обслужила.

На практике маршруты в интернете достаточно стабильны, и крупные CDN успешно отдают HTTP через anycast. Риски снижают стабильным пирингом, consistent hashing внутри PoP и короткими соединениями. Для очень долгих сессий (большие загрузки, WebSocket, игровые серверы) anycast часто используют только для первого контакта, а затем направляют клиента на unicast-адрес.

Anycast или GeoDNS

GeoDNS возвращает разные IP-адреса в зависимости от того, откуда пришёл DNS-запрос. Оба подхода ведут пользователя к ближайшим серверам, но по-разному.

AnycastGeoDNS
Где принимается решениеВ маршрутизации сети (BGP)В DNS-ответе
Что определяет «близость»Топология сетиРасположение резолвера или подсеть клиента при EDNS Client Subnet
Скорость переключенияБыстро, после схождения маршрутовОграничена кешированием DNS и TTL
Контроль распределенияГрубый, через настройку BGPТочный, правила по странам и регионам
Что нужноСвой IP-префикс, ASN, BGP-сессии в каждой PoPТолько DNS-провайдер с гео-функциями
Stateful-соединенияРиск при смене маршрутаСтабильно: клиент держит один IP

Многие CDN сочетают оба подхода: anycast для DNS и edge-IP, а GeoDNS или DNS с учётом нагрузки — для тонкой настройки тяжёлого трафика.

Как выбрать для своего проекта

  • Строить anycast самостоятельно почти никогда не нужно. Используйте managed DNS и CDN, у которых anycast-сеть уже есть.
  • Если нужна маршрутизация по странам к вашим собственным серверам, начните с GeoDNS или latency-based DNS у облачного провайдера.
  • Собственный anycast имеет смысл, только если у вас инфраструктура в нескольких локациях и вы готовы владеть ASN, IP-адресами и BGP-сессиями.

Частые вопросы

Нет. Anycast выбирает локацию по маршрутизации, а не по загрузке серверов. Внутри каждой PoP запросы по серверам всё равно распределяет обычный балансировщик.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.