Содержание курса
Глава 1: Введение в BGP
1. Почему нам нужен BGP?
Let’s start by looking at some scenarios so you can understand why and when we need BGP:

В наше время практически всё подключено к Интернету. На рисунке выше мы видим клиентскую сеть, подключенную к провайдеру (ISP — Internet Service Provider). Провайдер и выделил нам один публичный IP-адрес, который мы можем использовать для доступа в Интернет.
Для организации доступа в инт из локальной сети мы используем NAT/PAT(Network / Port address translation) для преобразования наших внутренних частных IP-адресов в этот единственный публичный IP-адрес. Этот сценарий отлично подходит, если у вас есть только клиенты в локальной сети, которым нужен доступ в Интернет. В этом случае нам нужен только маршрут по умолчанию, указывающий на шлюз провайдера, и всё готово. Для этого сценария нам не нужен BGP.

Возможно, у нас есть несколько серверов, которые должны быть доступны из Интернета… предположим, почтовый или веб-сервер. Мы можем использовать NAT Port forwarding и пробросить нужные порты на эти серверы, так что нам все равно понадобится только один IP-адрес. Ещё есть вариант — получить несколько публичных IP-адресов от нашего провайдера и использовать их для настройки Static NAT к серверам. Для этого сценария нам всё ещё не нужен BGP…

А что, если нам необходимо организовать резервирование? Иметь одну точку отказа — не самая лучшая идея. Мы можем добавить еще один маршрутизатор и подключить его к провайдеру, тем самым использовать основной канал для всего трафика, а в случае его отказа перестроить маршрут на резервный. В этой ситуации нам всё ещё не нужен BGP, манипулировать трафиком мы сможем с помощью маршрута по умолчанию:
- Анонсируем маршрут по умолчанию в IGP на основном маршрутизаторе с низкой метрикой, используя отслеживание падения канала с помощью IP SLA и track.
- Анонсируем маршрут по умолчанию в IGP на резервном маршрутизаторе с высокой метрикой.
Это гарантирует, что IGP направит весь трафик по основному каналу. Но когда канал выйдет из строя, IGP перенаправит поток трафика на резервный канал. Но давайте задумаемся над одним вопросом. Можем ли мы балансировать нагрузку между этими двумя каналами? Будет ли это проблемой?
Мы можем использовать ECMP (Equal-cost multi-path routing) — анонсировать маршрут по умолчанию в локальную сеть с одинаковой метрикой, но у вас все равно будет что-то вроде распределения нагрузки 50/50%. Но что, если мы хотим отправлять 80% исходящего трафика по основному каналу, а 20% — по резервному? С IGP этого не добиться, а с BGP это возможно.
Дело в том, что в IGP-протоколах, таких как RIP, OSPF и ISIS, мы используем маршруты по умолчанию и совсем не знаем, где находится условный yandex, просто направляем весь трафик с назначением «интернет» в провайдера. Но когда мы используем BGP, мы уже можем изучить информацию о том, где находится то или иное назначение, получив от провайдера полную таблицу маршрутизации BGP (entire Internet routing table) или её часть.
Также в BGP есть большое количество различных атрибутов (weight, local preference, metric и т. д.), которые мы можем использовать для того, чтобы решить, какой путь использовать для определённых назначений. Используя трафик-инженеринг, мы можем направить определенное количество трафика в одного BGP-соседа, а всё остальное — в другого.
Ещё существует опция под названием «bgp dmzlink-bw». Она позволяет осуществлять балансировку нагрузки, опираясь на пропускную способность.

