Меню
RU

Anycast и BGP: Как AdGuard DNS обрабатывает миллионы запросов

AdGuard DNS начинался как второстепенный некоммерческий проект в дополнение к блокировщику, но со временем дорос до статуса самостоятельного продукта и обрёл огромное количество пользователей по всему миру. Сейчас он обрабатывает больше миллиона запросов в секунду, и эта цифра растёт с каждым днем.

Изначально AdGuard DNS представлял собой всего лишь один сервер. И с ростом количества пользователей мы столкнулись с двумя проблемами:

  1. Один сервер уже не справлялся с нагрузкой.
  2. Клиенты находятся по всему миру, и для некоторых из них время доступа к серверу где-то в одном месте непозволительно велико.

Сегодняшний пост посвящён тому, как мы решали эти проблемы.

Карта серверов AdGuard DNS

В какой бы точке мира вы ни находились, AdGuard DNS будет отвечать быстро, как будто сервер находится недалеко от вас.

Но что делать, если клиентов по всему миру много, каждый хочет подключиться к ближайшему к нему DNS-серверу, но при этом все они вбивают в роутер один и тот же IP-адрес, который указан у вас на сайте? Есть только один ответ на этот вопрос — использовать Anycast-маршрутизацию.

Попробую объяснить, что это такое, максимально просто и используя минимум непонятных слов.

Маршрутизация в интернете

Первым делом нужно рассказать о том, как вообще работает роутинг в интернете. Разбираться будем на примере: пусть Кенни из Колорадо пытается подключиться к серверу, который находится в другом городе или стране.

1

Кенни уже сделал всё, что от него зависит — он узнал IP-адрес сервера, к которому хочет подключиться, и передал туда пакет с данными. Для этого он отправил пакет на роутер своего интернет-провайдера.

2

Вот что происходит с пакетом дальше:

  1. Роутер провайдера Кенни передаёт пакет с данными роутеру другого провайдера, с которым он соединён физическим кабелем.
  2. Этот роутер передаёт пакет дальше (опять по кабелю).
  3. Процесс продолжается, пока пакет с данными не дойдёт до того роутера, с которым соединён целевой сервер.

Выглядит просто, но есть один вопрос. Ведь весь интернет представляет собой огромную сеть из серверов, роутеров и прочего, соединённых между собой. Эти серверы принадлежат разным компаниям-провайдерам, которые обслуживают разных пользователей. И вот провайдер Кенни соединён не с одним, а сразу с несколькими другими провайдерами — как ему узнать, кому из них передавать пакет, чтобы он достиг точки назначения?

Работает это следующим образом:

  1. Роутер, соединённый с целевым сервером, передаёт всем соседним роутерам (фактически, другим провайдерам) информацию о том, что он «отвечает» за все IP-адреса с определённым префиксом. Эти адреса включают и IP-адрес целевого сервера. Для передачи этой информации используется протокол BGP (англ. Border Gateway Protocol, протокол граничного шлюза).
  2. Они транслируют эту информацию дальше по другим роутерам, с которыми они соединены.
  3. В конце концов до роутера Кенни доходит информация обо всех маршрутах, по которым можно добраться до целевого сервера.
  4. Маршрут выбирается просто: берётся тот, на котором задействовано меньше всего роутеров.

3

Я делаю одно большое упрощение, чтобы сделать описание более понятным. На самом деле обмен информацией происходит между так называемыми «автономными системами» (autonomous system), которые внутри себя также могут пропускать трафик через кучу роутеров. Каждая автономная система — это совокупность IP-адресов и роутеров, обычно управляемых одной организацией (например, провайдером).

Маршрутизация Anycast

Окей, с маршрутизацией разобрались. Но как нам это помогает и что вообще такое Anycast? Давайте представим себе ситуацию, в которой много роутеров в разных точках мира говорят соседям одно и то же: «Эй, я отвечаю за все IP-адреса с этим префиксом!». Как и в предыдущем примере, эта информация в итоге доходит до роутера Кенни.

4

А этот роутер для пакета Кенни выбирает самый короткий маршрут из возможных.

5

Вот этот механизм и называется Anycast routing и именно его мы используем в AdGuard DNS для того, чтобы гарантировать, что вам ответит ближайший сервер.

Недостатки Anycast

Anycast — хорошее, но не идеальное решение. Дело в том, что длина маршрута не гарантирует, что соединение действительно будет быстрее, ведь в расчёт берётся только количество точек, а не качество соединения между ними. Даже в этом случае протокол BGP позволяет в определённых рамках влиять на маршруты. Например, мы можем «искусственно» сделать какой-то маршрут длиннее.

Возьмём для примера диаграмму выше. Кенни соединился с сервером в Майами, так как маршрут туда короче, но на самом деле его соединение работало бы гораздо быстрее, если бы его отправило в Амстердам. Можем ли мы как-то повлиять на это? Ответ на этот вопрос - "возможно", так как это зависит от того, какие возможности по кастомизации предоставлены нам автономными системами, с которыми соединены наши сервера.

Многие автономные системы позволяют использовать так называемые «BGP community» для гибкой настройки маршрутизации. По сути, BGP community — это некий «маркер», который передаётся вместе с данными о маршруте. Опираясь на этот маркер, роутер, принимающий маршрут, может искусственно удлинить маршрут или вообще избавиться от него и не передавать информацию о нем дальше по цепочке.

Давайте попробуем использовать BGP community, чтобы трафик Кенни пошёл не по более короткому, а по более быстрому пути.

6

В этом примере нам повезло, провайдеры на пути к Кенни позволяют использовать BGP community, которые «занулят» маршрут до провайдера Кенни — то есть его роутер вообще не узнает об этом маршруте. Так что мы просто соответствующим образом маркируем данные о маршрутах, которые анонсируются с помощью протокола BGP.

