BGP#
Описание#
BGP (Border Gateway Protocol) — это основной протокол динамической маршрутизации, который используется в Интернете.
Маршрутизаторы, использующие протокол BGP, обмениваются информацией о доступности сетей. Вместе с информацией о сетях передаются различные атрибуты этих сетей, с помощью которых BGP выбирает лучший маршрут и настраиваются политики маршрутизации.
ПО Факел использует для реализации протокола BGP механизм FRR.
Примечание
В ПО Факел нет специальной команды для запуска процесса, реализующего протокол BGP. Процесс запускается при настройке первого BGP соседа.
Концептуальные понятия#
Автономные системы#
Из спецификации RFC 1930 следует, что автономная система (далее - АС) представляет собой связанную группу из одного или нескольких IP префиксов, управляемую одним или несколькими провайдерами, которая имеет единую и четко определенную политику маршрутизации.
Каждая АС имеет связанный с ней идентификационный номер, обозначаемый как ASN. Это двухбайтовое значение от 1 до 65535. Номера АС с 64512 по 65535 определяются как частные номера АС. Частные номера АС не должны анонсироваться в глобальной сети Интернет. Диапазон двухбайтовых номеров АС исчерпан. Четырехбайтные номера АС определены в спецификации RFC 6793 и предоставляют собой пул из 4294967296 номеров.
ASN является одним из основных элементов протокола BGP. Протокол BGP является протоколом дистанционно-векторной маршрутизации, а механизм AS-Path обеспечивает метрику для дистанционно-векторной маршрутизации, а также обнаружение петель в протоколе BGP.
Семейства адресов#
Мультипротокольное расширение позволяют протоколу BGP передавать информацию о маршрутизации для нескольких протоколов сетевого уровня. Протокол BGP поддерживает идентификатор AFI для семейства адресов протоколов IPv4 и IPv6.
Выбор маршрутов#
Процесс выбора маршрута, используемый в реализации протокола BGP механизмом FRR, использует следующие критерии принятия решения, начиная с верхней части списка и двигаясь к нижней до тех пор, пока один из критериев не будет определен как подходящий.
Проверка веса маршрутов
Выбор в пользу маршрутов с большим локальным весом.
Проверка локальных предпочтений
Выбор в пользу маршрутов с большими локальными предпочтениями.
Проверка локальных маршрутов
Выбор в пользу локальных маршрутов (статических, агрегированных, перераспределенных) вместо полученных.
Проверка длины пути до АС
Выбор в пользу меньшего числа пересылок на пути до АС.
Проверка источника
Выбор в пользу маршрута с наименьшего типом источника. То есть предпочтение отдается маршрутам IGP, а не EGP и неполным маршрутам.
Проверка атрибута MED
Если маршруты с атрибутом MED были получены из одной и той же АС, предпочтение отдается маршруту с наименьшим значением атрибута MED.
Проверка внешних источников маршрутов
Выбор в пользу маршрута, полученного от внешнего eBGP соседа, вместо маршрутов, полученных от других типов соседей.
Проверка IGP стоимости
Выбор в пользу маршрута с меньшей IGP стоимостью.
Проверка множественных путей
Если включено использование множественных путей, то проверяется, можно ли считать равными маршруты, еще не различающиеся по предпочтениям. Если установлено значение параметра bgp bestpath as-path multipath-relax
, то все такие маршруты считаются равными, в противном случае равными считаются маршруты, полученные через iBGP с одинаковыми AS-Path, или маршруты, полученные от соседей eBGP в той же АС.
Проверка уже выбранного внешнего маршрута
Если оба маршрута получены от eBGP соседей, то предпочтение отдается тому маршруту, который уже выбран. Необходимо учесть, что эта проверка не применяется, если настроен параметр bgp bestpath compare-routerid
. Эта проверка может предотвратить некоторые случаи колебаний.
Проверка параметра идентификатора маршрутизатора
Предпочтение отдается маршруту с наименьшим идентификатором router-ID. Если маршрут имеет атрибут ORIGINATOR_ID, полученный через механизм отражения маршрутов iBGP, то используется идентификатор данного маршрутизатора, в противном случае используется идентификатор router-ID соседа, от которого был получен маршрут.
Проверка длины списка кластеризации
Используется маршрут с наименьшей длиной списка кластеризации. Список кластеризации определяет путь отражения маршрута в iBGP.
Проверка адреса соседа
Предпочтение отдается маршруту, полученному от соседа с более высоким адресом транспортного уровня, в качестве критерия при прочих равных результатах.
Согласование возможностей#
При добавлении функции обмена маршрутной информации по протоколу IPv6 в контексте протокола BGP было несколько предложений. IETF IDR приняла предложение под названием Multiprotocol Extension for BGP. Описание данного подхода представлено в спецификации RFC 2283. В спецификации не определяются новые протоколы. Вместо этого определяются новые атрибуты для существующей реализации протокола BGP. Когда протокол BGP используется для обмена маршрутной информацией по протоколу IPv6, он обозначается как BGP-4+. Когда он используется для обмена информацией о многоадресной маршрутизации, он обозначается как MBGP.
Сервис bgpd в составе ПО Факел поддерживает мультипротокольное расширение для BGP. Таким образом, если удаленный сосед поддерживает этот протокол, сервис bgpd может обмениваться маршрутной информации по протокола IPv6 и/или с помощью многоадресной рассылке.
Стандартная реализация протокола BGP не предусматривала возможности определения функций удаленного соседа: например, может ли он работать с префиксами других типов, кроме одноадресных маршрутов IPv4. Это было большой проблемой при использовании Multiprotocol Extension for BGP в реальных сетях. В спецификации RFC 2842 была принята функция, называемую Capability Negotiation. Сервис bgpd использует эту функцию для определения функций удаленного соседа. Если сосед сконфигурирован только как узел с одноадресными коммуникациями по протоколу IPv4, сервис bgpd не посылает пакеты Capability Negotiation до тех пор, пока не используются другие дополнительные функции протокола BGP, которые не требуют согласования возможностей.
По умолчанию механизм FRR в составе ПО Факел устанавливает соединение с соседями, используя минимальный набор общих функций для обеих сторон. Например, если локальный маршрутизатор использует функцию одноадресной и многоадресной рассылки, а удаленный маршрутизатор использует только одноадресную рассылку, то локальный маршрутизатор установит соединение с возможностью только одноадресной рассылки. При отсутствии общих функциях для обеих сторон коммуникации механизм FRR возвращает ошибку Unsupported Capability и затем сбрасывает соединение.
Настройка#
Пример настройки#
Для протокола IPv4#
Пример простой конфигурации eBGP между двумя устройствами.
Узел 1:
set protocols bgp 65534 neighbor 192.168.0.2 ebgp-multihop '2'
set protocols bgp 65534 neighbor 192.168.0.2 remote-as '65535'
set protocols bgp 65534 neighbor 192.168.0.2 update-source '192.168.0.1'
set protocols bgp 65534 address-family ipv4-unicast network '172.16.0.0/16'
set protocols bgp 65534 parameters router-id '192.168.0.1'
Узел 2:
set protocols bgp 65535 neighbor 192.168.0.1 ebgp-multihop '2'
set protocols bgp 65535 neighbor 192.168.0.1 remote-as '65534'
set protocols bgp 65535 neighbor 192.168.0.1 update-source '192.168.0.2'
set protocols bgp 65535 address-family ipv4-unicast network '172.17.0.0/16'
set protocols bgp 65535 parameters router-id '192.168.0.2'
По умолчанию префикс, объявленный в операторе network
не обязательно должен существовать в таблице маршрутизации, однако для предотвращения возникновения петель маршрутизации его обычно добавляют. Наиболее правильный способ сделать это - создать статический маршрут.
Узел 1:
set protocols static route 172.16.0.0/16 blackhole distance '254'
Узел 2:
set protocols static route 172.17.0.0/16 blackhole distance '254'
Для протокола IPv6#
Пример простой конфигурации BGP с использованием протокола IPv6.
Узел 1:
set protocols bgp 65534 neighbor 2001:db8::2 ebgp-multihop '2'
set protocols bgp 65534 neighbor 2001:db8::2 remote-as '65535'
set protocols bgp 65534 neighbor 2001:db8::2 update-source '2001:db8::1'
set protocols bgp 65534 neighbor 2001:db8::2 address-family ipv6-unicast
set protocols bgp 65534 address-family ipv6-unicast network '2001:db8:1::/48'
set protocols bgp 65534 parameters router-id '10.1.1.1'
Узел 2:
set protocols bgp 65535 neighbor 2001:db8::1 ebgp-multihop '2'
set protocols bgp 65535 neighbor 2001:db8::1 remote-as '65534'
set protocols bgp 65535 neighbor 2001:db8::1 update-source '2001:db8::2'
set protocols bgp 65535 neighbor 2001:db8::1 address-family ipv6-unicast
set protocols bgp 65535 address-family ipv6-unicast network '2001:db8:2::/48'
set protocols bgp 65535 parameters router-id '10.1.1.2'
По умолчанию префикс, объявленный в операторе network
не обязательно должен существовать в таблице маршрутизации, однако для предотвращения возникновения петель маршрутизации его обычно добавляют. Наиболее правильный способ сделать это - создать статический маршрут.
Узел 1:
set protocols static route6 2001:db8:1::/48 blackhole distance '254'
Узел 2:
set protocols static route6 2001:db8:2::/48 blackhole distance '254'
Фильтрация маршрутов#
К маршрутам может быть применен фильтр с помощью карты маршрутов (route-map):
Узел 1:
set policy prefix-list AS65535-IN rule 10 action 'permit'
set policy prefix-list AS65535-IN rule 10 prefix '172.16.0.0/16'
set policy prefix-list AS65535-OUT rule 10 action 'deny'
set policy prefix-list AS65535-OUT rule 10 prefix '172.16.0.0/16'
set policy prefix-list6 AS65535-IN rule 10 action 'permit'
set policy prefix-list6 AS65535-IN rule 10 prefix '2001:db8:2::/48'
set policy prefix-list6 AS65535-OUT rule 10 action 'deny'
set policy prefix-list6 AS65535-OUT rule 10 prefix '2001:db8:2::/48'
set policy route-map AS65535-IN rule 10 action 'permit'
set policy route-map AS65535-IN rule 10 match ip address prefix-list 'AS65535-IN'
set policy route-map AS65535-IN rule 10 match ipv6 address prefix-list 'AS65535-IN'
set policy route-map AS65535-IN rule 20 action 'deny'
set policy route-map AS65535-OUT rule 10 action 'deny'
set policy route-map AS65535-OUT rule 10 match ip address prefix-list 'AS65535-OUT'
set policy route-map AS65535-OUT rule 10 match ipv6 address prefix-list 'AS65535-OUT'
set policy route-map AS65535-OUT rule 20 action 'permit'
set protocols bgp 65534 neighbor 2001:db8::2 address-family ipv4-unicast route-map export 'AS65535-OUT'
set protocols bgp 65534 neighbor 2001:db8::2 address-family ipv4-unicast route-map import 'AS65535-IN'
set protocols bgp 65534 neighbor 2001:db8::2 address-family ipv6-unicast route-map export 'AS65535-OUT'
set protocols bgp 65534 neighbor 2001:db8::2 address-family ipv6-unicast route-map import 'AS65535-IN'
Узел 2:
set policy prefix-list AS65534-IN rule 10 action 'permit'
set policy prefix-list AS65534-IN rule 10 prefix '172.17.0.0/16'
set policy prefix-list AS65534-OUT rule 10 action 'deny'
set policy prefix-list AS65534-OUT rule 10 prefix '172.17.0.0/16'
set policy prefix-list6 AS65534-IN rule 10 action 'permit'
set policy prefix-list6 AS65534-IN rule 10 prefix '2001:db8:1::/48'
set policy prefix-list6 AS65534-OUT rule 10 action 'deny'
set policy prefix-list6 AS65534-OUT rule 10 prefix '2001:db8:1::/48'
set policy route-map AS65534-IN rule 10 action 'permit'
set policy route-map AS65534-IN rule 10 match ip address prefix-list 'AS65534-IN'
set policy route-map AS65534-IN rule 10 match ipv6 address prefix-list 'AS65534-IN'
set policy route-map AS65534-IN rule 20 action 'deny'
set policy route-map AS65534-OUT rule 10 action 'deny'
set policy route-map AS65534-OUT rule 10 match ip address prefix-list 'AS65534-OUT'
set policy route-map AS65534-OUT rule 10 match ipv6 address prefix-list 'AS65534-OUT'
set policy route-map AS65534-OUT rule 20 action 'permit'
set protocols bgp 65535 neighbor 2001:db8::1 address-family ipv4-unicast route-map export 'AS65534-OUT'
set protocols bgp 65535 neighbor 2001:db8::1 address-family ipv4-unicast route-map import 'AS65534-IN'
set protocols bgp 65535 neighbor 2001:db8::1 address-family ipv6-unicast route-map export 'AS65534-OUT'
set protocols bgp 65535 neighbor 2001:db8::1 address-family ipv6-unicast route-map import 'AS65534-IN'
Можно также расширить данный пример запретом локальных соединений и многоадресной рассылки в правиле с номеров 20 с действием action deny
.
Список команд#
Настройка BGP соседства#
Определение BGP соседей#
- # set protocols bgp <asn> neighbor <address|interface> remote-as <nasn>#
Данная команда позволяет создать нового соседа, для которого значение параметра
remote-as
равно<nasn>
. Адрес соседа может быть IPv4 адресом, IPv6 адресом или интерфейсом, который будет использоваться для соединения. Команда применима как для отдельного соседа, так и для группы соседей.
- # set protocols bgp <asn> neighbor <address|interface> remote-as internal#
При выполнении данной команды создание соседа происходит так же, как и при указании ASN, за исключением того, что если ASN соседа отличается от собственного, указанного в команде
protocols bgp <asn>
, то в соединении будет отказано.
- # set protocols bgp <asn> neighbor <address|interface> remote-as external#
При выполнении данной команды создание соседа происходит так же, как и при указании ASN, за исключением того, что если ASN соседа совпадает с собственным, указанным в команде
protocols bgp <asn>
, то в соединении будет отказано.
- # set protocols bgp <asn> neighbor <address|interface> shutdown#
Данная команда позволяет отключить соседа или группу соседей. Для повторной активации соседа необходимо использовать контекст
delete
для данной команды.
- # set protocols bgp <asn> neighbor <address|interface> description <text>#
Данная команда позволяет задать описание для соседа или группы соседей.
- # set protocols bgp <asn> neighbor <address|interface> update-source <address|interface>#
Данная команда позволяет указать адрес отправителя, который будет использоваться для BGP сессии с этим соседом. Адрес может быть указан как IPv4 адрес или как имя интерфейса.
Согласование возможностей BGP соседства#
- # set protocols bgp <asn> neighbor <address|interface> capability dynamic#
Данная команда позволяет динамически обновлять список доступных функций через установленную BGP сессию.
- # set protocols bgp <asn> neighbor <address|interface> capability extended-nexthop#
Данная команда позволяет разрешить для протокола BGP согласование функции
extended-nexthop
со своим соседом. Если подключение к соседу осуществляется по протоколу IPv6 с использованием локального адреса Link-Local, то эта возможность включается автоматически. Если подключение к соседу осуществляется по глобальному адресу IPv6, то включение этой команды позволит протоколу BGP устанавливать маршруты IPv4 с указанием адресов следующих узлов по протоколу IPv6, но только в случае если на интерфейсах не настроен IPv4 адрес.
- # set protocols bgp <asn> neighbor <address|interface> disable-capability-negotiation#
Данная команда запрещает отправку соседу сообщения Capability Negotiation в качестве необязательного параметра сообщения для установления соседства. Команда действует только в случае, если для соседа задана конфигурация, отличная от одноадресной конфигурации IPv4.
Если удаленный сосед не имеет возможности согласования функций, то он не будет посылать список таковых. В этом случае протокол BGP выполнит настройку соседа в соответствии с заданными функциями.
В некоторых случаях может потребоваться использования большего числа функций, чем было согласовано между соседями, даже если удаленный сосед передает определенный список функций. В этом случае, если сосед сконфигурирован с помощью параметра
override-capability
, то ПО Факел игнорирует полученный список функций, а затем заменяет согласованные функции сконфигурированными.Также необходимо иметь в виду, что данная функция принципиально лишает возможности использовать широко распространенные функции протокола BGP, такие как: использование ненумерованных интерфейсов, поддержка имен хостов, использование четырехбайтных номеров АС, задание нескольких путей для одного и того же префикса, обновление маршрутов, фильтрация маршрутной информации, динамический список функций, плавный перезапуск.
- # set protocols bgp <asn> neighbor <address|interface> override-capability#
Данная команда позволяет переопределить результат согласования функций с помощью локальной конфигурации. В этом случае список функций удаленного соседа игнорируется.
- # set protocols bgp <asn> neighbor <address|interface> strict-capability-match#
Данная команда принуждает к строгому сравнению списка доступных функций удаленного и локального соседей. Если списка функций отличается, формируется ошибка Unsupported Capability, а затем происходит сброс соединения.
Можно также запретить отправку параметра Capability Negotiation в сообщении для установления соседства, если удаленный сосед не поддерживается возможности согласования функций. Для отключения необходимо использовать команду
disable-capability-negotiation
.
Настройка параметров для BGP соседей#
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> allowas-in number <number>#
Данная команда принимает входящие маршруты с путем до АС, содержащим номер АС с тем же значением и АС данной системы. Такой подход используется в случаях, когда необходимо использовать один и тот же номер АС для разных сегментов, соединить которые напрямую не представляется возможным.
Параметр
number
(1-10) позволяет настроить количество допустимых повторений системного номера АС в пути до АС.Допустимо использование данной команды только для отдельных eBGP соседей и не допустимо для групп соседей.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> as-override#
Данная команда переопределяет номер АС маршрутизатора-источника локальным номером АС.
Обычно такая конфигурация применяется на оконечном оборудовании провайдера (Provider Edge) для замены входящего номера АС клиента таким образом, чтобы оконечное клиентское оборудование (Customer Edge) могло использовать тот же номер АС. Это позволяет клиенту сети провайдера использовать один и тот же номер АС во всех сегментах.
Допустимо использование данной команды только для отдельных eBGP соседей.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> attribute-unchanged <as-path|med|next-hop>#
Данная команда задает список атрибутов, которые должны быть неизменными при анонсах соседу или группе соседей.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> maximum-prefix <number>#
Данная команда задает максимальное количество префиксов, которое можно получить от определенного соседа. Если это количество будет превышено, то BGP сессия будет сброшена. Диапазон значений составляет от 1 до 4294967295.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> nexthop-self#
Данная команда принуждает BGP соседа, являющегося источником анонсов, сообщать о себе как о следующем узле для анонсируемого в адрес своего соседа маршрута.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> remove-private-as#
Данная команда удаляет частные номера ASN для маршрутов, которые анонсируются сконфигурированному соседу. Ее использование приводит к удалению только частных номеров ASN для маршрутов, анонсируемых eBGP соседям.
Если параметр AS-Path содержит только частные номера ASN для маршрута, то все эти номера удаляются.
Если параметр AS-Path содержит частные номера ASN наряду с публичными номерами ASN, то считается, что так задумано, и частные номера ASN не удаляются.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> soft-reconfiguration inbound#
Внесение изменений в политики BGP требуют сброса соответствующих сессий. Сброс оказывает негативное влияние на работу сети. Плавная внесение изменений в конфигурацию позволяет генерировать входящие обновления обновления от соседа, изменять и активировать политики BGP без сброса сессий.
Данная команда определяет, что обновления маршрутов, полученные от определенного соседа, будут сохраняться без изменений вне зависимости от политики входящих соединений. Если включено плавное изменение конфигурации входящих маршрутов, то сохраненные обновления обрабатываются новой конфигурацией политики для создания новых входящих обновлений.
Примечание
Для хранения обновлений маршрутов используется оперативная память. Если включить плавное внесение изменений в конфигурацию входящих маршрутов для нескольких соседей, объем используемой памяти может значительно возрасти.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> weight <number>#
Данная команда задает значение веса по умолчанию для маршрутов соседа. Диапазон значений составляет от 1 до 65535.
- # set protocols bgp <asn> neighbor <address|interface> advertisement-interval <seconds>#
Данная команда задает минимальный интервал между анонсами маршрутов для соседа. Значение интервала составляет от 0 до 600 секунд, по умолчанию интервал между анонсами равен 0.
- # set protocols bgp <asn> neighbor <address|interface> disable-connected-check#
Данная команда позволяет соединять между собой напрямую подключенных eBGP соседей с использованием Loopback адресов и без корректировка времени жизни (TTL), по умолчанию значение которого равно 1.
- # set protocols bgp <asn> neighbor <address|interface> disable-send-community <extended|standard>#
Данная команда определяет, что атрибут Community не должен передаваться в обновлениях маршрутов, адресованных соседу. По умолчанию атрибут Community передается.
- # set protocols bgp <asn> neighbor <address|interface> ebgp-multihop <number>#
Данная команда позволяет устанавливать соединения с eBGP соседями, даже если они находятся на удалении в несколько пересылок между узлами сети. Если сосед не имеет прямого соединения и данная команда не используется, соединение не будет установлено. Диапазон количества пересылок между узлами сети составляет от 1 до 255. Эта команда является взаимоисключающей по отношению к команде
ttl-security hops
.
- # set protocols bgp <asn> neighbor <address|interface> local-as <asn> [no-prepend] [replace-as]#
Данная команда позволяет указать альтернативную АС для данного BGP процесса при взаимодействии с указанным соседом или группой соседей. Без дополнительных атрибутов АС, указанная в параметре
local-as
, добавляется к входящему значению AS-Path при получении обновлений маршрутов от соседа и к исходящему значению AS-Path (после обработки локальной АС) при передаче локальных маршрутов соседу.Если указан атрибут
no-prepend
, то заданное значение параметраlocal-as
не добавляется к входящему значению AS-Path.Если указан атрибут
replace-as
, то при передаче обновлений локальных маршрутов соседу к значению AS-Path добавляется только заданное значение параметраlocal-as
.
Примечание
Данная команда применима только для eBGP соседей.
- # set protocols bgp <asn> neighbor <address|interface> passive#
Данная команда настраивает узел в качестве источника BGP анонсов таким образом, чтобы он принимал только входящие соединения, но не инициировал исходящие соединения с соседом или группой соседей.
- # set protocols bgp <asn> neighbor <address|interface> password <text>#
Данная команда задает пароль для TCP сокета, кодированный алгоритмом MD5 и используемый для соединения с удаленным соседом.
- # set protocols bgp <asn> neighbor <address|interface> ttl-security hops <number>#
Данная команда реализует механизм безопасности GTSM согласно спецификации RFC 5082. С помощью этой команды статус соседей разрешается присваивать только узлам, находящимся на расстоянии заданного числа пересылок между узлами. Диапазон числа пересылок между узлами составляет от 1 до 254. Команда является взаимоисключающей по отношению к команде
ebgp-multihop
.
Настройка группы BGP соседей#
Группы соседей используются для улучшения масштабирования за счет объединения общих параметров и информации об обновлениях для всех участников группы. Это означает, что маршруты, созданные участником группы, будут отправляться обратно в адрес источника с атрибутом Originator Identifier, значение которого указывает на соседа-источника маршрутной информации. Соседи, не связанные ни с одной группой, воспринимаются как принадлежащие к группе соседей по умолчанию, и будут использовать общие обновления.
- # set protocols bgp <asn> peer-group <name>#
Данная команда определяет новую группу соседей. Для группы можно указать те же параметры, что я для отдельных соседей.
Примечание
Если изменения применяются к IP адресу отдельного соседа, они переопределяют изменения, внесенные для группы соседей, в которую входит данный IP адрес.
- # set protocols bgp <asn> neighbor <address|interface> peer-group <name>#
Данная команда связывает конкретную группу соседей с заданным именем.
Настройка анонсов BGP#
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> network <prefix>#
Данная команда используется для анонсирования сетей IPv4 или IPv6.
Примечание
По умолчанию префикс BGP анонсируется, даже если он отсутствует в таблице маршрутизации.
- # set protocols bgp <asn> parameters network-import-check#
Данная конфигурация позволяет изменить поведение оператора
network
. При такой настройке базовая сеть должна существовать в таблице маршрутизации.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> default-originate [route-map <name>]#
По умолчанию ПО Факел не анонсирует маршрут по умолчанию (0.0.0.0/0), даже если он есть в таблице маршрутизации. Данную команду следует использовать в случае, если необходимо анонсировать маршрут по умолчанию. При использовании дополнительного аргумента
route-map
, можно передать маршрут по умолчанию заданному соседу только в том случае, если выполняются условия заданной аргументомroute-map
карты маршрутов.
Настройка агрегации маршрутов#
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> aggregate-address <prefix>#
Данная команда задает агрегированный адрес. Маршрутизатор также будет анонсировать более длинные префиксы внутри агрегированного адреса.
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> aggregate-address <prefix> as-set#
Данная команда задает агрегированный адрес с математическим набором АС. Команда суммирует атрибуты AS-Path для всех отдельных маршрутов.
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> aggregate-address <prefix> summary-only#
Данная команда задает агрегированный адрес и обеспечивает подавление более длинных префиксов внутри агрегированного адреса перед отправкой обновлений BGP соседям.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> unsuppress-map <name>#
Данная команда применяет определенную карту маршрутов для выборочного исключения префиксов, подавленных в процессе суммирования.
Настройка редистрибуции#
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> redistribute <route source>#
Данная команда осуществляет редистрибуцию маршрутной информации от заданного источника в процесс BGP. Для источника маршрута доступны следующие режимы:
connected
,kernel
,ospf
,rip
,static
,table
.
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> redistribute <route source> metric <number>#
Данная команда задает метрику MED для маршрутов, подлежащих редистрибуции. Диапазон значений метрики составляет от 0 до 4294967295. Для источника маршрутной информации доступны следующие режимы:
connected
,kernel
,ospf
,rip
,static
,table
.
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> redistribute <route source> route-map <name>#
Данная команда позволяет использовать определенную карту маршрутов для фильтрации маршрутов, подлежащих редистрибуции. Для источника маршрутной информации доступны следующие режимы:
connected
,kernel
,ospf
,rip
,static
,table
.
Базовые настройки#
Общие параметры#
- # set protocols bgp <asn> parameters router-id <id>#
Данная команда задает идентификатор маршрутизатора router-ID. Если идентификатор не указан, то в качестве него будет использоваться IP адрес интерфейса с наибольшим значением.
- # set protocols bgp <asn> address-family <ipv4-unicast|ipv6-unicast> maximum-paths <ebgp|ibgp> <number>#
Данная команда определяет максимальное количество параллельных маршрутов, которое может поддерживаться процессом BGP. Для того, чтобы процесс BGP использовал второй путь, необходимо, чтобы совпадали следующие атрибуты: вес, локальные предпочтения, путь до АС (номер АС и длина пути), код источника маршрутной информации, атрибут MED, метрика IGP. Кроме того, адрес следующего узла для каждого пути должен быть разным.
- # set protocols bgp <asn> parameters default no-ipv4-unicast#
Данная команда позволяет отключить по умолчанию установление соседства по протоколу IPv4.
- # set protocols bgp <asn> parameters log-neighbor-changes#
Данная команда позволяет активирует запись в журнал события, которые связаны изменения статуса соседей (доступен / не доступен) и причины сброса.
- # set protocols bgp <asn> parameters no-client-to-client-reflection#
Данная команда отключает отражение маршрутов между клиентами. По умолчанию клиенты не должны быть объединены в полносвязную сеть, и маршруты от определенного клиента отражаются всем остальным. Если клиенты все же объединены в полносвязную сеть, отражение маршрутов не требуется. В этом случае необходимо использовать команду
no-client-to-client-reflection
, чтобы отключить отражение маршрутов между клиентами.
- # set protocols bgp <asn> parameters no-fast-external-failover#
Данная команда отключает немедленный сброс сессий при отказе канала связи с соседом.
Административная дистанция#
- # set protocols bgp <asn> parameters distance global <external|internal|local> <distance>#
Данная команда изменяет значение административной дистанции в BGP. В качестве аргументов указываются значения административной дистанции для внешних, внутренних и локальных маршрутов соответственно. Диапазон значений административной дистанции составляет от 1 до 255.
- # set protocols bgp <asn> parameters distance prefix <subnet> distance <distance>#
Данная команда задает административную дистанцию для определенного маршрута. Диапазон значений административной дистанции составляет от 1 до 255.
Примечание
Маршруты с административной дистанцией 255 фактически отключены и не используются модулями ядра при принятии решений о маршрутизации трафика.
Настройка таймеров#
- # set protocols bgp <asn> timers holdtime <seconds>#
Данная команда задает время удержания маршрутов в секундах. Диапазон значений такого таймера составляет от 4 до 65535. По умолчанию используется значение 180 секунд. Если установить значение 0, то ПО Факел не будет удерживать маршруты.
- # set protocols bgp <asn> timers keepalive <seconds>#
Данная команда задает время жизни маршрутов в секундах. Диапазон значений такого таймера составляет от 4 до 65535. По умолчанию используется значение 60 секунд.
Настройка BGP Route Dampening#
Когда маршрут выходит из строя, отправляется обновление маршрут с указанием на то, чтобы изъять его из таблиц маршрутизации. Когда маршрут восстанавливается, об изменении его доступности также сообщается. Поэтому маршрут, который постоянно выходит из строя и восстанавливается, требует значительного объема сетевого трафика для обновлении информации о его состоянии
Гашение маршрутов, описание которого представлено в RFC 2439, позволяет выявлять маршруты, которые регулярно выходят из строя и восстанавливается. Если гашение маршрутов выключено, то нестабильный маршрут накапливает штрафы при каждом выходе из строя и восстановлении. Если сумма штрафов превышает определенное пороговое значение, маршрут больше не анонсируется. Данное поведение называется подавлением маршрутов. Маршруты, которые были подавлены, могут снова попасть в таблицу маршрутизации только тогда, когда сумма штрафов становится меньше порогового значения
При каждом выходе из строя маршруту начисляется штраф в размере 1000. Когда сумма штрафом достигают порогового значения suppress-value
, маршрутизатор прекращает анонсировать данный маршрут
После применения штрафа к маршруту, его значение уменьшается ровно вдвое каждый раз по истечении заданного параметром half-life-time
времени. Когда сумма штрафом становится меньше порогового значения reuse-value
, маршрут перестает подавляться и снова добавляется в таблицу маршрутизации
Маршруты не остаются подавленными бесконечно. Параметр maximum-suppress-time
определяет время, в течение которого маршрут может оставаться подавленным, прежде чем произойдет его повторное анонсирование.
- # set protocols bgp <asn> parameters dampening half-life <minutes>#
Данная команда определяет время в минутах, по истечении которого примененный штраф уменьшается вдвое. Диапазон значений составляет от 10 до 45 минут.
- # set protocols bgp <asn> parameters dampening re-use <seconds>#
Данная команда определяет накопленную сумму штрафа, при которой маршрут повторно анонсрируется. Диапазон значений составляет от 1 до 20000.
- # set protocols bgp <asn> parameters dampening start-suppress-time <seconds>#
Данная команда определяет накопленную сумму штрафов, при которой маршрут подавляется. Диапазон значений составляет от 1 до 20000.
- # set protocols bgp <asn> parameters dampening max-suppress-time <seconds>#
Данная команда определяет максимальное время в минутах, в течение которого маршрут может оставаться подавленным, прежде чем произойдет его повторное анонсирование. Диапазон значений составляет от 1 до 255 минут.
Настройка выбора маршрутов#
- # set protocols bgp <asn> parameters always-compare-med#
Данная команда позволяет сравнивать значения атрибута MED маршрутов, даже если они были полученных из разных соседних АС. Использование данной опции делает порядок предпочтения маршрутов более определенным и должно исключить возможные колебания, вызванные MED.
- # set protocols bgp <asn> parameters bestpath as-path confed#
Данная команда определяет, что длина наборов и последовательностей разделенных путей (confederation path) должна учитываться в процессе принятия решения протоколом BGP о выборе оптимального пути.
- # set protocols bgp <asn> parameters bestpath as-path multipath-relax#
Данная команда предписывает в процессе принятия протоколом BGP решений о выборе оптимального пути рассмотрение путей одинаковой длины AS-Path в качестве кандидатов на расчет множественности путей. Без использования этой команды при расчете соответствующих этой концепции маршрутов требуется совпадение всего значения AS-Path.
- # set protocols bgp <asn> parameters bestpath as-path ignore#
Данная команда предписывает игнорирование длины AS-Path при выборе маршрута.
- # set protocols bgp <asn> parameters bestpath compare-routerid#
При сравнении маршрутов необходимо убедиться, что если они равны по большинству метрик, включая локальные предпочтения, длину пути до АС, стоимость IGP, значение атрибута MED, равенство в конечном счете определяется по идентификатору маршрутизатора router-ID.
Если данная опция включена, то проверка уже выбранных маршрутов, при которой предпочтение отдается уже выбранным маршрутам eBGP, пропускается.
Если маршрут имеет атрибут ORIGINATOR_ID в результате отражения, то будет использоваться значение атрибута ORIGINATOR_ID. В противном случае будет использоваться идентификатор маршрутизатора того соседа, от которого был получен маршрут.
Преимуществом такого подхода является то, что выбор маршрута на данном этапе будет более детерминированным. Недостатком является то, что из-за такой проверки один или несколько маршрутизаторов или один маршрутизатор с наименьшим идентификатором могут перетянуть весь трафик на другие равные пути. Это может увеличить вероятность возникновения колебаний MED или IGP, если не были приняты другие меры для их предотвращения. Точное поведение будет зависеть от топологии iBGP и процесса отражения маршрутов.
- # set protocols bgp <asn> parameters bestpath med confed#
Данная команда определяет, что протокол BGP учитывает атрибут MED при сравнении маршрутов, источниками которых являются разные дочерние АС в пределах области разделения, к которой принадлежит данный источник анонсов по протоколу BGP. Состоянием по умолчанию является состояние, при котором атрибут MED не учитывается.
- # set protocols bgp <asn> parameters bestpath med missing-as-worst#
Данная команда определяет, что маршрут с атрибутом MED всегда считается маршрутом с самым высоким приоритетом, чем без него, определяя для отсутствующего атрибута MED фактически значение бесконечности. Состоянием по умолчанию является состояние, при котором атрибут MED не учитывается.
- # set protocols bgp <asn> parameters default local-pref <local-pref value>#
Данная команда задает значение локального предпочтения по умолчанию. Диапазон значений локального предпочтения составляет от 0 до 4294967295.
- # set protocols bgp <asn> parameters deterministic-med#
Данная команда позволяет сравнивать различные значения атрибута MED, анонсируемые соседями в одной АС, при выборе маршрутов. Когда эта команда включена, маршруты из одной АС группируются вместе, сравниваются лучшие записи из каждой группы.
- # set protocols bgp <asn> address-family ipv4-unicast network <prefix> backdoor#
Данная команда предписывает маршрутизатору предпочтение маршрут с указанным префиксом, полученным путем использования протокола IGP по через backdoor соединение, вместо маршрута к тому же префиксу, полученному путем использования протокола eBGP.
Настройка фильтрации маршрутов#
Для контроля и модификации маршрутной информации, которой обмениваются соседи, можно использовать карту маршрутов, список заданных фильтров и префиксов, список дистрибуции.
Для входящих обновлений предпочтение отдается следующим образом:
карта маршрутов (
route-map
);список заданных фильтров (
filter-list
);список заданных префиксов, список дистрибуции (
prefix-list
,distribute-list
).
Для исходящих обновлений предпочтение отдается следующим образом:
список заданных префиксов, список дистрибуции (
prefix-list
,distribute-list
);список заданных фильтров (
filter-list
);карта маршрутов (
route-map
).
Примечание
Атрибуты prefix-list
и distribute-list
являются взаимоисключающими, и только одна команда (distribute-list
или prefix-list
) может быть применена к каждому входящему или исходящему направлению для конкретного соседа.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> distribute-list <export|import> <number>#
Данная команда применяет фильтры списка доступа с именем <number> к указанному соседу BGP для ограничения информации о маршрутизации, которую протокол BGP получает и/или анонсирует. Аргументы
export
иimport
задают направление применения списка доступа.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> prefix-list <export|import> <name>#
Данная команда применяет фильтры из списка
prfefix-list
, заданные в <name>, к указанному соседу BGP для ограничения маршрутной информации, которую протокол BGP получает и/или анонсирует. Аргументыexport
иimport
задают направление применения списка префиксов.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> route-map <export|import> <name>#
Данная команда применяет карту маршрутов с именем <name> к указанному соседу BGP для управления и модификации маршрутной информации, которой обмениваются между собой соседи. Аргументы
export
иimport
задают направление применения карты маршрутов.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> filter-list <export|import> <name>#
Данная команда применяет к определенному соседу BGP фильтры списка доступа к значениям AS-Path, указанным в <name>, для ограничения информации о маршрутизации, которую протокол BGP получает и/или анонсирует. Аргументы
export
иimport
задают направление, в котором применяется список доступа к AS-Path.
- # set protocols bgp <asn> neighbor <address|interface> address-family <ipv4-unicast|ipv6-unicast> capability orf <receive|send>#
Данная команда включает возможность фильтрации маршрутной информации ORF, описание которой представлено в спецификации RFC 5291, на локальном маршрутизаторе и включает анонсирование возможности ORF для указанного BGP соседа. Ключ
receive
настраивает маршрутизатор на анонсирование возможности приема ORF. Ключend
настраивает маршрутизатор на анонсирование возможности передачи ORF. Чтобы анонсировать фильтр отправителя, необходимо создать список IP префиксов для указанного BGP соседа, применяемый при входящей сортировке.
Настройка масштабирования BGP#
Маршрутизаторы BGP, соединенные между собой в рамках одной и той же АС, принадлежат к внутренней сессии BGP или iBGP. Чтобы предотвратить зацикливание таблицы маршрутизации, узел являющийся источником анонсов, не анонсирует маршруты, обнаружение в процессе работы iBGP, другим узлам iBGP - подход называется разделением горизонта (Split Horizon). Таким образом для работы iBGP требуется полносвязная сеть соседей. Для больших сетей это практически невыполнимо.
Существует два способа, позволяющих смягчить требование протокола BGP к полносвязности сети соседей:
Использование отражения маршрутов;
Использование разделения АС.
Настройка BGP Route Reflector#
Внедрение узлов, выполняющих функцию отражения маршрутов, устраняет необходимость в организации полносвязной сети соседей. При настройке таких узлов необходимо указать маршрутизатору, является ли другой маршрутизатора iBGP клиентом или нет. Клиент представляет собой iBGP маршрутизатор на который узел будет отражать маршруты. Маршрутизатор не являющийся клиентом - обычный iBGP сосед. Описание механизма отражения маршрутов представлено в спецификации RFC 4456 и дополнено в спецификации RFC 7606.
- # set protocols bgp <asn> neighbor <address> address-family <ipv4-unicast|ipv6-unicast> route-reflector-client#
Данная команда определяет указанного соседа как клиента для отражения маршрутов.
- # set protocols bgp <asn> parameters cluster-id <id>#
Данная команда задает идентификатор кластера, который формирует совокупность узлов, отражающих маршруты, и их клиентов, и используется узлами, отражающими маршруты, для предотвращения петель в коммуникациях. По умолчанию идентификатор кластера равен значению параметра router-id для протокола BGP, но может быть установлен в произвольное 32-битное значение.
Настройка механизма разделения АС#
Механизм разделения в протоколе BGP подразумевает деление АС на подсистемы для уменьшения количества необходимых iBGP соединений. В пределах одной подсистемы по-прежнему требуется наличие полносвязной iBGP сети, но между подсистемами используется подобие eBGP, функционирующее как iBGP (таким образом определяется область разделения). Описание механизма представлено в спецификации RFC 5065.
- # set protocols bgp <subasn> parameters confederation identifier <asn>#
Данная команда задает идентификатор области разделения в протоколе BGP. Параметр
<asn>
- номер АС, которая включает в себя несколько подсистем (область разделения). Параметр<subasn>
- номер подсистемы в рамках АС, заданной параметром<asn>
.
- # set protocols bgp <subasn> parameters confederation confederation peers <nsubasn>#
Данная команда устанавливает другие области разделения
<nsubasn>
в качестве подчиненных АС, идентификатор которой указан в командеconfederation identifier <asn>
.
Мониторинг и эксплуатация#
- $ show <ip|ipv6> bgp#
Выводит на экран все записи в таблице маршрутизации BGP.
BGP table version is 10, local router ID is 10.0.35.3, vrf id 0
Default local pref 100, local AS 65000
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 198.51.100.0/24 10.0.34.4 0 0 65004 i
*> 203.0.113.0/24 10.0.35.5 0 0 65005 i
Displayed 2 routes and 2 total paths
- $ show <ip|ipv6> bgp <address|prefix>#
Выводит на экран информацию о конкретной записи в таблице маршрутизации BGP.
BGP routing table entry for 198.51.100.0/24
Paths: (1 available, best #1, table default)
Advertised to non peer-group peers:
10.0.13.1 10.0.23.2 10.0.34.4 10.0.35.5
65004
10.0.34.4 from 10.0.34.4 (10.0.34.4)
Origin IGP, metric 0, valid, external, best (First path received)
Last update: Wed Jan 6 12:18:53 2021
- $ show ip bgp cidr-only#
Выводит на экран список маршрутов с бесклассовой междоменной маршрутизацией (CIDR).
- $ show <ip|ipv6> bgp community <value>#
Выводит на экран список маршрутов, принадлежащие указанным сообществам BGP. Допустимые значения: номер сообщества в диапазоне от 1 до 4294967200, AA:NN (AA - 2-байтовый номер АС, NN - 2-байтовый номер сообщества),
no-export
,local-as
илиno-advertise
.
- $ show <ip|ipv6> bgp community-list <name>#
Выводит на экран список маршрутов, разрешенные списком сообществ BGP.
- $ show ip bgp dampened-paths#
Выводит на экран список
dampened
маршруты BGP.
- $ show ip bgp flap-statistics#
Выводит на экран информацию о нестабильных (flapping) маршрутах BGP.
- $ show ip bgp filter-list <name>#
Выводит на экран список маршрутов BGP, разрешенные указанным списком доступа AS-Path.
- $ show <ip|ipv6> bgp neighbors <address> advertised-routes#
Выводит на экран список маршрутов BGP, анонсируемых соседу
<address>
.
- $ show <ip|ipv6> bgp neighbors <address> received-routes#
Выводит на экран список маршрутов BGP, полученных от указанного сосед
<address>
, до применения политики входящих соединений.
- $ show <ip|ipv6> bgp neighbors <address> routes#
Выводит на экран список маршрутов BGP, которые были получены от указанного соседа
<address>
после применения фильтрации.
- $ show <ip|ipv6> bgp neighbors <address> dampened-routes#
Выводит на экран
dampened
маршруты, полученные от BGP соседа<address>
.
- $ show <ip|ipv6> bgp regexp <text>#
Выводит на экран список маршрутов BGP, для которых значение
AS-Path
соответствует заданному регулярному выражению<text>
.
- $ show <ip|ipv6> bgp summary#
Выводит на экран состояние всех BGP соединений.
Пример работы команды show <ip|ipv6> bgp summary:
admin@fakel:~$ show <ip|ipv6> bgp summary
IPv4 Unicast Summary:
BGP router identifier 10.0.35.3, local AS number 65000 vrf-id 0
BGP table version 11
RIB entries 5, using 920 bytes of memory
Peers 4, using 82 KiB of memory
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.0.13.1 4 65000 148 159 0 0 0 02:16:01 0
10.0.23.2 4 65000 136 143 0 0 0 02:13:21 0
10.0.34.4 4 65004 161 163 0 0 0 02:16:01 1
10.0.35.5 4 65005 162 166 0 0 0 02:16:01 1
Total number of neighbors 4
- $ reset <ip|ipv6> bgp <address> [soft [in|out]]#
Сбрасывает BGP соединения c указанным соседом
<address>
. С аргументомsoft
эта команда инициирует плавный сброс. Если не используются опцииin
илиout
, то запускается как входящее, так и исходящее плавное изменение в настройках конфигурации маршрутов.
- $ reset ip bgp all#
Сбрасывает все BGP соединения на маршрутизаторе.
- $ reset ip bgp dampening#
Сбрасывает информацию о
dampened
соединения на маршрутизаторе.
- $ reset ip bgp external#
Сбрасывает все внешние BGP соседства для маршрутизатора.
- $ reset ip bgp peer-group <name> [soft [in|out]]#
Сбрасывает BGP соединения с указанной группой соседей. С аргументом
soft
эта команда инициирует плавный сброс. Если не используются опцииin
илиout
, то запускается как входящее, так и исходящее плавное изменение в настройках конфигурации маршрутов.