Этот сценарий немного интереснее. Вместо подключения к одному провайдеру мы подключаемся к двум. Для надежности важно иметь двух разных интернет-провайдеров. Это позволит вам всегда иметь резервный канал в случае сбоя у одного из них. А как обстоят дела с нашей клиентской сетью? У нас по-прежнему два сервера, которые должны оставаться доступными из интернета.
В предыдущих примерах мы получали публичные IP-адреса от своего провайдера. Теперь, если у нас два разных провайдера, какой IP-адрес использовать? От ISP1 или от ISP2? Если взять IP-адреса от одного провайдера, то при проблемах с подключением у другого сервера будут недоступны.
Вместо того чтобы использовать IP-адреса провайдера, мы получим собственные публичные IP-адреса. Учёт белых публичных IP-адресов поддерживается IANA (Internet Assigned Numbers Authority — http://www.iana.org/). IANA распределяет публичные IP-адреса между несколькими крупными региональными регистрирующими компаниями, такими как RIPE или ARIN. Каждый из них выделяет IP-адреса провайдерам или крупным организациям.
Получив собственное публичное адрестное пространство, мы сможем анонсировать его в Интернет через подключённых провайдеров. Такой анонс может осуществляться только с помощью BGP.
If you are interested here’s an overview of the IPv4 space that has been allocated by IANA:
2. Autonomous Systems
Помимо получения публичного адресного пространства, мы должны озоботиться о приобритении собственной AS (Autonomous System):

**AS — это набор сетей в одном административном домене, иными словами, сети под единым управлением организации. Интернет — это не что иное, как совокупность автономных систем, соединённых между собой. Внутри автономной системы мы используем IGP, например OSPF или ISIS.
Для маршрутизации между автономными системами мы используем **EGP (external gateway protocol)**. На сегодняшний день существует единственный EGP, и это BGP.
Так как же получить собственную автономную систему с номером? Точно так же, как и с публичным адресным пространством — нужно зарегистрировать её.
Номер автономной системы 16-битный, из этого следует, что у нас есть всего 65535 номеров AS. Как и у IP-адресов, у AS есть частные и публичные диапазоны:
— 1-64512 — это публичные уникальные номера AS;
— 64512-65535 — это частные номера AS.
If you are interested, see if you can find the AS number of your ISP:
UltraTools AS Information Lookup
BGP has two flavors:
- External BGP: used between autonomous systems между разными автономными системами.
- Internal BGP: used between autonomous systems внутри автономной системы (как IGP).
External BGP предназначен для обмена маршрутной информацией между различными автономными системами. В этом уроке я объясню, зачем нам нужен Internal BGP. Я бы рекомендовал прочитать его после завершения этого урока и сначала ознакомиться с внешним протоколом BGP.
3. Анонсы в BGP
Теперь мы имеем представление о том, зачем нам нужен BGP и что такое автономные системы. Интернет — большое место, на момент написания данной статьи в нём более 987 тыс. префиксов. Если вам любопытно, вы можете посмотреть размер таблицы маршрутизации всего интернета по ссылке:
В Интернете есть несколько looking glass-серверов. Это маршутизаторы с которых вы можете посомтреть таблицу маршрутизации Интенета, Full view полученный по BGP. Посомтреть можно тут:
Scroll down all the way to “Category 2 – IPv4 and IPv6 BGP Route Servers by region (TELNET access)”. You can telnet to these devices and use show ip route and show ip bgp to check the BGP or routing table. show ip route
/ show ip bgp
.
Итак, значит когда мы включаем BGP на нашем маршрутизаторе мы сразу получаем всю таблицу маршрутизации интернета (987 тыс. префиксов)? Ну взависимости от настроек и провайдера.. Давайте рассмотрим несколько примеров:

На рисунке выше наша клиентская сеть имеет номер автономной системы (AS 1) и адресное пространство 11.11.11.0/24. Мы подключены к двум разным провайдерам с разными автономными системами (AS2 и AS3) и адресным пространством (30.0.0.0/24 и 20.0.0.0/24). Мы можем взаимодействовать с остальной частью интернета через обоих провайдеров.
BGP позволяет нам анонсировать наше адресное пространство провайдерам. Но что провайдеры будут анонсировать нам? Рассмотрим три варианта:
- They advertise only a default route.
- They advertise a default route and a partial routing table.
- They advertise the full Internet routing table.
Давайте разберем каждый из этих вариантов.
3.1. Default Route

Для клиентских маршрутизаторов маршрут по умолчанию требует минимум ресурсов, так как в таблице маршрутизации есть только одна запись для связи с внешним миром. Маршрутизатор будет анонсировать всю свою сеть 11.11.11.0/24 обоим провайдерам, которые, в свою очередь, будут анонсировать её в другие автономные системы (AS). Недостаток такой конфигурации в том, что наша клиентская сеть не знает, что находится за пределами ISP1 и ISP2. Связь поддерживается за счёт маршрута по умолчанию, однако это может привести к неоптимальной маршрутизации. Имея только маршруты по умолчанию, мы будем направлять весь трафик к одному из провайдеров.
Например, вот что может случиться, если вы используете только маршруты по умолчанию:

Наша клиентская сеть получила маршруты по умолчанию от двух провайдеров. Для отправки трафика мы выбрали ISP1. Это значит, что для достижения подсети 30.0.0.0/24 (обслуживаемой ISP2) трафик сначала пойдет через ISP1, а затем через ISP2. Хотя это не критично, такой путь не является оптимальным.
3.2. Partial Routing Updates

Мы можем получить частичную таблицу маршрутизации вместе с маршрутом по умолчанию. Например, в ней могут быть все IP-адреса, которые провайдеры присвоили своим клиентам.
В мире маршрутизации, как и в реальной жизни, знание — сила. Чем больше у нас информации о маршрутах, тем лучше мы можем выбирать оптимальные пути для трафика. Это помогает избежать проблем, связанных с неоптимальной маршрутизацией, по сравнению с ситуацией, когда у нас есть только маршрут по умолчанию.
3.3 Полная таблица маршрутизации

Последний вариант — получить полную таблицу маршрутизации интернета от обоих провайдеров. Это потребует больших ресурсов (нужны мощные и дорогие маршрутизаторы), но позволит принимать оптимальные решения по маршрутизации.
4. BGP — Дистанционно-векторный протокол
BGP — это дистанционно-векторный протокол маршрутизации. Что это значит? Рассмотрим пример:

У нас есть 4 автономные системы, которые запустили у себя BGP, чтобы обмениваться маршрутной информацией. В AS 1 есть сеть 11.11.11.0/24, которая анонсируется в AS 2, AS 3 и AS 4.
Если мы посмотрим на таблицу BGP на роутере AS 4, то мы увидим не только подсеть 11.11.11.0/24, но и путь (Path
), через который нужно пройти, чтобы до неё добраться:
AS4#sh ip bgp
BGP table version is 2, local router ID is 10.10.10.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 11.11.11.0/24 10.10.1.1 0 3 2 1 i
By using the show ip bgp
мы можем увидеть, что роутер знает о подсети 11.11.11.0/24, The next-hop
для достижения маршрута это 10.10.1.1, и At the end of the line you see path with the numbers 3 2 1.
— это автономные системы, через которые мы должны пройти, чтобы попасть в эту сеть.
5. BGP Route Selection
Все протоколы внутренней маршрутизации (IGP) работают по одному принципу: они ищут самый короткий путь к месту назначения.
BGP работает иначе. В BGP есть автономные системы, которые принадлежат разным провайдерам или организациям. Мы хотим иметь возможность управлять тем, как данные передаются между этими системами. Давайте посмотрим на пример:

Значит ли это, что сетевой администратор в AS1 может выбрать путь, по которому будет идти трафик? Не совсем, по следующим причинам:
- Вы можете выбрать пути выхода трафика… AS 1 может отправлять трафик в AS 3 или AS 4, но вы не принимаете решения о маршрутизации для других автономных систем.
- Каждая автономная система будет анонсировать только лучший путь к нашей автономной системе. AS 1 узнает о наилучшем пути только от AS 2 и AS 4, если только их наилучший путь не отключится (при аварии)… Только тогда вы узнаете о втором лучшем пути.
BGP использует атрибуты для выбора лучшего пути, прочитать об них вы можете прочитать в уроке BGP-атрибуты и выбор пути.
6. Conclusion
Hopefully this lesson has been helpful to understand the basics of BGP and why we use it. In other lessons we will take a closer look at the configuration of external and internal BGP and also how the BGP path selection works.
If you have any questions, feel free to leave a comment!
Leave a Reply