7

Благодаря этому, провайдер Кенни вообще не узнал о маршрутах в Майами и Сингапур. В итоге желаемая нами цель достигнута, у нас получилось исправить маршруты таким образом, чтобы трафик пошёл в Амстердам.

К сожалению, в реальной жизни всё не так просто:

  1. Не все провайдеры позволяют использовать BGP community для гибкой настройки.
  2. Иногда, чтобы выяснить наличие такой настройки, нам нужно писать напрямую провайдерам, так как эта информация не опубликована или зарыта в глубинах сайтов.
  3. Не всегда BGP community предоставляют достаточную гибкость в настройке.

Не существует единственно верного решения и правильная маршрутизация — это постоянная работа, которой мы занимаемся.

Понравился пост?
Загружая комментарии, вы соглашаетесь с условиями использования и политикой конфиденциальности.

AdGuard
для Windows

AdGuard для Windows — это не просто «ещё один блокировщик». Это многоцелевой инструмент, который блокирует рекламу и доступ к опасным сайтам, ускоряет загрузку страниц и защищает детей от взрослого контента.
Отзывы пользователей: 30319
4,7 из 5
Скачивая программу, вы принимаете условия Лицензионного соглашения
Читать далее

AdGuard
для Mac

В отличие от других блокировщиков, AdGuard разработан с учётом специфики операционной системы macOS. Он не только блокирует рекламу в Safari и других браузерах, но и защищает вас от слежки, фишинга и мошенничества в сети.
Отзывы пользователей: 30319
4,7 из 5
Скачивая программу, вы принимаете условия Лицензионного соглашения
Читать далее

AdGuard
для Android

AdGuard for Android — это идеальное решение для Android-устройств. В отличие от других блокировщиков, AdGuard не требует полного доступа и предоставляет широкий спектр возможностей по управлению приложениями.
Отзывы пользователей: 30319
4,7 из 5
Скачивая программу, вы принимаете условия Лицензионного соглашения

AdGuard
для iOS

Самый продвинутый блокировщик рекламы для Safari: он позволяет забыть о всплывающей рекламе, ускоряет загрузку страниц и защищает личные данные. А с помощью ручной блокировки можно настроить фильтрацию так, как это удобно вам.
Отзывы пользователей: 30319
4,7 из 5
Скачивая программу, вы принимаете условия Лицензионного соглашения

Браузерное расширение AdGuard

AdGuard — самое быстрое и легкое браузерное расширение для блокировки всех типов рекламы! Выбирайте AdGuard для быстрого и безопасного серфинга без рекламы.
Отзывы пользователей: 30319
4,7 из 5

AdGuard для Safari

Расширения, блокирующие рекламу в Safari, переживают не лучшие времена с тех пор, как компания Apple вынудила всех использовать новый SDK. Познакомьтесь с нашим легко настраиваемым и молниеносным приложением!
Отзывы пользователей: 30319
4,7 из 5
Доступно в
App Store
Скачать
Скачивая программу, вы принимаете условия Лицензионного соглашения

AdGuard Home

AdGuard Home — мощный сетевой инструмент против рекламы и трекинга. С усилением роли интернета вещей становится все более и более важным управлять всей вашей сетью. После настройки AdGuard Home будет охватывать ВСЕ ваши домашние устройства и для этого вам не понадобится программное обеспечение на стороне клиента.
Отзывы пользователей: 30319
4,7 из 5

AdGuard Content Blocker

AdGuard Content Blocker устраняет все объявления в мобильных браузерах, которые поддерживают технологию блокировки контента — к примеру, Samsung Internet и Яндекс.Браузер. Он обладает меньшим количеством функций, чем AdGuard для Android, но при этом бесплатен, прост в установке и по-прежнему обеспечивает высокое качество блокировки рекламы.
Отзывы пользователей: 30319
4,7 из 5
Скачивая программу, вы принимаете условия Лицензионного соглашения
Читать далее

Помощник AdGuard

Дополнительное браузерное расширение для десктопных приложений AdGuard. Даёт доступ к таким функциям в браузере, как блокировка отдельных элементов, занесение сайта в белый список или отправление отчёта.
Отзывы пользователей: 30319
4,7 из 5
Помощник для Chrome Это ваш текущий браузер?
Установить
Скачивая программу, вы принимаете условия Лицензионного соглашения
Помощник для Firefox Это ваш текущий браузер?
Установить
Скачивая программу, вы принимаете условия Лицензионного соглашения
Помощник для Edge Это ваш текущий браузер?
Установить
Скачивая программу, вы принимаете условия Лицензионного соглашения
Помощник для Opera Это ваш текущий браузер?
Установить
Скачивая программу, вы принимаете условия Лицензионного соглашения
Помощник для Yandex Это ваш текущий браузер?
Установить
Скачивая программу, вы принимаете условия Лицензионного соглашения
Помощник для Safari Это ваш текущий браузер?
Если вы не можете найти свой браузер в списке, попробуйте прежнюю версию Помощника, которую вы можете найти в настройках расширения AdGuard.
Загрузка AdGuard началась Стрелка указывает на файл: нажмите на него, и установка начнётся Выберите «Открыть», нажмите «OK» и дождитесь загрузки файла. В открывшемся окне перетащите значок AdGuard в папку «Приложения». Спасибо за выбор AdGuard! Выберите «Открыть», нажмите «OK» и дождитесь загрузки файла. В открывшемся окне нажмите «Установить». Спасибо за выбор AdGuard!
AdGuard есть и в мобильном варианте