Как работает anycast-маршрутизация в CDN и DNS
Продвинутое4 минРедакция Innovialabs
Коротко
При anycast один и тот же IP-префикс анонсируется через BGP из многих дата-центров, и маршрутизация интернета доставляет пакеты пользователя в ближайшую по сети точку присутствия, распределяя нагрузку и атаки по всем точкам.
Короткий ответ
Обычно один IP-адрес принадлежит одному месту (unicast). При anycast один и тот же IP-префикс анонсируется сразу из многих локаций — точек присутствия (PoP). Маршрутизаторы интернета выбирают для каждого пользователя один из этих анонсов, и пакеты уходят в соответствующую PoP.
Пользователь подключается к одному адресу — например, DNS-резолвера или edge-IP CDN, — а обслуживает его та локация, которую его сеть считает ближайшей.
Как это работает через BGP
Интернет — это множество независимых сетей (автономных систем, AS), которые обмениваются маршрутами по протоколу BGP.
- Оператор CDN или DNS владеет префиксом, например
/24в IPv4 или/48в IPv6. Более мелкие префиксы другие сети обычно фильтруют, поэтому эти размеры — распространённый минимум. - Каждая PoP анонсирует этот же префикс своим аплинкам и пирам на точках обмена трафиком.
- Каждый маршрутизатор получает несколько путей к префиксу и выбирает один лучший по правилам BGP: local preference, длина AS path и другие атрибуты.
- Трафик из конкретной сети идёт по этому пути в одну определённую 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-запрос. Оба подхода ведут пользователя к ближайшим серверам, но по-разному.
| Anycast | GeoDNS | |
|---|---|---|
| Где принимается решение | В маршрутизации сети (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-сессиями.