Политика фильтрации маршрутной информации
Фильтрация маршрутной информации в динамических протоколах маршрутизации осуществляется с помощью prefix-list и route-map. Структурно они состоят из последовательных условий, совпадений (match) и действий, применяемых для заданных условий – permit/deny. В зависимости от политики обработки маршрутов (импорт или экспорт) конечное неявное условие (правило) может быть разным для некоторых протоколов маршрутизации.
Правила фильтрации маршрутов в prefix-list и route-map выглядят следующим образом:
- В route-map: маршруты сопоставляются с IP-префиксами по очереди в списке правил в соответствии с их нумераций – от самого младшего до самого старшего.
- В prefix-list: маршруты сопоставляются с IP-префиксами по очереди в списке IP-префиксов, указанных в prefix-list в том порядке, котором они были заданы при создании/редактировании этого prefix-list.
- Если маршрут соответствует префиксу, указанному в последовательности или правиле, к нему применяются описанные действия, и он перестает сопоставляться с другими префиксами в списке IP-префиксов.
- Если маршруты не соответствуют ни одному префиксу в списке IP-префиксов, к ним применяется неявное правило в конце prefix-list или route-map.
Ниже приведены блок-схемы с автоматом состояний обработки правил фильтрации маршрутной информации для политик import и export.
Обработка правил фильтрации маршрутной информации политики export для протоколов RIP, OSPF, IS-IS, iBGP:
Обработка правил фильтрации маршрутной информации политики import для протоколов RIP, OSPF, IS-IS, iBGP:
Обработка правил фильтрации маршрутной информации политик import/export для протоколa eBGP:
Ниже приведены обобщенные таблицы по протоколам:
Протокол RIP
in/out | Политика по умолчанию | Способы анонсирования | Способы фильтрации | Уровни применения политик фильтрации |
---|---|---|---|---|
Import | Получение маршрутной информации не ограничено. | Network, Redistribute | Route-map — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. Prefix-list — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. | Процесс RIP |
Export | Без отдельных команд анонсирования маршрутизатор не отправляет маршрутную информацию. | Prefix-list — последнее (неявное) правило разрешает все, что явно не запрещено предыдущими правилами. Prefix-list — последнее (неявное) правило разрешает все, что явно не запрещено предыдущими правилами. |
Протокол OSPF
in/out | Политика по умолчанию | Способы анонсирования | Способы фильтрации | Уровни применения политик фильтрации |
---|---|---|---|---|
Import | Получение маршрутной информации не ограничено. | Network, Redistribute | Route-map — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. Prefix-list — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. | Процесс OSPF |
Export | Анонсируется информация о интерфейсах, на которых включен протокол OSPF. | Route-map — последнее (неявное) правило разрешает все, что явно не запрещено предыдущими правилами. Prefix-list — последнее (неявное) правило разрешает все, что явно не запрещено предыдущими правилами. Фильтрация анонсируемой маршрутной информации возможна для следующих типов OSPF-маршрутов: E2, E1. |
Протокол IS-IS
in/out | Политика по умолчанию | Способы анонсирования | Способы фильтрации | Уровни применения политик фильтрации |
---|---|---|---|---|
Import | Получение маршрутной информации не ограничено. | Network, Redistribute | Route-map — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. Prefix-list — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. | Процесс IS-IS |
Export | Анонсируется информация о интерфейсах, на которых включен протокол IS-IS. | Route-map — последнее (неявное) правило разрешает все, что явно не запрещено предыдущими правилами. Prefix-list — последнее (неявное) правило разрешает все, что явно не запрещено предыдущими правилами. |
Протокол iBGP
in/out | Политика по умолчанию | Способы Анонсирования | Способы фильтрации | Уровни применения политик фильтрации |
---|---|---|---|---|
Import | Получение маршрутной информации не ограничено. | Network, Redistribute | Route-map — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. Prefix-list — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. | address-family, peer-group, neighbor |
Export | Анонсируются все маршруты, попавшие в RIB по протоколу BGP. | Route-map — последнее (неявное) правило разрешает все, что явно не разрешено предыдущими правилами. Prefix-list — последнее (неявное) правило разрешает все, что явно не разрешено предыдущими правилами. |
Протокол eBGP
in/out | Политика по умолчанию | Способы Анонсирования | Способы фильтрации | Уровни применения политик фильтрации |
---|---|---|---|---|
Import | Получение маршрутной информации не ограничено | Network, Redistribute | Route-map — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. Prefix-list — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. | address-family, peer-group, neighbor |
Export | Анонсирование маршрутов запрещено до применения разрешающего route-map или prefix-list | Route-map — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. Prefix-list — последнее (неявное) правило запрещает все, что явно не разрешено предыдущими правилами. |
Конфигурирование статических маршрутов
Статическая маршрутизация — вид маршрутизации, при котором маршруты указываются в явном виде при конфигурации маршрутизатора без использования протоколов динамической маршрутизации.
Алгоритм настройки
Добавить статический маршрут возможно командой в режиме глобальной конфигурации:
esr(config)# ip route [ vrf <VRF> ] <SUBNET> { { <NEXTHOP> [ resolve ] [ bfd ] [ unit <ID> ] | interface <IF> | tunnel <TUN> | blackhole | unreachable | prohibit } [ track <TRACK-ID> ] [ name <NAME>] } | wan load-balance rule <RULE> } [ <METRIC> ] no ip route [ vrf <VRF> ] <SUBNET> [ <METRIC> ] [ unit <ID> ]
<VRF> – имя экземпляра VRF, задается строкой до 31 символа;
<SUBNET> – адрес назначения, может быть задан в следующих видах:
AAA.BBB.CCC.DDD – IP-адрес хоста, где каждая часть принимает значения [0..255];
AAA.BBB.CCC.DDD/NN – IP-адрес подсети с маской в виде префикса, где AAA-DDD принимают значения [0..255] и NN принимает значения [1..32].
<NEXTHOP> – IP-адрес шлюза, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255];
resolve – при указании данного параметра IP-адрес шлюза будет рекурсивно вычислен через таблицу маршрутизации. Если при рекурсивном вычислении не удастся найти шлюз из напрямую подключенной подсети, то данный маршрут не будет установлен в систему;
<ID> – номер юнита, принимает значения [1..2];
<IF> – имя IP-интерфейса, задаётся в виде, описанном в разделе Типы и порядок именования интерфейсов маршрутизатора;
<TUN> – имя туннеля, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора;
<RULE> – номер правила wan, задаётся в диапазоне [1..50];
blackhole – при указании команды пакеты до данной подсети будут удаляться устройством без отправки уведомлений отправителю;
unreachable – при указании команды пакеты до данной подсети будут удаляться устройством, отправитель получит в ответ ICMP Destination unreachable (Host unreachable, code 1);
prohibit – при указании команды пакеты до данной подсети будут удаляться устройством, отправитель получит в ответ ICMP Destination unreachable (Communication administratively prohibited, code 13);
<METRIC> – метрика маршрута, принимает значения [0..255];
<TRACK-ID> – идентификатор Tracking-объекта. Если маршрут привязан к Tracking-объекту, то он появится в системе только при выполнении всех условий, заданных в объекте;
<NAME> – имя (описание) маршрута, текстовая переменная длиной до 31 символа;
bfd – при указании данного ключа активируется удаление статического маршрута в случае недоступности next-hop. Для работы данного механизма должен быть запущен механизм BFD с IP-адресом next-hop (см. раздел ip bfd neighbor).
Проверка next-hop при помощи протокола BFD. В случае недоступности next-hop маршрут удаляется.
Для добавления статического IPv6-маршрута к указанной подсети используется команда:
esr(config)# ipv6 route [ vrf <VRF> ] <SUBNET> { { <NEXTHOP> [ resolve ] [bfd] [ unit <ID> ] | interface <IF> | blackhole | unreachable | prohibit [ <METRIC> ] [ name <NAME>] } | wan load-balance rule <RULE> [ <METRIC> ] } no ipv6 route [ vrf <VRF> ] <SUBNET> [ <METRIC> ] [ unit <ID> ]
- <VRF> – имя экземпляра VRF, задается строкой до 31 символа;
- <SUBNET> – адрес назначения, может быть задан в следующих видах:
- X:X:X:X::X – IPv6-адрес хоста, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF];
- X:X:X:X::X/EE – IPv6-адрес подсети с маской в виде префикса, где каждая часть X принимает значения в шестнадцатеричном формате [0..FFFF] и EE принимает значения [1..128].
- <NEXTHOP> – IPv6-адрес шлюза, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF];
- resolve – при указании данного параметра IPv6-адрес шлюза будет рекурсивно вычислен через таблицу маршрутизации. Если при рекурсивном вычислении не удастся найти шлюз из напрямую подключенной подсети, то данный маршрут не будет установлен в систему;
- <ID> – номер юнита, принимает значения [1..2];
- <IF> – имя IP-интерфейса, задаётся в виде, описанном в разделе Типы и порядок именования интерфейсов маршрутизатора;
- blackhole – при указании команды пакеты до данной подсети будут удаляться устройством без отправки уведомлений отправителю;
- unreachable – при указании команды пакеты до данной подсети будут удаляться устройством, отправитель получит в ответ ICMP Destination unreachable (Host unreachable, code 1);
- prohibit – при указании команды пакеты до данной подсети будут удаляться устройством, отправитель получит в ответ ICMP Destination unreachable (Communication administratively prohibited, code 13);
- [METRIC] – метрика маршрута, принимает значения [0..255];
- <NAME> – имя (описание) маршрута, текстовая переменная длиной до 31 символа;
- bfd – при указании данного ключа активируется проверка next-hop при помощи протокола BFD. В случае недоступности next-hop маршрут удаляется.
Пример настройки
Задача:
Настроить доступ к сети Internet для пользователей локальных сетей 192.168.1.0/24 и 10.0.0.0/8, используя статическую маршрутизацию. На устройстве R1 создать шлюз для доступа к сети Internet. Трафик внутри локальной сети должен маршрутизироваться внутри зоны LAN, трафик из сети Internet должен относиться к зоне WAN.
Решение:
Зададим имя устройства для маршрутизатора R1:
esr# hostname R1
Для интерфейса gi1/0/1 укажем адрес 192.168.1.1/24 и зону «LAN». Через данный интерфейс R1 будет подключен к сети 192.168.1.0/24:
esr(config)# interface gi1/0/1 esr(config-if-gi)# security-zone LAN esr(config-if-gi)# ip address 192.168.1.1/24 esr(config-if-gi)# exit
Для интерфейса gi1/0/2 укажем адрес 192.168.100.1/30 и зону «LAN». Через данный интерфейс R1 будет подключен к устройству R2 для последующей маршрутизации трафика:
esr(config)# interface gi1/0/2 esr(config-if-gi)# security-zone LAN esr(config-if-gi)# ip address 192.168.100.1/30 esr(config-if-gi)# exit
Для интерфейса gi1/0/3 укажем адрес 128.107.1.2/30 и зону «WAN». Через данный интерфейс R1 будет подключен к сети Internet:
esr(config)# interface gi1/0/3 esr(config-if-gi)# security-zone WAN esr(config-if-gi)# ip address 128.107.1.2/30 esr(config-if-gi)# exit
Создадим маршрут для взаимодействия с сетью 10.0.0.0/8, используя в качестве шлюза устройство R2 (192.168.100.2):
esr(config)# ip route 10.0.0.0/8 192.168.100.2
Создадим маршрут для взаимодействия с сетью Internet, используя в качестве nexthop шлюз провайдера (128.107.1.1):
esr(config)# ip route 0.0.0.0/0 128.107.1.1
Зададим имя устройства для маршрутизатора R2:
esr# hostname R2
Для интерфейса gi1/0/1 укажем адрес 10.0.0.1/8 и зону «LAN». Через данный интерфейс R2 будет подключен к сети 10.0.0.0/8:
esr(config)# interface gi1/0/1 esr(config-if-gi)# security-zone LAN esr(config-if-gi)# ip address 10.0.0.1/8 esr(config-if-gi)# exit
Для интерфейса gi1/0/2 укажем адрес 192.168.100.2/30 и зону «LAN». Через данный интерфейс R2 будет подключен к устройству R1 для последующей маршрутизации трафика:
esr(config)# interface gi1/0/2 esr(config-if-gi)# security-zone LAN esr(config-if-gi)# ip address 192.168.100.2/30 esr(config-if-gi)# exit
Создадим маршрут по умолчанию, указав в качестве nexthop IP-адрес интерфейса gi1/0/2 маршрутизатора R1 (192.168.100.1):
esr(config)# ip route 0.0.0.0/0 192.168.100.1
Проверить таблицу маршрутов можно командой:
esr# show ip route
Настройка RIP
RIP — дистанционно-векторный протокол динамической маршрутизации, который использует количество транзитных участков в качестве метрики маршрута. Максимальное количество транзитных участков (hop), разрешенное в RIP, равно 15. Каждый RIP-маршрутизатор по умолчанию вещает в сеть свою полную таблицу маршрутизации один раз в 30 секунд. RIP работает на 3 уровне стека TCP/IP, используя UDP-порт 520.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить приоритетность протокола RIP-маршрутизации для основной таблицы маршрутизации (не обязательно). | esr(config)# ip protocols rip preference <VALUE> | <VALUE> – приоритетность протокола, принимает значения в диапазоне [1..255]. Значение по умолчанию: RIP (100). |
2 | Настроить емкость таблиц маршрутизации протокола RIP (не обязательно). | esr(config)# ip protocols rip max-routes <VALUE> | <VALUE> – количество маршрутов протокола RIP в маршрутной таблице, принимает значения в диапазоне [1..10000]; 10000. |
3 | Создать списки IP-подсетей, которые в дальнейшем будут использоваться для фильтрации анонсируемых и получаемых IP-маршрутов. | esr(config)# ip prefix-list <NAME> | <NAME> – имя конфигурируемого списка подсетей, задаётся строкой до 31 символа. |
4 | Разрешить (permit) или запретить (deny) списки префиксов. | esr(config-pl)# permit {object-group <OBJ-GROUP-NETWORK-NAME > <ADDR/LEN> | <IPV6-ADDR/LEN> } [ { eq <LEN> | le <LEN> | ge <LEN> [ le <LEN> ] } ] | <OBJ-GROUP-NETWORK-NAME> – имя профиля IP-адресов, задаётся строкой до 31 символа; <LEN> – длина префикса, принимает значения [1..32] в IP-списках префиксов;
|
esr(config-pl)# deny {object-group <OBJ-GROUP-NETWORK-NAME> <ADDR/LEN> | <IPV6-ADDR/LEN> } [ { eq <LEN> | le <LEN> | ge <LEN> [ le <LEN> ] } | |||
5 | Перейти в режим настройки параметров RIP-процесса. | esr(config)# router rip esr(config-rip)# | |
6 | Включить RIP-протокол. | esr(config-rip)# enable | |
7 | Определить алгоритм аутентификации протокола RIP (не обязательно). | esr(config-rip)# authentication algorithm { cleartext | md5 } |
|
8 | Установить пароль для аутентификации с соседом (не обязательно). | esr(config-rip)# authentication key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой от 8 до 16 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером от 8 байт до 16 байт (от 16 до 32 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
9 | Определить список паролей для аутентификации через алгоритм хеширования md5 (не обязательно). | esr(config-rip)# authentication key-chain <KEYCHAIN> | <KEYCHAIN> – идентификатор списка ключей, задаётся строкой до 16 символов. |
10 | Выключить анонсирование маршрутов на интерфейсах/туннелях/bridge, где это не нужно (не обязательно). | esr(config-rip)# passive-interface {<IF> | <TUN> } | <IF> – интерфейс и идентификатор; <TUN> – имя и номер туннеля. |
11 | Установить временной интервал, по истечении которого производится анонсирование (не обязательно). | esr(config-rip)# timers update <TIME> | <TIME> – время в секундах, принимает значения [12..65535]. Значение по умолчанию: 180 секунд. |
12 | Установить временной интервал корректности маршрутной записи без обновления (не обязательно). | esr(config-rip)# timers invalid <TIME> | <TIME> – время в секундах, принимает значения [12..65535]. Значение по умолчанию: 180 секунд. |
13 | Установить временной интервал, по истечении которого производиться удаление маршрута (не обязательно). | esr(config-rip)# timers flush <TIME> | <TIME> – время в секундах, принимает значения [12..65535]. При установке значения нужно учитывать следующее правило: «timersinvalid + 60» Значение по умолчанию: 240 секунд. |
14 | Включить анонсирование подсетей. | esr(config-rip)# network <ADDR/LEN> | <ADDR/LEN> – адрес подсети, указывается в следующем формате: AAA.BBB.CCC.DDD/EE – IP-адрес подсети с маской в форме префикса, где AAA-DDD принимают значения [0..255] и EE принимает значения [1..32]. |
15 | Добавить фильтрацию подсетей во входящих или исходящих обновлениях (не обязательно). | esr(config-rip)# prefix-list <PREFIX-LIST-NAME> { in | out } | <PREFIX-LIST-NAME> – имя сконфигурированного списка подсетей, задаётся строкой до 31 символа.
|
16 | Включить анонсирование маршрутов, полученных альтернативным способом (не обязательно). | esr(config-rip)# redistribute static [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых статических маршрутов, задаётся строкой до 31 символа. |
esr(config-rip)# redistribute connected [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых напрямую подключенных подсетей, задаётся строкой до 31 символа. | ||
esr(config-rip)# redistribute ospf <ID><ROUTE-TYPE> [ route-map <NAME> ] | <ID> – номер процесса, может принимать значение [1..65535]; <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых OSPF-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-rip)# redistribute isis <ID><ROUTE-TYPE> [ route-map <NAME> ] | <ID> – номер процесса, может принимать значение [1..65535]; <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых ISIS-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-rip)# redistribute bgp <AS> [ route-map <NAME> ] | <AS> – номер автономной системы, может принимать значения [1..4294967295]; <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых BGP-маршрутов, задаётся строкой до 31 символа. | ||
17 | Перейти в режим конфигурирования интерфейса/туннеля/сетевого моста. | esr(config)# interface <IF-TYPE><IF-NUM> | <IF-TYPE> – тип интерфейса; <IF-NUM> – F/S/P – F-фрейм (1), S – слот (0), P – порт. |
esr(config)# tunnel <TUN-TYPE><TUN-NUM> | <TUN-TYPE> – тип туннеля; <TUN-NUM> – номер туннеля. | ||
esr(config)# bridge <BR-NUM> | <BR-NUM> – номер bridge. | ||
18 | Установить величину метрики RIP-маршрутов на интерфейсе (не обязательно). | esr(config-if-gi)# ip rip metric <VALUE> | <VALUE> – величина метрики, задаётся в размере [0..32767]. Значение по умолчанию: 5. |
19 | Установить режим анонсирования маршрутов по протоколу RIP (не обязательно). | esr(config-if-gi)# ip rip mode <MODE> | <MODE> – режим анонсирования маршрутов:
Значение по умолчанию: multicast. |
20 | Задать IP-адрес соседа для установления отношения в unicast-режиме анонсирования маршрутов (не обязательно). | esr(config-if-gi)# ip rip neighbor <ADDR> | <ADDR> – IP-адрес, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
21 | Включить суммаризацию подсетей (не обязательно). | esr(config-if-gi)# ip rip summary-address <ADDR/LEN> | <ADDR/LEN> – IP-адрес и маска подсети, задаётся в виде AAA.BBB.CCC.DDD/EE, где каждая часть AAA – DDD принимает значения [0..255] и EE принимает значения [1..32]. |
Пример настройки
Задача:
Настроить на маршрутизаторе протокол RIP для обмена маршрутной информацией с соседними маршрутизаторами. Маршрутизатор должен анонсировать статические маршруты и подсети 115.0.0.0/24, 14.0.0.0/24, 10.0.0.0/24. Анонсирование маршрутов должно происходить каждые 25 секунд.
Решение:
Предварительно нужно настроить IP-адреса на интерфейсах согласно схеме сети, приведенной на рисунке.
Перейдём в режим конфигурирования протокола RIP:
esr(config)# router rip
Укажем подсети, которые будут анонсироваться протоколом: 115.0.0.0/24, 14.0.0.0/24 и 10.0.0.0/24:
esr(config-rip)# network 115.0.0.0/24 esr(config-rip)# network 14.0.0.0/24 esr(config-rip)# network 10.0.0.0/24
Для анонсирования протоколом статических маршрутов выполним команду:
esr(config-rip)# redistribute static
Настроим таймер, отвечающий за отправку маршрутной информации:
esr(config-rip)# timers update 25
После установки всех требуемых настроек включим протокол:
esr(config-rip)# enable
Для того чтобы просмотреть таблицу маршрутов RIP, воспользуемся командой:
esr# show ip rip
Помимо настройки протокола RIP необходимо в firewall разрешить UDP-порт 520.
Настройка RIPng
RIPng – дистанционно-векторный протокол динамической маршрутизации, использующий алгоритм Беллмана-Форда для нахождения наилучшего маршрута. Данная версия протокола включает в себя поддержку работы с IPv6. RIPng работает на 3 уровне стека TCP/IP, используя UDP-порт 521.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить приоритетность протокола RIPng для основной таблицы маршрутизации (не обязательно). | esr(config)# ipv6 protocols rip preference <VALUE> | <VALUE> – приоритетность протокола, принимает значения в диапазоне [1..255]. Значение по умолчанию: RIPng (100). |
2 | Настроить емкость таблиц маршрутизации протокола RIPng (не обязательно). | esr(config)# ipv6 protocols rip max-routes <VALUE> | <VALUE> – количество маршрутов протокола RIP в маршрутной таблице, принимает значения в диапазоне [1..10000]; 10000. |
3 | Создать списки IPv6-подсетей, которые в дальнейшем будут использоваться для фильтрации анонсируемых и получаемых IPv6-маршрутов. | esr(config)# ipv6 prefix-list <NAME> | <NAME> – имя конфигурируемого списка подсетей, задаётся строкой до 31 символа. |
4 | Разрешить (permit) или запретить (deny) списки префиксов. | esr(config-pl)# permit {object-group <OBJ-GROUP-NETWORK-NAME > <IPV6-ADDR/LEN> } [ { eq <LEN> | le <LEN> | ge <LEN> [ le <LEN> ] } ] | <OBJ-GROUP-NETWORK-NAME> – имя профиля IP-адресов, задаётся строкой до 31 символа; <IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задаётся в виде X:X:X:X::X/EE, где каждая часть X принимает значения в шестнадцатеричном формате [0..FFFF] и EE принимает значения [1..128];
|
esr(config-pl)# deny {object-group <OBJ-GROUP-NETWORK-NAME> <IPV6-ADDR/LEN> } [ { eq <LEN> | le <LEN> | ge <LEN> [ le <LEN> ] } | |||
5 | Перейти в режим настройки параметров RIPng-процесса. | esr(config)# ipv6 router rip esr(config-ripng)# | |
6 | Включить протокол RIPng. | esr(config-ripng)# enable | |
7 | Отключить анонсирование маршрутов на интерфейсах/туннелях/bridge, где это не нужно (не обязательно). | esr(config-ripng)# passive-interface {<IF> | <TUN>| <BR-NUM> } | <IF> – интерфейс и идентификатор; <BR-NUM> – номер bridge; <TUN> – имя и номер туннеля. |
8 | Установить временной интервал, по истечении которого производится анонсирование (не обязательно). | esr(config-ripng)# timers update <TIME> | <TIME> – время в секундах, принимает значения [12..65535]. Значение по умолчанию: 180 секунд. |
9 | Установить временной интервал корректности маршрутной записи без обновления (не обязательно). | esr(config-ripng)# timers invalid <TIME> | <TIME> – время в секундах, принимает значения [12..65535]. Значение по умолчанию: 180 секунд. |
10 | Установить временной интервал, по истечении которого производиться удаление маршрута (не обязательно). | esr(config-ripng)# timers flush <TIME> | <TIME> – время в секундах, принимает значения [12..65535]. При установке значения нужно учитывать следующее правило: «timersinvalid + 60» Значение по умолчанию: 240 секунд. |
11 | Включить анонсирование подсетей. | esr(config-ripng)# network <IPV6-ADDR/LEN> | <IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задаётся в виде X:X:X:X::X/EE, где каждая часть X принимает значения в шестнадцатеричном формате [0..FFFF] и EE принимает значения [1..128]. |
12 | Добавить фильтрацию подсетей во входящих или исходящих обновлениях (не обязательно). | esr(config-ripng)# prefix-list <PREFIX-LIST-NAME> { in | out } | <PREFIX-LIST-NAME> – имя сконфигурированного списка подсетей, задаётся строкой до 31 символа.
|
13 | Включить анонсирование маршрутов, полученных альтернативным способом (не обязательно). | esr(config-ripng)# redistribute static [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых статических маршрутов, задаётся строкой до 31 символа. |
esr(config-ripng)# redistribute connected [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых напрямую подключенных подсетей, задаётся строкой до 31 символа. | ||
esr(config-ripng)# redistribute ospf <ID><ROUTE-TYPE> [ route-map <NAME> ] | <ID> – номер процесса, может принимать значение [1..65535]; <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых OSPF-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-ripng)# redistribute isis <ID><ROUTE-TYPE> [ route-map <NAME> ] | <ID> – номер процесса, может принимать значение [1..65535]; <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых ISIS-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-ripng)# redistribute bgp <AS> [ route-map <NAME> ] | <AS> – номер автономной системы, может принимать значения [1..4294967295]; <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых BGP-маршрутов, задаётся строкой до 31 символа. | ||
14 | Перейти в режим конфигурирования интерфейса/туннеля/сетевого моста. | esr(config)# interface <IF-TYPE><IF-NUM> | <IF-TYPE> – тип интерфейса; <IF-NUM> – F/S/P – F-фрейм (1), S – слот (0), P – порт. |
esr(config)# tunnel <TUN-TYPE><TUN-NUM> | <TUN-TYPE> – тип туннеля; <TUN-NUM> – номер туннеля. | ||
esr(config)# bridge <BR-NUM> | <BR-NUM> – номер bridge. | ||
15 | Установить величину метрики RIPng-маршрутов на интерфейсе (не обязательно). | esr(config-if-gi)# ipv6 rip metric <VALUE> | <VALUE> – величина метрики, задаётся в размере [0..32767]. Значение по умолчанию: 5. |
16 | Включить суммаризацию подсетей (не обязательно). | esr(config-if-gi)# ipv6 rip summary-address <IPV6-ADDR/LEN> | <IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задаётся в виде X:X:X:X::X/EE, где каждая часть X принимает значения в шестнадцатеричном формате [0..FFFF] и EE принимает значения [1..128]. |
Пример настройки
Задача:
Настроить на маршрутизаторах протокол RIPng для обмена маршрутной информацией. Маршрутизаторы должны анонсировать адреса, присвоенные Loopback-интерфейсам.
Решение:
Предварительно нужно настроить IPv6-адреса на интерфейсах согласно схеме сети, приведенной выше.
На первом маршрутизаторе перейдем в режим конфигурирования протокола RIPng и укажем сети, которые будут анонсироваться протоколом:
ESR1(config)# ipv6 router rip ESR1(config-ripng)# network c00:0:1409:3900::1/128
На втором маршрутизаторе произведем аналогичные действия:
ESR2(config)# ipv6 router rip ESR2(config-ripng)# network c00:0:1409:3900::2/128
Активируем протокол RIPng на обоих маршрутизаторах:
ESR1(config-ripng)# enable ESR2(config-ripng)# enable
Проверяем распространение маршрутной информации:
ESR1# sh ipv6 route rip R * fc00:0:1409:3900::2/128 [100/2] via fe80::aaf9:4bff:fead:fed2 on gi1/0/1 [rip 06:01:33] ESR2# sh ipv6 route rip R * fc00:0:1409:3900::2/128 [100/2] via fe80::aaf9:4bff:fead:fed1 on gi1/0/1 [rip 06:01:33]
На этом базовая настройка протокола RIPng закончена.
Настройка OSPF
OSPF — протокол динамической маршрутизации, основанный на технологии отслеживания состояния канала (link-state technology) и использующий для нахождения кратчайшего пути алгоритм Дейкстры.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить приоритетность протокола OSPF-маршрутизации для основной таблицы маршрутизации (не обязательно). | esr(config)# ip protocols ospf preference <VALUE> | <VALUE> – приоритетность протокола, принимает значения в диапазоне [1..255]. Значение по умолчанию: 150. |
esr(config-vrf)# ip protocols ospf preference <VALUE> | |||
2 | Настроить емкость таблиц маршрутизации протокола OSPF (не обязательно). | esr(config)# ip protocols ospf max-routes <VALUE> | <VALUE> – количество маршрутов протокола OSPF в маршрутной таблице, принимает значения в диапазоне:
Значение по умолчанию для глобального режима:
Значение по умолчанию для VRF: 0. |
esr(config)# ipv6 protocols ospf max-routes <VALUE> | |||
3 | Включить вывод информации о состоянии отношений с соседями для протокола маршрутизации OSPF (не обязательно). | esr(config)# router ospf log-adjacency-changes | |
esr(config)# ipv6 router ospf log-adjacency-changes | |||
4 | Создать списки IP-подсетей, которые в дальнейшем будут использоваться для фильтрации анонсируемых и получаемых IP-маршрутов (не обязательно). | esr(config)# ip prefix-list <NAME> | <NAME> – имя конфигурируемого списка подсетей, задаётся строкой до 31 символа. |
esr(config)# ipv6 prefix-list <NAME> | |||
5 | Разрешить (permit) или запретить (deny) списки префиксов (не обязательно). | esr(config-pl)# permit [ { object-group <OBJ-GROUP-NETWORK-NAME> | <ADDR/LEN> | <IPV6-ADDR/LEN> } ] [ { eq <LEN> | le <LEN> | ge <LEN> [ le <LEN> ] } ] | <OBJ-GROUP-NETWORK-NAME> – имя профиля IPv4/IPv6-адресов, задаётся строкой до 31 символа; <ADDR> – IP-адрес, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <LEN> – длина префикса, принимает значения [1..32] в IP-списках префиксов;
|
esr(config-pl)# deny [ { object-group <OBJ-GROUP-NETWORK-NAME> | <ADDR/LEN > | <IPV6-ADDR/LEN> } ] [ { eq <LEN> | le <LEN> | ge <LEN> [ le <LEN> ] } ] | |||
6 | Добавить OSPF-процесс в систему и осуществить переход в режим настройки параметров OSPF-процесса. | esr(config)# router ospf <ID> [vrf <VRF>] | <ID> – номер автономной системы процесса, принимает значения [1..65535] <VRF> – имя экземпляра VRF, задается строкой до 31 символа, в рамках которого будет работать протокол маршрутизации. |
esr(config)# ipv6 router ospf <ID> [vrf <VRF>] | |||
7 | Установить идентификатор маршрутизатора для данного OSPF-процесса. | esr(config-ospf)# router-id { <ID> | <IF> | <TUN> } | <ID> – идентификатор маршрутизатора, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. <IF> – интерфейс, задаётся в виде, описанном в разделе <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. |
esr(config-ipv6-ospf)# router-id { <ID> | <IF> | <TUN> } | |||
8 | Определить приоритетность маршрутов процесса OSPF (не обязательно). | esr(config-ospf)# preference <VALUE> | <VALUE> – приоритетность маршрутов процесса OSPF, принимает значения в диапазоне [1..255]. |
esr(config-ipv6-ospf)# preference <VALUE> | |||
9 | Определить референсное значение для автоматического расчёта стоимости (cost) интерфейсов (не обязательно). | esr(config-ospf)# auto-cost reference bandwidth <VALUE> | <VALUE> – референсное значение для расчета стоимости интерфейса в диапазоне [1..100000000K]. Значение по умолчанию: 100000K. |
esr(config-ipv6-ospf)# auto-cost reference bandwidth <VALUE> | |||
10 | Определить максимальное количество равнозначных маршрутов до цели (не обязательно). | esr(config-ospf)# maximum-path <PATHS> | <PATHS> – количество равноценных маршрутов до цели, принимает значения в диапазоне [1..32]. Значение по умолчанию: 16. |
esr(config-ipv6-ospf)# maximum-path <PATHS> | |||
11 | Включить совместимость с RFC 1583 (не обязательно). | esr(config-ospf)# compatible rfc1583 | |
esr(config-ipv6-ospf)# compatible rfc1583 | |||
12 | Добавить фильтрацию подсетей во входящих или исходящих обновлениях (не обязательно). | esr(config-ospf)# prefix-list <PREFIX-LIST-NAME> { in | out } | <PREFIX-LIST-NAME> – имя сконфигурированного списка подсетей, задаётся строкой до 31 символа.
|
esr(config-ipv6-ospf)# prefix-list <PREFIX-LIST-NAME> { in | out } | |||
13 | Включить анонсирование маршрутов, полученных альтернативным способом (не обязательно). | esr(config-ospf)# redistribute static [metric <TYPE> <METRIC>] [ route-map <NAME> ] | <TYPE> – тип атрибута OSPF Metric, принимает значение type-1 и type-2; <METRIC> – значение атрибута OSPF Metric, принимает значения [0..65535]. <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых статических маршрутов, задаётся строкой до 31 символа. |
esr(config-ipv6-ospf)# redistribute static [metric <TYPE> <METRIC>] [route-map <NAME> ] | |||
esr(config-ospf)# redistribute connected [metric <TYPE> <METRIC>] [ route-map <NAME> ] | <TYPE> – тип атрибута OSPF Metric, принимает значение type-1 и type-2; <METRIC> – значение атрибута OSPF Metric, принимает значения [0..65535]. <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых напрямую подключенных подсетей, задаётся строкой до 31 символа. | ||
esr(config-ipv6-ospf)# redistribute connected [metric <TYPE> <METRIC>] [ route-map <NAME> ] | |||
esr(config-ospf)# redistribute rip [metric <TYPE> <METRIC>] [ route-map <NAME> ] | <TYPE> – тип атрибута OSPF Metric, принимает значение type-1 и type-2; <METRIC> – значение атрибута OSPF Metric, принимает значения [0..65535]. <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых RIP-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-ospf)# redistribute isis <ID> <ROUTE-TYPE> [metric <TYPE> <METRIC>] [ route-map <NAME> ] | <TYPE> – тип атрибута OSPF Metric, принимает значение type-1 и type-2; <METRIC> – значение атрибута OSPF Metric, принимает значения [0..65535]. <ID> – номер процесса, может принимать значение [1..65535]. <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых BGP-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-ipv6-ospf)# redistribute isis <ID> <ROUTE-TYPE> [ route-map <NAME> ] | |||
esr(config-ospf)# redistribute bgp <AS> [metric <TYPE> <METRIC>] [ route-map <NAME> ] | <TYPE> – тип атрибута OSPF Metric, принимает значение type-1 и type-2; <METRIC> – значение атрибута OSPF Metric, принимает значения [0..65535]. <AS> – номер автономной системы, может принимать значения [1..4294967295]; <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых BGP-маршрутов, задаётся строкой до 31 символа. | ||
14 | Активировать OSPF-процесс. | esr(config-ipv6-ospf)# redistribute bgp <AS> [metric <TYPE> <METRIC>] [ route-map <NAME> ] | |
esr(config-ipv6-ospf)# enable | |||
15 | Создать OSPF-область и перейти в режим конфигурирования области. | esr(config-ospf)# area <AREA_ID> | <AREA_ID> – идентификатор области, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
esr(config-ipv6-ospf)# area <AREA_ID> | |||
16 | Включить анонсирование подсетей (не обязательно). | esr(config-ospf-area)# network <ADDR/LEN> | <ADDR/LEN> – адрес подсети, указывается в следующем формате: AAA.BBB.CCC.DDD/EE – IP-адрес подсети с маской в форме префикса, где AAA-DDD принимают значения [0..255] и EE принимает значения [1..32]. |
esr(config-ipv6-ospf-area)# network <IPV6-ADDR/LEN> | <IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задаётся в виде X:X:X:X::X/EE, где каждая часть X принимает значения в шестнадцатеричном формате [0..FFFF] и EE принимает значения [1..128]. | ||
17 | Определить тип области (не обязательно). | esr(config-ospf-area)# area-type <TYPE> [ no-summary ] | <TYPE> – тип области:
|
esr(config-ipv6-ospf-area)# area-type <TYPE> [ no-summary ] | |||
18 | Включить генерацию маршрута по умолчанию для NSSA или stub-области и анонсирование его в качестве Type-7 или Type-3 LSA соответственно (не обязательно). | esr(config-ospf-area)# default-information-originate | |
esr(config-ipv6-ospf-area)# default-information-originate | |||
19 | Определить тип метрики маршрута по умолчанию для NSSA-области (не обязательно). | esr(config-ospf-area)# default-metric-type <TYPE> |
|
esr(config-ipv6-ospf-area)# default-metric-type <TYPE> | |||
20 | Активировать OSPF-область. | esr(config-ospf-area)# enable | |
esr(config-ipv6-ospf-area)# enable | |||
21 | Установить виртуальное соединение между основной и удаленными областями, имеющими между ними несколько областей (не обязательно). | esr(config-ospf-area)# virtual-link <ID> | <ID> – идентификатор маршрутизатора, с которым устанавливается виртуальное соединение, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
esr(config-ipv6-ospf-area)# virtual-link <ID> | |||
22 | Установить интервал времени в секундах, по истечении которого маршрутизатор повторно отправит пакет, который не получил подтверждения о получении (не обязательно). | esr(config-ospf- vlink)# restransmit-interval <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 5 секунд. |
esr(config-ipv6-ospf- vlink)# restransmit-interval <TIME> | |||
23 | Установить интервал времени в секундах, по истечении которого маршрутизатор отправляет следующий hello-пакет (не обязательно). | esr(config-ospf- vlink)# hello-interval <TIME>esr(config-bgp-neighbor)# fall-over bfd | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 10 секунд. |
esr(config-ipv6-ospf- vlink)# hello-interval <TIME> | |||
24 | Установить интервал времени в секундах, по истечении которого сосед будет считаться неактивным (не обязательно). Этот интервал должен быть кратным значению «hello-interval». | esr(config-ospf- vlink)# dead-interval <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Для (config-(ipv6)-ospf- vlink) - [2..65535] Значение по умолчанию: 40 секунд. |
esr(config-ipv6-ospf-vlink)# dead-interval <TIME> | |||
25 | Определяется интервал времени в секундах, по истечении которого маршрутизатор выберет DR в сети (не обязательно). | esr(config-ospf- vlink)# wait-interval <TIME> | <TIME> – время в секундах, принимает значения [2..65535]. |
esr(config-ipv6-ospf- vlink)# wait-interval <TIME> | |||
26 | Определить алгоритм аутентификации (не обязательно). | esr(config-ospf- vlink)# authentication algorithm <ALGORITHM> | <ALGORITHM> – алгоритм аутентификации:
|
27 | Установить пароль для аутентификации с соседом (не обязательно). | esr(config-ospf- vlink)# authentication key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой от 8 до 16 символов. <ENCRYPTED-TEXT> – зашифрованный пароль размером от 8 байт до 16 байт (от 16 до 32 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
28 | Определить список паролей для аутентификации через алгоритм хеширования md5 (не обязательно). | esr(config-ospf- vlink)# authentication key chain <KEYCHAIN> | <KEYCHAIN> – идентификатор списка ключей, задаётся строкой до 16 символов. |
29 | Активировать виртуальное соединение (не обязательно). | esr(config-ospf- vlink)# enable | |
30 | Перейти в режим конфигурирования интерфейса/туннеля/сетевого моста. | esr(config)# interface <IF-TYPE><IF-NUM> | <IF-TYPE> – тип интерфейса; <IF-NUM> – F/S/P – F-фрейм (1), S – слот (0), P – порт. |
esr(config)# tunnel <TUN-TYPE><TUN-NUM> | <TUN-TYPE> – тип туннеля; <TUN-NUM> – номер туннеля. | ||
esr(config)# bridge <BR-NUM> | <BR-NUM> – номер bridge. | ||
31 | Определить принадлежность интерфейса/туннеля/сетевого моста к определенному OSPF-процессу. | esr(config-if-gi)# ip ospf instance <ID> | <ID> – номер процесса, принимает значения [1..65535]. |
esr(config-if-gi)# ipv6 ospf instance <ID> | |||
32 | Определить принадлежность интерфейса к определенной области OSPF-процесса. | esr(config-if-gi)# ip ospf area <AREA_ID> | <AREA_ID> – идентификатор области, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
esr(config-if-gi)# ipv6 ospf area <AREA_ID> | |||
33 | Включить маршрутизацию по протоколу OSPF на интерфейсе. | esr(config-if-gi)# ip ospf | |
esr(config-if-gi)# ipv6 ospf | |||
34 | Включить режим, в котором OSPF-процесс будет игнорировать значение MTU интерфейса во входящих Database Description-пакетах (не обязательно). | esr(config-if-gi)# ip ospf mtu-ignore | |
esr(config-if-gi)# ipv6 ospf mtu-ignore | |||
35 | Определить алгоритм аутентификации протокола OSPF (не обязательно). | esr(config-if-gi)# ip ospf authentication algorithm <ALGORITHM> | <ALGORITHM> – алгоритм аутентификации:
|
36 | Установить пароль для аутентификации с OSPF-соседом при передаче пароля открытым текстом (не обязательно). | esr(config-if-gi)# ip ospf authentication key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой от 8 до 16 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером от 8 байт до 16 байт (от 16 до 32 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
37 | Определить список паролей для аутентификации по алгоритму хеширования md5 с соседом (не обязательно). | esr(config-if-gi)# ip ospf authentication key-chain <KEYCHAIN> | <KEYCHAIN> – идентификатор списка ключей, задаётся строкой до 16 символов. |
38 | Определить пропускную способность интерфейса для расчёта стоимости (cost) интерфейса (не обязательно). | esr(config-if-gi)# ip ospf bandwidth <VALUE> | <VALUE> – пропускная способность интерфейса, принимает значения [1..100000000K]. |
esr(config-if-gi)# ipv6 ospf bandwidth <VALUE> | |||
39 | Определить интервал времени в секундах, по истечении которого маршрутизатор выберет DR в сети (не обязательно). | esr(config-if-gi)# ip ospf wait-interval <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 40 секунд. |
esr(config-if-gi)# ipv6 ospf wait-interval <TIME> | |||
40 | Установить интервал времени в секундах, по истечении которого маршрутизатор повторно отправит пакет, на который не получил подтверждения о получении (не обязательно). | esr(config-if-gi)# ip ospf restransmit-interval <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 5 секунд. |
esr(config-if-gi)# ipv6 ospf restransmit-interval <TIME> | |||
41 | Установить интервал времени в секундах, по истечении которого маршрутизатор отправляет следующий hello-пакет (не обязательно). | esr(config-if-gi)# ip ospf hello-interval <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 10 секунд. |
esr(config-if-gi)# ipv6 ospf hello-interval <TIME> | |||
42 | Установить интервал времени в секундах, по истечении которого сосед будет считаться неактивным (не обязательно). Этот интервал должен быть кратным значению hello-interval. | esr(config-if-gi)# ip dead-interval <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 40 секунд. |
esr(config-if-gi)# ipv6 dead-interval <TIME> | |||
43 | Установить интервал времени, в течение которого NBMA-интерфейс ждет, прежде чем отправить hello-пакет соседу, даже в случае, если сосед неактивен (не обязательно). | esr(config-if-gi)# ip poll-interval <TIME> | <TIME> – время в секундах, принимает значения [1 .. 65535]. Значение по умолчанию: 120 секунд. |
esr(config-if-gi)# ipv6 poll-interval <TIME> | |||
44 | Задать статический IP-адрес соседа для установления отношения в NMBA и P2MP (Point-to-MultiPoint) сетях (не обязательно). | esr(config-if-gi)# ip ospf neighbor <IP> [ eligible ] | <IP> – IP-адрес соседа, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. eligible – опциональный параметр, позволяет устройству участвовать в процессе выбора DR в NBMA-сетях. Приоритет интерфейса должен быть больше нуля. |
esr(config-if-gi)# ip ospf neighbor <IP> [ eligible ] | <IPV6-ADDR> – IPv6-адрес соседа, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]; eligible – опциональный параметр, позволяет устройству участвовать в процессе выбора DR в NBMA-сетях. Приоритет интерфейса должен быть больше нуля. | ||
45 | Определить тип сети для установления OSPF-соседства (не обязательно). | esr(config-if-gi)# ip ospf network <TYPE> | <TYPE> – тип сети:
Значение по умолчанию: broadcast. |
esr(config-if-gi)# ipv6 ospf network <TYPE> | |||
46 | Перевести интерфейс в пассивный режим работы. В этом режиме не рассылаются hello-пакеты, не устанавливаются отношения соседства, но подключенная сеть анонсируется соседям (не обязательно). | esr(config-if-gi)# ip ospf passive-interface | |
esr(config-if-gi)# ipv6 ospf passive-interface | |||
47 | Установить приоритет маршрутизатора, который используется для выбора DR и BDR (не обязательно). | esr(config-if-gi)# ip ospf priority <VALUE> | <VALUE> – приоритет интерфейса, принимает значения [1..65535]. Значение по умолчанию: 120. |
esr(config-if-gi)# ipv6 ospf priority <VALUE> | |||
48 | Установить величину метрики на интерфейсе или туннеле (не обязательно). | esr(config-if-gi)# ip ospf cost <VALUE> | <VALUE> – величина метрики, задаётся в размере [0..32767]. Значение по умолчанию: 10. |
esr(config-if-gi)# ipv6 ospf cost <VALUE> | |||
49 | Включить протокол BFD для протокола OSPF (не обязательно). | esr(config-if-gi)# ip ospf bfd-enable | |
esr(config-if-gi)# ipv6 ospf bfd-enable | |||
50 | Включить механизм ttl-security hops (не обязательно). | esr(config-if-gi)# ip ospf ttl-security-hops <VALUE> | <VALUE> – значение ttl, задаётся в размере [1..255]. Значение по умолчанию: 0. |
esr(config-if-gi)# ipv6 ospf ttl-security-hops <VALUE> |
Пример настройки
Задача:
Настроить протокол OSPF на маршрутизаторе для обмена маршрутной информацией с соседними маршрутизаторами. Маршрутизатор должен находиться в области с идентификатором 1.1.1.1 и анонсировать маршруты, полученные по протоколу RIP.
Решение:
Предварительно нужно настроить IP-адреса на интерфейсах согласно схеме, приведенной на рисунке.
Создадим OSPF-процесс с идентификатором 10 и перейдём в режим конфигурирования протокола OSPF:
esr(config)# router ospf 10
Создадим и включим требуемую область:
esr(config-ospf)# area 1.1.1.1 esr(config-ospf-area)# enable esr(config-ospf-area)# exit
Включим анонсирование маршрутной информации из протокола RIP:
esr(config-ospf)# redistribute rip
Включим OSPF-процесс:
esr(config-ospf)# enable esr(config-ospf)# exit
Соседние маршрутизаторы подключены к интерфейсам gi1/0/5 и gi1/0/15. Для установления соседства с другими маршрутизаторами привяжем их к OSPF-процессу и области. Далее включим на интерфейсе маршрутизацию по протоколу OSPF:
esr(config)# interface gigabitethernet 1/0/5 esr(config-if-gi)# ip ospf instance 10 esr(config-if-gi)# ip ospf area 1.1.1.1 esr(config-if-gi)# ip ospf esr(config-if-gi)# exit
esr(config)# interface gigabitethernet 1/0/15 esr(config-if-gi)# ip ospf instance 10 esr(config-if-gi)# ip ospf area 1.1.1.1 esr(config-if-gi)# ip ospf esr(config-if-gi)# exit esr(config)# exit
Пример настройки OSPF stub area
Задача:
Изменить тип области 1.1.1.1, область должна быть тупиковой.
Решение:
Предварительно нужно настроить протокол OSPF и IP-адреса на интерфейсах согласно схеме, приведенной на рисунке.
Изменим тип области на тупиковый. На каждом маршрутизаторе из области 1.1.1.1 в режиме конфигурирования области выполним команду:
esr(config-ospf-area)# area-type stub
Пример настройки Virtual link
Задача:
Объединить две магистральные области в одну с помощью virtual link.
Решение:
В firewall необходимо разрешить протокол OSPF (89).
Virtual link — это специальное соединение, которое позволяет соединять разорванную на части зону или присоединить зону к магистральной через другую зону. Настраивается между двумя пограничными маршрутизаторами зоны (Area Border Router, ABR).
Предварительно нужно настроить протокол OSPF и IP-адреса на интерфейсах согласно схеме, приведенной на рисунке.
На маршрутизаторе R1 перейдем в режим конфигурирования области 1.1.1.1:
esr(config-ospf)# area 1.1.1.1
Создадим virtual link с идентификатором 0.0.0.3 и включим его:
esr(config-ospf-area)# virtual-link 0.0.0.3 esr(config-ospf-vlink)# enable
На маршрутизаторе R3 перейдем в режим конфигурирования области 1.1.1.1:
esr(config-ospf)# area 1.1.1.1
Создадим virtual link с идентификатором 0.0.0.1 и включим его:
esr(config-ospf-area)# virtual-link 0.0.0.1 esr(config-ospf-vlink)# enable
Рассмотрим таблицу маршрутизации на маршрутизаторе R1:
esr# show ip route C * 10.0.0.0/24 [0/0] dev gi1/0/12, [direct 00:49:34] O * 10.0.1.0/24 [150/20] via 10.0.0.1 on gi1/0/12, [ospf1 00:49:53] (0.0.0.3) O * 192.168.20.0/24 [150/30] via 10.0.0.1 on gi1/0/12, [ospf1 00:50:15] (0.0.0.3) C * 192.168.10.0/24 [0/0] dev lo1, [direct 21:32:01]
Рассмотрим таблицу маршрутизации на маршрутизаторе R3:
esr# show ip route O * 10.0.0.0/24 [150/20] via 10.0.1.1 on gi1/0/12, [ospf1 14:38:35] (0.0.0.2) C * 10.0.1.0/24 [0/0] dev gi1/0/12, [direct 14:35:34] C * 192.168.20.0/24 [0/0] dev lo1, [direct 14:32:58] O * 192.168.10.0/24 [150/30] via 10.0.1.1 on gi1/0/12, [ospf1 14:39:54] (0.0.0.1)
Так как OSPF считает виртуальный канал частью области, в таблице маршрутизации R1 маршруты, полученные от R3, отмечены как внутризоновые и наоборот.
Для просмотра соседей можно воспользоваться следующей командой:
esr# show ip ospf neighbors 10
Таблицу маршрутов протокола OSPF можно просмотреть командой:
esr# show ip ospf 10
Настройка BGP
Протокол BGP предназначен для обмена информацией о достижимости подсетей между автономными системами (далее АС), то есть группами маршрутизаторов под единым техническим управлением, использующими протокол внутридоменной маршрутизации для определения маршрутов внутри себя и протокол междоменной маршрутизации для определения маршрутов доставки пакетов в другие АС. Передаваемая информация включает в себя список АС, к которым имеется доступ через данную систему. Выбор наилучших маршрутов осуществляется исходя из правил, принятых в сети.
Алгоритм настройки
Для установлении BGP-сессии необходимо в firewall разрешить TCP-порт 179.
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить приоритетность протокола BGP-маршрутизации для основной таблицы маршрутизации (не обязательно). | esr(config)# ip protocols bgp preference <VALUE> | <VALUE> – приоритетность протокола, принимает значения в диапазоне [1..255]. Значение по умолчанию: BGP (170). |
2 | Настроить емкость таблиц маршрутизации протокола BGP (не обязательно при использовании глобальной таблицы маршрутизации). | esr(config)# ip protocols bgp max-routes <VALUE> | <VALUE> – количество маршрутов протокола BGP в маршрутной таблице, принимает значения в диапазоне:
Значение по умолчанию для глобальной таблицы маршрутизации:
Значение по умолчанию для VRF: 0. |
esr(config)# ipv6 protocols bgp max-routes <VALUE> | |||
esr(config-vrf)# ip protocols bgp max-routes <VALUE> | |||
esr(config-vrf)# ipv6 protocols bgp max-routes <VALUE> | |||
3 | Включить вывод информации о состоянии отношений с соседями для протокола маршрутизации BGP (не обязательно). | esr(config)# router bgp log-neighbor-changes | |
esr(config)# ipv6 router bgp log-neighbor-changes | |||
4 | Включить ECMP и определяется максимальное количество равноценных маршрутов до цели. | esr(config)# router bgp maximum-paths <VALUE> | <VALUE> – количество допустимых равноценных маршрутов до цели, принимает значения [1..16]. |
5 | Выбрать метод фильтрации для передаваемой информации между роутерами (обязательно при конфигурировании eBGP для анонсирования подсетей). | ||
5.1.1 | При выборе метода фильтрации на основе route-map создать список правил, который в дальнейшем будет использоваться для фильтрации анонсируемых и получаемых IP-маршрутов. | esr(config)# route-map <NAME> | <NAME> – имя конфигурируемых правил маршрутизации, задаётся строкой до 31 символа. |
5.1.2 | Создать правило. | (config-route-map)# rule <ORDER> | <ORDER> – номер правила, принимает значения [1 .. 10000]. |
5.1.3 | Определить список подсетей, которые затрагиваются правилом. | esr(config-route-map-rule)#match ip address { <ADDR/LEN> | object-group <OBJ-GRP-NETNAME> } [ { eq <LEN> | le <LEN> | ge <LEN 1> [ le <LEN 2> ] } ] | <ADDR/LEN> – IP-адрес и маска подсети, задается в виде:
<IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задается в виде:
<OBJ-GRP-NETNAME> – имя профиля IP-адресов, задаётся строкой до 31 символа. При использовании фильтрации по object-group их необходимо создать заранее; <LEN>, <LEN 1>, <LEN 2> – длина префикса, принимает значения [1..32] в IP-списках префиксов для IPv4 и [1..128] для IPv6; eq – при указании команды длина префикса должна соответствовать указанной; le – при указании команды длина префикса должна быть меньше либо соответствовать указанной; ge – при указании команды длина префикса должна быть больше либо соответствовать указанной; ge <LEN 1> le <LEN 2> – при указании команды длина префикса должна быть больше либо соответствовать <LEN>, но меньше или равна <LEN1>. |
esr(config-route-map-rule)#match ipv6 address { <IPV6-ADDR/LEN> | object-group <OBJ-GRP-NETNAME> } [ { eq <LEN> | le <LEN> | ge <LEN 1> [ le <LEN 2> ] } ] | |||
5.1.4 | Разрешить (permit) или запретить (deny) действие для указанных подсетей в правиле. | esr(config-route-map-rule)# action {deny | permit} | |
5.2.1 | При выборе метода фильтрации на основе префикс-листов создать списки IP-подсетей, которые в дальнейшем будут использоваться для фильтрации анонсируемых и получаемых IP-маршрутов. | esr(config)# ip prefix-list <NAME> | <NAME> – имя конфигурируемого списка подсетей, задаётся строкой до 31 символа. |
esr(config)# ipv6 prefix-list <NAME> | |||
5.2.2 | Разрешить (permit) или запретить (deny) списки префиксов. | esr(config-pl)# permit { <ADDR/LEN> | object-group <OBJ-GRP-NETNAME>} [ { eq <LEN> | le <LEN> | ge <LEN 1> [ le <LEN 2> ] } ] | <ADDR/LEN> – IP-адрес и маска подсети, задается в виде:
<IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задаётся в виде:
<OBJ-GRP-NETNAME> – имя профиля IP-адресов, задаётся строкой до 31 символа. При использовании фильтрации по object-group их необходимо создать заранее; <LEN>, <LEN 1>, <LEN 2> – длина префикса, принимает значения [1..32] в IP-списках префиксов для IPv4 и [1..128] для IPv6; eq – при указании команды длина префикса должна соответствовать указанной; le – при указании команды длина префикса должна быть меньше либо соответствовать указанной; ge – при указании команды длина префикса должна быть больше либо соответствовать указанной; ge <LEN 1> le <LEN 2> – при указании команды длина префикса должна быть больше либо соответствовать <LEN> но меньше или равна <LEN1>. |
esr(config-pl)# deny {<ADDR/LEN> | object-group <OBJ-GRP-NETNAME>} [ { eq <LEN> | le <LEN> | ge <LEN 1> [ le <LEN 2> ] } ] | |||
esr(config-ipv6-pl)# permit { <IPV6-ADDR/LEN> | object-group <OBJ-GRP-NETNAME>} [ { eq <LEN> | le <LEN> | ge <LEN 1> [ le <LEN 2> ] } ] | |||
esr(config-ipv6-pl)# deny {<IPV6-ADDR/LEN> | object-group <OBJ-GRP-NETNAME> } [ { eq <LEN> | le <LEN> | ge <LEN 1> [ le <LEN 2> ] } ] | |||
6 | Добавить BGP-процесс в систему и осуществить переход в режим настройки параметров BGP-процесса. | esr(config)# router bgp <AS> | <AS> – номер автономной системы процесса, принимает значения [1..4294967295]. |
7 | Установить идентификатор маршрутизатора. | esr(config-bgp)# router-id { <ID> | <IF> | <TUN> } | <ID> – идентификатор маршрутизатора, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. <IF> – интерфейс, задаётся в виде, описанном в разделе <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. |
8 | Установить идентификатор Route-Reflector кластера, которому принадлежит BGP-процесс маршрутизатора (при необходимости). | esr(config-bgp)# cluster-id <ID> | <ID> – идентификатор Route-Reflector кластера, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
9 | Включить генерацию и отправку маршрута по умолчанию, если маршрут по умолчанию есть в таблице маршрутизации FIB (не обязательно). | esr(config-bgp)# default-information-originate | |
10 | Установить временной интервал, по истечении которого идет проверка соединения со встречной стороной (не обязательно). | esr(config-bgp-af)# timers keeaplive <TIME> | <TIME> – время в секундах, принимает значения [1..32767]. Значение по умолчанию: 60 секунд. |
11 | Установить временной интервал, по истечении которого встречная сторона считается недоступной (не обязательно). | esr(config-bgp-af)# timers holdtime <TIME> | <TIME> – время в секундах, принимает значения [2..65535]. Значение по умолчанию: 180 секунд. |
12 | Установить время минимальной и максимальной задержки, в течение которого запрещено устанавливать соединение, в целях защиты от частых разрывов соединения (не обязательно). | esr(config-bgp)# timers error-wait <TIME1> <TIME2> | <TIME1> – время минимальной задержки в секундах, принимает значения [1..65535]; <TIME2> – время максимальной задержки в секундах, принимает значения [1..65535]. |
13 | Определить глобальный алгоритм аутентификации с соседями (при необходимости). | esr(config-bgp)# authentication algorithm <ALGORITHM> | <ALGORITHM> – алгоритм шифрования:
Значение по умолчанию: шифрование не используется. |
14 | Установить глобальный пароль для аутентификации с соседями (используется совместно с "authentication algorithm"). | esr(config-bgp)# authentication key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой от 8 до 16 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером от 8 байт до 16 байт (от 16 до 32 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
15 | Активировать BGP-процесс. | esr(config-bgp)# enable | |
16 | Определить тип конфигурируемой маршрутной информации и перейти в данный режим настройки. | esr(config-bgp)# address-family { ipv4 | ipv6 } unicast | ipv 4 – семейство IPv4; ipv 6 – семейство IPv6. |
17 | Включить анонсирование маршрутов процессом BGP полученных альтернативным образом (при необходимости). | esr(config-bgp-af)# redistribute static [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых статических маршрутов, задаётся строкой до 31 символа. |
esr(config-bgp-af)# redistribute connected [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых напрямую подключенных подсетей, задаётся строкой до 31 символа. | ||
esr(config-bgp-af)# redistribute rip [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых RIP-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-bgp-af)# redistribute ospf <ID> <ROUTE-TYPE 1> [<ROUTE-TYPE 2>] [<ROUTE-TYPE 3>] [<ROUTE-TYPE 4>] [ route-map <NAME> ] | <ID> – номер процесса, может принимать значение {1..65535}; <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых OSPF-маршрутов, задаётся строкой до 31 символа. | ||
esr(config-bgp-af)# redistribute bgp <AS> [ route-map <NAME> ] | <AS> – номер автономной системы, может принимать значения [1..4294967295]; <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых BGP-маршрутов, задаётся строкой до 31 символа. | ||
18 | Включить анонсирование подсетей. | esr(config-bgp-af)# network <ADDR/LEN> [ route-map <NAME> ] | <ADDR/LEN> – адрес подсети, указывается в одном из следующих формате:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых BGP-маршрутов, задаётся строкой до 31 символа. |
19 | Осуществить выход из режима глобального конфигурирования анонсов маршрутной информации процесса BGP | esr(config-bgp-af)# exit | |
20 | Добавить BGP-соседа и осуществить переход в режим настройки параметров BGP-соседа. | esr(config-bgp)# neighbor <ADDR>|<IPV6-ADDR> | <ADDR> – IP-адрес соседа, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <IPV6-ADDR> – IPv6-адрес клиента, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]. |
21 | Задать описание соседа (не обязательно). | esr(config-bgp-neighbor)# description <DESCRIPTION> | <DESCRIPTION> – описание соседа, задаётся строкой до 255 символов. |
22 | Установить временной интервал, по истечении которого идет проверка соединения со встречной стороной | esr(config-bgp-neighbor)# timers keepalive <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 60 секунд. |
23 | Установить временной интервал, по истечении которого встречная сторона считается недоступной (не обязательно). | esr(config-bgp- neighbor)# timers holdtime <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 180 секунд. |
24 | Установить время минимальной и максимальной задержки, в течение которого запрещено устанавливать соединение, в целях защиты от частых разрывов соединения (не обязательно). | esr(config-bgp)# timers error-wait <TIME1> <TIME2> | <TIME1> – время минимальной задержки в секундах, принимает значения [1..65535]; <TIME2> – время максимальной задержки в секундах, принимает значения [1..65535]. Значение по умолчанию: 60 и 300 секунд. |
25 | Установить номер автономной системы BGP-соседа. | esr(config-bgp-neighbor)# remote-as <AS> | <AS> – номер автономной системы, принимает значения [1..4294967295]. |
26 | Разрешить подключение к соседям, которые находятся не в напрямую подключенных подсетях (не обязательно). | esr(config-bgp-neighbor)# ebgp-multihop <NUM> | <NUM> – максимальное количество хопов при установке EBGP (используется для TTL). |
27 | Указать, что BGP-сосед является Route-Reflector клиентом (не обязательно). | esr(config-bgp-neighbor)# route-reflector-client | |
28 | Задать IP/IPv6-адрес маршрутизатора, который будет использоваться в качестве IP/IPv6-адреса источника в отправляемых обновлениях маршрутной информации BGP (не обязательно). | esr(config-bgp-neighbor)# update-source { <ADDR> | <IPV6-ADDR> | <IF> | <TUN> } | <ADDR> – IP-адрес источника, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <IPV6-ADDR> – IPv6-адрес источника, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]. <IF> – интерфейс, задаётся в виде, описанном в разделе <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. |
29 | Включить режим, в котором разрешен приём маршрутов в BGP-атрибуте, AS Path которых содержит номера автономной системы процесса (не обязательно). | esr(config-bgp-neighbor)# allow-local-as <NUMBER> | <NUMBER> – пороговое число вхождений номера автономной системы процесса в атрибуте AS Path, при которых маршрут будет принят, диапазон допустимых значений [1..10]. |
30 | Включить BFD-протокол на конфигурируемом BGP-соседе (не обязательно, используется совместно с параметром update-source). | esr(config-bgp-neighbor)# bfd-enable | |
31 | Определить алгоритм аутентификации с соседом (не обязательно). | esr(config-bgp-neighbor)# authentication algorithm <ALGORITHM> | <ALGORITHM> – алгоритм шифрования: md5 – пароль шифруется по алгоритму md5. |
32 | Установить пароль для аутентификации с соседом (не обязательно). | esr(config-bgp-neighbor)# authentication key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой от 8 до 16 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером от 8 байт до 16 байт (от 16 до 32 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
33 | Сделать соседство активным. | esr(config-bgp-neighbor)# enable | |
34 | Определить тип конфигурируемой маршрутной информации соседа и перейти в данный режим настройки. | esr(config-bgp-neighbor)# address-family { ipv4 | ipv6 | vpnv4 } unicast | ipv 4 – семейство IPv4; ipv 6 – семейство IPv6; vpnv4 – семейство VPNv4. |
35 | При выборе режима фильтрации на основе префикс-листов добавить фильтрацию подсетей во входящих или исходящих обновлениях (обязательно при конфигурировании eBGP для анонсирования подсетей). | esr(config-bgp-neighbor-af)# prefix-list <PREFIX-LIST-NAME> { in | out } | <PREFIX-LIST-NAME> – имя сконфигурированного списка подсетей, задаётся строкой до 31 символа. in – фильтрация входящих маршрутов; out – фильтрация анонсируемых маршрутов. |
36 | Задать режим, в котором BGP-соседу в обновлении на ряду с другими маршрутами всегда отправляется маршрут по умолчанию. (не обязательно, отсутствует для vpnv4). | esr(config-bgp-neighbor-af)# default-originate | |
37 | Задать режим, в котором все обновления отправляются BGP-соседу с указанием в качестве next-hop IP-адреса исходящего интерфейса локального маршрутизатора. По умолчанию изменяет next-hop только eBGP-маршрутов (не обязательно, отсутствует для vpnv4). | esr(config-bgp-neighbor-af)# next-hop-self [ all ] | all – заменить next-hop для eBGP-, iBGP-маршрутов. |
38 | Определить приоритетность маршрутов, получаемых от соседа (не обязательно). | esr(config-bgp-neighbor-af)# preference <VALUE> | <VALUE> – приоритетность маршрутов соседа, принимает значения в диапазоне [1..255]. Значение по умолчанию: 170. |
39 | Задать режим, в котором перед отправлением обновления из BGP-атрибута AS Path маршрутов удаляются приватные номера автономных систем (в соответствии с RFC 6996) (не обязательно, отсутствует для vpnv4). | esr(config-bgp-neighbor-af)# remove-private-as [ { all | nearest | replace } ] | all – удалить все частные номера AS из AS-path; nearest – заменить ближайшие частные AS в AS-path на рядом стоящую публичную AS; replace – заменить все частные номера AS номером текущего процесса BGP. Значение по умолчанию: all. |
40 | Включить обмен маршрутной информацией. | esr(config-bgp-neighbor-af)# enable | |
41 | Задать режим, в котором маршрутизатор будет представляться указанным номером автономной системы вместо реального номера автономной системы (не обязательно). | esr(config-bgp-neighbor)# local-as <AS> | <AS> – номер автономной системы, принимает значения [1..4294967295]. |
42 | Не добавлять указанный в local-as номер автономной системы в AS-Path при приёме маршрута (не обязательно). | esr(config-bgp-local-as)# no-prepend | |
43 | Добавлять в AS-Path только номер автономной системы, указанный в local-as (не обязательно). | esr(config-bgp-local-as)# replace-as | |
44 | Включить агрегирование маршрутной информации (не обязательно). | esr(config-bgp)# aggregate-address { <ADDR/LEN> | <IPV6-ADDR/LEN } | <ADDR/LEN> – IP-адрес и маска подсети, задается в виде:
<IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задается в виде:
|
45 | Задать route-map для установки дополнительных условий агрегирования маршрутов (не обязательно). | esr(config-bgp-aggregate)# advertise-map [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для задания условий агрегирования BGP-маршрутов, задаётся строкой до 31 символа. |
46 | Добавлять в AS-Path агрегированного маршрута номера автономных систем из AS-Path его компонентов (не обязательно). | esr(config-bgp-aggregate)# as-set | |
47 | Задать route-map для установки дополнительных атрибутов агрегированного маршрута (не обязательно). | esr(config-bgp-aggregate)# attribute-map [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для задания атрибутов агрегированного BGP-маршрута, задаётся строкой до 31 символа. |
48 | Подавлять все компоненты агрегированного маршрута (не обязательно). | esr(config-bgp-aggregate)# summary-only | |
49 | Задать route-map для подавления компонентов агрегированного маршрута (не обязательно). | esr(config-bgp-aggregate)# suppress-map [ route-map <NAME> ] | <NAME> – имя маршрутной карты, которая будет использоваться для задания подавляемых компонентов агрегированного BGP-маршрута, задаётся строкой до 31 символа. |
50 | Задать возможность динамически устанавливать BGP-сессию без указания конкретного адреса соседа. Соседство может быть установлено с любым адресом, попадающим в указанную подсеть (не обязательно). | esr(config-bgp-aggregate)# listen-range { <ADDR/LEN> | <IPV6-ADDR/LEN } | <ADDR/LEN> – IP-адрес и маска подсети, задается в виде:
<IPV6-ADDR/LEN> – IPv6-адрес и маска подсети, задается в виде:
|
51 | Разрешить возможность динамической установки BGP-сессии только с соседями, которые имеют определённые номера AS. | esr(config-bgp-listen)# as-range <AS-PATH> | <AS-PATH> – список номеров автономных систем, задается в виде AS-AS,AS,AS-AS, принимает значения [1..4294967295]. |
Часто бывает, особенно при конфигурировании iBGP, что в одном bgp-процессе необходимо настроить несколько bgp neighbor с одинаковыми параметрами. Во избежание избыточности конфигурации рекомендуется использовать bgp peer-group, в которой возможно описать общие параметры, а в конфигурации bgp neighbor просто указать причастность к bgp peer-group.
Пример настройки
Задача:
Настроить BGP-протокол на маршрутизаторе R3 со следующими параметрами:
- собственные подсети: 80.66.0.0/24, 80.66.16.0/24;
- анонсирование подсетей, подключенных напрямую;
- собственная AS 2500;
- первое соседство – подсеть 219.0.0.0/30, собственный IP-адрес 219.0.0.1, IP-адрес соседа 219.0.0.2, AS2500;
- второе соседство – подсеть 185.0.0.0/30, собственный IP-адрес 185.0.0.1, IP-адрес соседа 185.0.0.2, AS20.
Решение:
Сконфигурируем необходимые сетевые интерфейсы:
esr-R3(config)# interface gigabitethernet 1/0/1 esr-R3(config-if-gi)# ip address 185.0.0.1/30 esr-R3(config-if-gi)# exit esr-R3(config)# interface gigabitethernet 1/0/2 esr-R3(config-if-gi)# ip address 219.0.0.1/30 esr-R3(config-if-gi)# exit esr-R3(config)# interface gigabitethernet 1/0/3 esr-R3(config-if-gi)# ip address 80.66.0.1/24 esr-R3(config-if-gi)# exit esr-R3(config)# interface gigabitethernet 1/0/4 esr-R3(config-if-gi)# ip address 80.66.16.1/24 esr-R3(config-if-gi)# exit
Сконфигурируем firewall для приема маршрутизатором BGP-трафика из зоны безопасности WAN:
esr-R3(config)# object-group service og_bgp esr-R3(config-object-group-service)# port-range 179 esr-R3(config-object-group-service)# exit esr-R3(config)# security zone wan esr-R3(config-zone)# exit esr-R3(config)# security zone-pair wan self esr-R3(config-zone-pair)# rule 100 esr-R3(config-zone-pair-rule)# match protocol tcp esr-R3(config-zone-pair-rule)# match destination-port og_bgp esr-R3(config-zone-pair-rule)# action permit esr-R3(config-zone-pair-rule)# enable esr-R3(config-zone-pair-rule)# exit esr-R3(config-zone-pair)# exit
И укажем принадлежность интерфейсов к зоне безопасности:
esr-R3(config)# interface gigabitethernet 1/0/1 esr-R3(config-if-gi)# security-zone wan esr-R3(config-if-gi)# exit esr-R3(config)# interface gigabitethernet 1/0/2 esr-R3(config-if-gi)# security-zone wan esr-R3(config-if-gi)# exit
Создадим route-map, который будет использоваться в дальнейшем при настройке разрешающих анонсов роутерам из другой AS:
esr-R3(config)# route-map bgp-general esr-R3(config-route-map)# rule 1 esr-R3(config-route-map-rule)# match ip address 80.66.0.0/24 esr-R3(config-route-map-rule)# action permit esr-R3(config-route-map-rule)# exit esr-R3(config-route-map)# rule 2 esr-R3(config-route-map-rule)# match ip address 80.66.16.0/24 esr-R3(config-route-map-rule)# action permit esr-R3(config-route-map-rule)# exit esr-R3(config-route-map)# exit
Создадим BGP процесс для AS 2500 и войдем в режим конфигурирования параметров процесса:
esr(config)# router bgp 2500
Сконфигурируем анонсирование подсетей, подключенных напрямую:
esr-R3(config-bgp)# address-family ipv4 unicast esr-R3(config-bgp-af)# redistribute connected esr-R3(config-bgp-af)# exit
Создадим соседство с роутером R2 по iBGP:
esr-R3(config-bgp)# neighbor 219.0.0.2 esr-R3(config-bgp-neighbor)# remote-as 2500 esr-R3(config-bgp-neighbor)# enable
И включим обмен IPv4-маршрутами:
esr-R3(config-bgp-neighbor)# address-family ipv4 unicast esr-R3(config-bgp-neighbor-af)# enable esr-R3(config-bgp-neighbor-af)# exit esr-R3(config-bgp-neighbor)# exit
Создадим соседство с роутером R1 по eBGP:
esr-R3(config-bgp)# neighbor 185.0.0.2 esr-R3(config-bgp-neighbor)# remote-as 20 esr-R3(config-bgp-neighbor)# enable
И включим обмен IPv4-маршрутами, разрешив необходимые маршруты для анонса при помощи заранее подготовленного route-map:
esr-R3(config-bgp-neighbor)# address-family ipv4 unicast esr-R3(config-bgp-neighbor-af)# route-map bgp-general out esr-R3(config-bgp-neighbor-af)# enable esr-R3(config-bgp-neighbor-af)# exit esr-R3(config-bgp-neighbor)# exit
Включим работу протокола:
esr-R3(config-bgp)# enable esr-R3(config-bgp)# exit
Информацию о BGP-пирах можно посмотреть командой:
esr# show bgp neighbors
Таблицу маршрутов протокола BGP можно просмотреть с помощью команды:
esr# show bgp ipv4 unicast
Политика выбора лучшего маршрута в протоколе BGP
В процессе работы BGP обычно вычисляет один лучший маршрут до каждой полученной подсети. Если нет более приоритетного маршрута, полученного при помощи другого протокола маршрутизации до этой подсети, то маршрут устанавливается в таблицу маршрутизации.
Если включен механизм ECMP ( router bgp maximum-paths .. ), то в таблицу маршрутизации могут попасть до 16 активных маршрутов до одной подсети.
При анонсировании BGP пирам будут использоваться атрибуты лучшего маршрута.
Ниже приведен алгоритм выбора лучшего маршрута в протоколе BGP:
Алгоритм применяется для следующих address family: unicast IPv4, unicast IPv6, VPNv4 unicast, VPLS.
Для VPNv4 маршрутов выбор лучшего маршрута происходит следующим образом:
Сначала выбор лучшего маршрута происходит в рамках своего RD, затем в рамках VRF, куда он попадет в соответствии со своим RT.
Прежде всего проверяется доступность next-hop-a у маршрута. Next-hop считается доступным, если до него можно определить connected-маршрут.
- Маршрут, помеченный как «stale», является менее приоритетным, чем маршрут без таковой метки. Маршрут помечается как «stale» в процессе работы технологии LLGR;
- Сравнивается значение атрибута Weight – лучшим становится маршрут, имеющий большее значение;
- Сравнивается значение атрибута Local preferences – лучшим становится маршрут, имеющий большее значение;
- Сравнивается длина AS-path – маршрут с меньшим количеством hop-ов становится лучшим;
- Сравнивается значение атрибута Origin – IGP является самым приоритетным. EGP приоритетнее, чем Incomplete;
- Для маршрутов, принятых от одной и той же автономной системы, сравнивается значение атрибута multiple exit discriminator (MED) – наименьшее значение атрибута имеет больший приоритет;
- Маршрут, полученный от EBGP-пира, имеет больший приоритет по сравнению с маршрутом, полученным от IBGP-пира;
- Сравнивается IGP-метрика сети, через который доступен маршрут – наименьшее значение имеет больший приоритет;
8.1 Если включен ECMP, то дальнейших сравнений не производится и маршрут (multipath) попадет в таблицу маршрутизации; - Сравнивается параметр Router-Id – маршрут, полученный от BGP-соседа с наименьшим Router-Id, является приоритетным. При наличии атрибута Originator ID будет учитываться Router-id источника маршрута;
- Сравнивается количество адресов в Cluster list – маршрут, имеющий наименьшее количество адресов становится лучшим;
- Сравниваются адреса BGP-пиров – маршрут, полученный от BGP-пира с наименьшим из адресов, является приоритетным.
В выводе маршрутной информации для определенного префикса лучший маршрут будет отмечен как «Best»:
ESR# show bgp ipv4 unicast 192.0.2.0/24 192.0.2.0/24 via 100.64.28.1 on gi1/0/1.2800 [bgp65514 2022-05-22] (65041i) Administrative Distance: 170 Type: unicast Origin: IGP AS PATH: 65054 65055 65056 65077 65098 65059 Next Hop: 100.64.28.1 Local Preference: 100 Community: (3356:2) (3356:22) (3356:86) (3356:501) (3356:666) (3356:903) (3356:2065) (12389:6) (65000:64990) Weight: 0 Valid 192.0.2.0/24 via 101.7.0.1 on gi1/0/1.2800 [bgp65514 2022-05-22] (65041i) Administrative Distance: 170 Type: unicast Origin: IGP AS PATH: 65020 65030 Next Hop: 101.7.0.1 Local Preference: 200 Community: (3356:2) (3356:22) (3356:86) (3356:501) (3356:666) (3356:903) (3356:2065) (12389:6) (65000:64990) Weight: 0 Valid,Best
Условное анонсирование маршрутной информации (Conditional Advertisement)
В обычных сценариях BGP анонсирует все лучшие маршруты из своей BGP RIB. Иногда необходимо более гибкое управление анонсируемой маршрутной информацией. В этом случае рекомендуется использование функции Conditional advertisement, которая позволяет описать условия, при совпадении которых будет анонсироваться (или наоборот отзываться) необходимая маршрутная информация.
В текущей реализации функционал поддержан для IPv4 ( AFI -1 , SAFI -1), IPv6 (AFI -2 , SAFI -1) маршрутов.
Реализована поддержка как для GRT, так и в VRF.
Для работы Conditional advertisement необходимо выполнить следующие шаги:
1. Описать маршрутные карты сondition-map и advertise-map:
- Condition-map – это карта, в которой необходимо описать маршрутную информацию для проверки. Планировщик будет запускаться каждые 60 секунд для проверки наличия в BGP RIB маршрутной информации, описанной в этой карте;
- Advertise-map – это карта, в который необходимо описать маршрутную информацию, которая будет анонсироваться при выполнении условий, описанных в condition-map.
2. В контексте настройки BGP-соседа необходимо задать условие, при котором будет анонсироваться маршрутная информация, описанная в advertise-map. Рассмотрим этот пункт на примере ниже:
Условие EXIST-MAP:
- Если R2 содержит в BGP RIB маршрут 192.0.2.255/32, то R2 анонсирует в сторону R3 маршрут 198.51.100.0/24 (пример на рисунке ниже);
- Если R2 не содержит в BGP RIB маршрут 192.0.2.255/32, то анонсирование маршрута 198.51.100.0/24 соседу R3 не происходит.
route-map CONDITION rule 1 match ip address 192.0.2.255/32 exit exit route-map ADVERTISE rule 1 match ip address 198.51.100.0/24 exit exit router bgp 65540 neighbor R3 description "To R3" address-family ipv4 unicast advertise-map ADVERTISE exist-map CONDITION enable exit
Условие not EXIST-MAP:
- Если R2 содержит в BGP RIB маршрут 192.0.2.255/32, то анонсирование маршрута 198.51.100.0/24 соседу R3 не происходит;
- Если R2 не содержит в BGP RIB маршрут 192.0.2.255/32, то R2 анонсирует в сторону R3 маршрут 198.51.100.0/24 (пример на рисунке ниже).
route-map CONDITION rule 1 match ip address 192.0.2.255/32 exit exit route-map ADVERTISE rule 1 match ip address 198.51.100.0/24 exit exit router bgp 65540 neighbor R3 description "To R3" address-family ipv4 unicast advertise-map ADVERTISE not exist-map CONDITION enable exit
Ниже приведена диаграмма состояний для условия EXIST-MAP:
После активации функции Conditional advertisement находится в состоянии «Uninitialized». На этом этапе анонсируется вся разрешенная маршрутная информация, происходит инициализация планировщика для дальнейшей работы. Время нахождения в этом состоянии – 60 секунд:
vESR# sh bgp neighbors BGP neighbor is 192.0.2.2 BGP state: Established Type: Static neighbor Neighbor address: 192.0.2.2 Neighbor AS: 202766 Neighbor ID: 192.0.2.2 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: external AS4 Source address: 192.0.2.1 Weight: 0 Hold timer: 136/180 Keepalive timer: 35/60 Address family ipv4 unicast: Send-label: No Default originate: No Default information originate: No Incoming route-map: IN Outgoing route-map: OUT Advertise-map: ADVERTISE Condition-map: CONDITION Conditional advertisement status: Uninitialized <----- Uptime: 12 s
Далее планировщик проверяет условие EXIST-MAP для соответствующей condition-map. Если условие истинно, происходит анонсирование (обновление) маршрутной информации в соответствии с правилами, заданными в advertise-map. Cостояние статуса меняется на «Advertise». Время нахождения в этом состоянии – 60 секунд:
vesr# sh bgp neighbors BGP neighbor is 192.0.2.2 BGP state: Established Type: Static neighbor Neighbor address: 192.0.2.2 Neighbor AS: 202766 Neighbor ID: 192.0.2.2 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: external AS4 Source address: 192.0.2.1 Weight: 0 Hold timer: 136/180 Keepalive timer: 41/60 Address family ipv4 unicast: Send-label: No Default originate: No Default information originate: No Incoming route-map: IN Outgoing route-map: OUT Advertise-map: ADVERTISE Condition-map: CONDITION Conditional advertisement status: Advertise <---- Uptime: 1119 s
Если условие EXIST-MAP для соответствующей сondition-map не выполняется, происходит отзыв маршрутной информации, описанной в соответствующей advertise-map. Cостояние статуса меняется на «Withdrawal». Время нахождения в этой стадии – 60 секунд:
vESR# sh bgp neighbors BGP neighbor is 192.0.2.2 BGP state: Established Type: Static neighbor Neighbor address: 192.0.2.2 Neighbor AS: 202766 Neighbor ID: 192.0.2.2 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: external AS4 Source address: 192.0.2.1 Weight: 0 Hold timer: 136/180 Keepalive timer: 41/60 Address family ipv4 unicast: Send-label: No Default originate: No Default information originate: No Incoming route-map: IN Outgoing route-map: OUT Advertise-map: ADVERTISE Condition-map: CONDITION Conditional advertisement status: Withdrawal <---- Uptime: 1119 s
Порядок выполнения политик фильтрации маршрутной информации:
1. Выполняется политика, заданная при редистрибуции маршрутов (AF_POLICY_OUT);
2. Применяется advertise-map, описанная в Conditional advertisement (advertise-map ADVERTISE ..);
3. Обрабатывается политика фильтрации исходящей маршрутной информации (route-map OUT out).
route-map ADVERTISE rule 1 match ip address 10.100.0.255/32 action set local-preference 101 action set metric bgp 78 exit exit route-map OUT rule 1 action set local-preference 200 exit exit route-map CONDITION rule 1 match ip address 10.100.0.255/32 exit exit route-map AF_POLICY_OUT rule 1 match ip address 10.100.0.255/32 action set community 65:65 exit exit router bgp 64512 neighbor 192.0.2.2 remote-as 64512 address-family ipv4 unicast route-map OUT out <----- 3 advertise-map ADVERTISE exist-map CONDITION <----- 2 enable exit enable exit address-family ipv4 unicast redistribute static route-map AF_POLICY_OUT <---- 1 exit enable exit // Вывод атрибутов BGP маршрута после прохождения всех политик: show bgp ipv4 unicast 10.100.0.255/32 Administrative Distance: 170 Type: unicast Origin: Incomplete AS path: -- Next Hop: 192.168.1.1 Output Label: -- Input Label: imp-null Local Preference: 200 MED: 78 Cluster List: -- Community: 65:65 EXT Community: -- Weight: --
Алгоритм настройки
Шаг | Описание | Команда | Ключ |
---|---|---|---|
1 | Настроить протокол BGP (см. раздел Настройка BGP). | ||
2 | Cоздать advertise-map, описав в нем список подсетей для дальнейшего анонсирования. | esr(config)# route-map <ADVERTISE> | <ADVERTISE> – имя конфигурируемых правил маршрутизации, задаётся строкой до 31 символа. |
3 | Создать condition-map, описав в нем список подсетей по которым будет осуществляться проверка. | esr(config)# route-map <CONDITION> | <CONDITION> – имя конфигурируемых правил маршрутизации, задаётся строкой до 31 символа. |
4 | В контексте настройки address-family заданного BGP соседа указать условие и созданные ранее маршрутные карты. | esr(config-bgp-neighbor-af)# advertise-map <ADVERTISE> {EXIST-MAP | NOT-EXIST-MAP} <CONDITION> | <ADVERTISE> – имя конфигурируемых правил маршрутизации, задаётся строкой до 31 символа. <CONDITION> – имя конфигурируемых правил маршрутизации, задаётся строкой до 31 символа. <EXIST-MAP> – условие проверки: если маршруты, описанные в condition-map, присутствуют в BGP RIB, то происходит анонсирование маршрутов, описанных в advertise-map. <NOT-EXIST-MAP> – условие проверки: если маршруты, описанные в condition-map, отсутствуют в BGP RIB, то происходит анонсирование маршрутов, описанных в advertise-map. |
Пример настройки
Задача:
ESR получает маршрут по умолчанию от двух провайдеров – ISP «Zero» и «ISP One». Дополнительно ISP «Zero» анонсирует маршрут 10.1.1.1/32, наличие которого в BGP RIB в дальнейшем и будет отслеживаться.
Необходимо в случае присутствия маршрута 10.1.1.1/32 в BGP RIB анонсировать маршрут 198.51.100.0/24 провайдеру ISP «Zero», если маршрут 10.1.1.1/32 отсутствует в BGP RIB – анонсировать 198.51.100.0/24 провайдеру ISP «One».
Решение:
Сконфигурируем необходимые сетевые интерфейсы на каждом устройстве в сети:
ISP-ZERO(config)# interface gigabitethernet 1/0/1 ISP-ZERO(config-if-gi)# ip firewall disable ISP-ZERO(config-if-gi)# ip address 192.0.2.1/30 ISP-ZERO(config-if-gi)# do commit ISP-ZERO(config-if-gi)# do confirm
ESR(config)# interface gigabitethernet 1/0/1 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# description "FROM ISP-ZERO" ESR(config-if-gi)# ip address 192.0.2.2/30 ESR(config-if-gi)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 192.0.2.5/30 ESR(config-if-gi)# description "TO ISP-ONE" ESR(config-if-gi)# exit ESR(config)# do commit ESR(config)# do confirm
ISP-ONE(config)# interface gigabitethernet 1/0/1 ISP-ONE(config-if-gi)# ip firewall disable ISP-ONE(config-if-gi)# ip address 192.0.2.6/30 ISP-ONE(config-if-gi)# do commit ISP-ONE(config-if-gi)# do confirm
Произведем настройку BGP:
ISP-ZERO(config)# ip route 10.1.1.1/32 blackhole ISP-ZERO(config)# ip route 0.0.0.0/0 blackhole ISP-ZERO(config)# route-map OUT ISP-ZERO(config-route-map)# rule 1 ISP-ZERO(config-route-map-rule)# exit ISP-ZERO(config-route-map)# exit ISP-ZERO(config)# router bgp 64515 ISP-ZERO(config-bgp)# neighbor 192.0.2.2 ISP-ZERO(config-bgp-neighbor)# remote-as 64516 ISP-ZERO(config-bgp-neighbor)# enable ISP-ZERO(config-bgp-neighbor)# address-family ipv4 unicast ISP-ZERO(config-bgp-neighbor-af)# route-map OUT out ISP-ZERO(config-bgp-neighbor-af)# enable ISP-ZERO(config-bgp-neighbor-af)# exit ISP-ZERO(config-bgp-neighbor)# exit ISP-ZERO(config-bgp)# enable ISP-ZERO(config-bgp)# address-family ipv4 unicast ISP-ZERO(config-bgp-af)# redistribute static ISP-ZERO(config-bgp-af)# do commit ISP-ZERO(config-bgp-af)# do confirm
ESR(config)# route-map OUT ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# match ip address 198.51.100.0/24 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 64516 ESR(config-bgp)# neighbor 192.0.2.1 ESR(config-bgp-neighbor)# remote-as 64515 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map OUT out ESR(config-bgp-neighbor-af)# enable ESR(config-bgp-neighbor-af)# exit ESR(config-bgp-neighbor)# enable ESR(config-bgp-neighbor)# exit ESR(config-bgp)# neighbor 192.0.2.6 ESR(config-bgp-neighbor)# remote-as 64517 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# enable ESR(config-bgp-neighbor-af)# route-map OUT out ESR(config-bgp-neighbor-af)# exit ESR(config-bgp-neighbor)# enable ESR(config-bgp-neighbor)# exit ESR(config-bgp)# enable ESR(config-bgp)# do commit ESR(config-bgp)# do confirm
ISP-ONE(config)# ip route 0.0.0.0/0 blackhole ISP-ONE(config)# route-map OUT ISP-ONE(config-route-map)# rule 1 ISP-ONE(config-route-map-rule)# exit ISP-ONE(config-route-map)# exit ISP-ONE(config)# router bgp 64517 ISP-ONE(config-bgp)# neighbor 192.0.2.5 ISP-ONE(config-bgp-neighbor)# address-family ipv4 unicast ISP-ONE(config-bgp-neighbor-af)# route-map OUT out ISP-ONE(config-bgp-neighbor-af)# enable ISP-ONE(config-bgp-neighbor-af)# exit ISP-ONE(config-bgp-neighbor)# remote-as 64516 ISP-ONE(config-bgp-neighbor)# enable ISP-ONE(config-bgp-neighbor)# exit ISP-ONE(config-bgp)# enable ISP-ONE(config-bgp)# address-family ipv4 unicast ISP-ONE(config-bgp-af)# redistribute static ISP-ONE(config-bgp-af)# do commit ISP-ONE(config-bgp-af)# do confirm
Опишем advertise и condition maps на ESR:
ESR(config)# ip route 198.51.100.0/24 blackhole ESR(config)# route-map CONDITION ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# match ip address 10.1.1.1/32 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# route-map ADVERTISE ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# match ip address 198.51.100.0/24 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 64516 ESR(config-bgp)# address-family ipv4 unicast ESR(config-bgp-af)# network 198.51.100.0/24 ESR(config-bgp-af)# do commit ESR(config-bgp-af)# do confirm
Активируем функцию Сonditional advertisement, применив ранее созданные маршрутные карты:
ESR(config)# router bgp 64516 ESR(config-bgp)# neighbor 192.0.2.6 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# advertise-map ADVERTISE not exist-map CONDITION ESR(config-bgp-neighbor-af)# do commit ESR(config-bgp-neighbor-af)# do confirm
Проверим корректность настройки:
//Проверяем наличие маршрута 10.1.1.1/32 в BGP RIB ESR# sh bgp ipv4 unicast 10.1.1.1/32 10.1.1.1/32 via 192.0.2.1 on gi1/0/1 [bgp64516 07:07:59] (64515?) Administrative Distance: 170 Type: unicast Origin: Incomplete AS path: 64515 Next Hop: 192.0.2.1 Output Label: -- Input Label: -- Local Preference: 100 MED: -- Cluster List: -- Community: -- EXT Community: -- Weight: 0 Valid, Best // Проверяем статус сonditional advertisement и отсутствие анонса 198.51.100.0/24 провайдеру ISP "One" ESR# sh bgp ipv4 unicast neighbor 192.0.2.6 advertise-routes ESR# sh bgp neighbors 192.0.2.6 BGP neighbor is 192.0.2.6 BGP state: Established Type: Static neighbor Neighbor address: 192.0.2.6 Neighbor AS: 64517 Neighbor ID: 192.0.2.6 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: external AS4 Source address: 192.0.2.5 Weight: 0 Hold timer: 99/180 Keepalive timer: 4/60 RR client: No Address family ipv4 unicast: Send-label: No Default originate: No Default information originate: No Outgoing route-map: OUT Advertise-map: ADVERTISE Condition-map: CONDITION Conditional advertisement status: Withdrawal Preference: 170 Remove private AS: No Next-hop self: No Next-hop unchanged: No Uptime: 1300 s
Настройка завершена.
Быстрая деактивация пиринговых сессий
В случае когда возникновения проблем между соседями BGP, по умолчанию BGP ожидает 180 секунд (3 таймера keepalive) для того чтобы разорвать соседство и отозвать все маршруты полученные от неактивного соседа. Для обхода данной проблемы существуют методы, которые помогают быстрее обнаружить проблемы в работе сети и произвести отключение соседа, улучшая время реакции на изменения смежности с соседями BGP. Рассмотрим существующие реализации этих методов.
Метод на основе протокола BFD
BFD (Bidirectional Forwarding Detection) — протокол для быстрого обнаружения проблем на канальном уровне. В текущей реализации для его работы необходима настройка с обеих сторон (на каждом BGP-пире).
По умолчанию BFD-сессия устанавливается в следующем режиме:
Протокол | Режим |
---|---|
eBGP | single-hop |
eBGP multi-hop | multi-hop |
iBGP | multi-hop |
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол BGP (см. раздел Настройка BGP). | ||
2 | Включить поддержку протокола BFD в контексте настройки пира или пир-группы | esr(config-bgp-neighbor)# fall-over bfd |
Пример настройки
Задача:
Необходимо настроить eBGP между маршрутизаторами R1, R2 и включить протокол BFD.
Решение:
На R1 предварительно необходимо настроить интерфейс Gi1/0/1:
esr(config)# interface gigabitethernet 1/0/1 esr(config-if-gi)# ip firewall disable esr(config-if-gi)# ip address 10.0.0.1/24
Следующим шагом на R1 настроим eBGP и включим BFD:
esr(config)# router bgp 100 esr(config-bgp)# neighbor 10.0.0.2 esr(config-bgp-neighbor)# remote-as 200 esr(config-bgp-neighbor)# update-source 10.0.0.1 esr(config-bgp-neighbor)# fall-over bfd esr(config-bgp-neighbor)# enable esr(config-bgp-neighbor)# exit esr(config-bgp)# enable esr(config-bgp)# exit
На R2 предварительно необходимо настроить интерфейс Gi1/0/1:
esr(config)# interface gigabitethernet 1/0/1 esr(config-if-gi)# ip firewall disable esr(config-if-gi)# ip address 10.0.0.2/24
Далее на R2 настроим eBGP и включим BFD:
esr(config)# router bgp 200 esr(config-bgp)# neighbor 10.0.0.1 esr(config-bgp-neighbor)# remote-as 100 esr(config-bgp-neighbor)# update-source 10.0.0.2 esr(config-bgp-neighbor)# fall-over bfd esr(config-bgp-neighbor)# enable esr(config-bgp-neighbor)# exit esr(config-bgp)# enable esr(config-bgp)# exit
Настройка завершена. Для просмотра оперативной информации можно использовать следующие команды:
esr# sh bgp neighbors BGP neighbor is 10.0.0.2 BGP state: Established <---- BGP сессия установлена Type: Static neighbor Neighbor address: 10.0.0.2 Neighbor AS: 200 Neighbor ID: 10.0.0.2 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: external AS4 Source address: 10.0.0.1 Weight: 0 Hold timer: 144/180 Keepalive timer: 29/60 Uptime (d,h:m:s): 00,00:00:20 BFD address: 10.0.0.2 BFD state: Up <---- Статус протокола BFD BFD interval: 0.300 s BFD timeout: 1.500 s esrv# sh bfd neighbors 10.0.0.2 Neighbor address: 10.0.0.2 Local address: 10.0.0.1 Interface: gi1/0/1 Remote discriminator: 889907056 Local discriminator: 924658435 State: Up Session type: Control Session mode: Single-hop Local diagnostic code: No Diagnostic Remote diagnostic code: No Diagnostic Minimal Tx Interval: 300 ms Minimal Rx Interval: 300 ms Multiplier: 5 Actual Tx Interval: 300 ms Actual Detection Interval: 1500 ms Number of transmitted packets: 257 Number of received packets: 156 Uptime (d,h:m:s): 00,00:00:38 Client: BGP Last received packet: Desired Min Tx Interval: 200 ms Required Min Rx Interval: 200 ms Multiplier: 5
Метод на основе Fast Peer Deactivation (Fall-over)
BGP Fast Peer Deactivation – это метод оптимизации конвергенции BGP, при котором соседство BGP разрывается, как только указанный маршрут (или более/менее специфичный) к соседу удаляется из таблицы маршрутизации. Механизм реализован с совместным использованием маршрутных карт (route-map).
Если правило route-map будет пустым, то под правило будет попадать любой доступный маршрут до соседа в таблице маршрутизации.
Функционал поддержан для IPv4 ( AFI -1 , SAFI -1), IPv6 (AFI -2 , SAFI -1) маршрутов.
В route-map поддерживаются все значения команды match. Команды action set игнорируются.
Реализована поддержка как для GRT, так и в VRF.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол BGP (см. раздел Настройка BGP). | ||
2 | Описать в маршрутной карте подсеть, наличие которой будет отслеживаться в таблице маршрутизации (см. раздел Настройка Route-map). | ||
3 | Активировать функционал, привязав маршрутную карту в соответствующему пиру или пир-группе. | esr(config-bgp-neighbor)# fall-over route-map <NAME> | <NAME> – имя маршрутной карты, задается строкой до 31 символа. |
Пример настройки
Задача:
Настроить механизм Fast Peer Deactivation между iBGP пирами R1 и R2.
Решение:
Предварительно настроим связность между маршрутизаторами в схеме:
R1(config)# interface gigabitethernet 1/0/1 R1(config-if-gi)# ip firewall disable R1(config-if-gi)# ip address 198.51.100.1/24
R2(config)# interface gigabitethernet 1/0/1 R2(config-if-gi)# ip firewall disable R2(config-if-gi)# ip address 198.51.100.2/24
На каждом устройстве настроим протокол OSPF и анонсируем адреса loopback-интерфейсов:
R1(config)# router ospf 1 R1(config-ospf)# area 0.0.0.0 R1(config-ospf-area)# enable R1(config-ospf-area)# exit R1(config-ospf)# enable R1(config-ospf)# exit R1(config)# interface loopback 1 R1(config-if-loopback)# ip ospf instance 1 R1(config-if-loopback)# ip ospf R1(config-if-loopback)# exit R1(config)# interface gigabitethernet 1/0/1 R1(config-if-gi)# ip ospf instance 1 R1(config-if-gi)# ip ospf
R2(config)# router ospf 1 R2(config-ospf)# area 0.0.0.0 R2(config-ospf-area)# enable R2(config-ospf-area)# exit R2(config-ospf)# enable R2(config-ospf)# exit R2(config)# interface loopback 1 R2(config-if-loopback)# ip address 192.0.2.255/32 R2(config-if-loopback)# ip ospf instance 1 R2(config-if-loopback)# ip ospf R2(config-if-loopback)# exit R2(config)# interface gigabitethernet 1/0/1 R2(config-if-gi)# ip ospf instance 1 R2(config-if-gi)# ip ospf
Настроим протокол BGP на обоих маршрутизаторах:
R1(config)# router bgp 65500 R1(config-bgp)# neighbor 192.0.2.255 R1(config-bgp-neighbor)# remote-as 65500 R1(config-bgp-neighbor)# update-source loopback 1 R1(config-bgp-neighbor)# enable R1(config-bgp-neighbor)# exit R1(config-bgp)# enable
R2(config)# router bgp 65500 R2(config-bgp)# neighbor 192.0.2.254 R2(config-bgp-neighbor)# remote-as 65500 R2(config-bgp-neighbor)# update-source loopback 1 R2(config-bgp-neighbor)# enable R2(config-bgp-neighbor)# exit R2(config-bgp)# enable
Cоздадим маршрутную карту, в которой опишем адрес BGP-пира для дальнейшего отслеживания c помощью функционала Fast Peer Deactivation:
R1(config)# route-map Failover R1(config-route-map)# rule 1 R1(config-route-map-rule)# match ip address 192.0.2.255/32 R1(config-route-map-rule)# exit R1(config-route-map)# exit
R2(config)# route-map Failover R2(config-route-map)# rule 1 R2(config-route-map-rule)# match ip address 192.0.2.254/32
Привяжем созданные маршрутные карты в контексте настройки BGP-пира:
R1(config)# router bgp 65500 R1(config-bgp)# neighbor 192.0.2.255 R1(config-bgp-neighbor)# fall-over route-map Failover
R2(config)# router bgp 65500 R2(config-bgp)# neighbor 192.0.2.254 R2(config-bgp-neighbor)# fall-over route-map Failover
Для просмотра оперативного состояния можно воcпользоваться следующей командой:
R2# sh bgp neighbors BGP neighbor is 192.0.2.254 BGP state: Established Type: Static neighbor Neighbor address: 192.0.2.254 Neighbor AS: 65500 Neighbor ID: 192.0.2.254 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: internal multihop AS4 Source address: 192.0.2.255 Weight: 0 Hold timer: 164/180 Keepalive timer: 23/60 Uptime: 437 s Fall-over route-map: Failover <---- Функционал активирован R2# sh bgp neighbors 192.0.2.254 BGP neighbor is 192.0.2.254 BGP state: Down Type: Static neighbor Neighbor address: 192.0.2.254 Neighbor AS: 65500 Fall-over route-map: Failover Last error: Error: Fall over route-map <---- Сессия BGP была разорвана из-за отработавшего механизма Fast Peer Deactivation
Настройка завершена.
Настройка BFD
BFD (Bidirectional Forwarding Detection) — это протокол, работающий поверх других протоколов и позволяющий сократить время обнаружения проблемы до 50 мс. BFD является двусторонним протоколом, т. е. требует настройки обоих маршрутизаторов (оба маршрутизатора генерируют BFD-пакеты и отвечают друг другу).
По умолчанию сессия устанавливается в следующем режиме:
Протокол | Режим |
---|---|
iBGP | multi-hop |
eBGP | single-hop |
eBGP multi-hop | multi-hop |
OSPF | single-hop |
Static route | single-hop |
Для изменения поведения (режима) необходимо вручную переопределить параметры сессии, указав необходимый режим. Рассмотрим на примере.
Допустим, мы установили eBGP-соседство и включили для него BFD:
ESR# show running-config routing bgp router bgp 65516 neighbor 10.100.0.2 remote-as 65515 update-source 10.100.0.1 fall-over bfd enable exit enable exit ESR# show bfd neighbors 10.100.0.2 Neighbor address: 10.100.0.2 Local address: 10.100.0.1 Interface: -- Remote discriminator: 3751534121 Local discriminator: 1670865501 State: Up Session type: Control Session mode: Single-hop Local diagnostic code: No Diagnostic Remote diagnostic code: No Diagnostic Minimal Tx Interval: 300 ms Minimal Rx Interval: 300 ms Multiplier: 5 Actual Tx Interval: 300 ms Actual Detection Interval: 1500 ms Number of transmitted packets: 1149 Number of received packets: 1153 Uptime: 2m Client: BGP Last received packet: Desired Min Tx Interval: 300 ms Required Min Rx Interval: 300 ms Multiplier: 5
Как видно, по умолчанию BFD установился в режиме single-hop. Переключим режим в multi-hop:
ESR(config)# ip bfd neighbor 10.100.0.2 local-address 10.100.0.1 multihop ESR(config)# do commit ESR(config)# do confirm
Конфигурацию необходимо производить на обоих устройствах. После переустановки сессии ее режим сменится на multi-hop:
esr-200# sh bfd neighbors 10.100.0.2 Neighbor address: 10.100.0.2 Local address: 10.100.0.1 Interface: -- Remote discriminator: 3751534121 Local discriminator: 1670865501 State: Up Session type: Control Session mode: Multi-hop Local diagnostic code: No Diagnostic Remote diagnostic code: No Diagnostic Minimal Tx Interval: 300 ms Minimal Rx Interval: 300 ms Multiplier: 5 Actual Tx Interval: 300 ms Actual Detection Interval: 1500 ms Number of transmitted packets: 9 Number of received packets: 11 Uptime: 2m Client: BGP Last received packet: Desired Min Tx Interval: 300 ms Required Min Rx Interval: 300 ms Multiplier: 5
Настройка таймеров
Значение таймеров индивидуально для каждой сети и во многом зависит от ее параметров. В случае частого флапинга BFD рекомендуется увеличить значение таймеров.
Таймеры, вне зависимости от режима работы протокола (single или multi-hop mode), могут быть настроены в контексте глобальной конфигурации или на определенных интерфейсах. Настройка на интерфейсах имеет наибольший приоритет.
ESR(config)# ip bfd min-tx-interval 1000 ESR(config)# ip bfd min-rx-interval 1000 ESR(config)# do commmit ESR# sh ip bfd Minimum RX interval: 1000 ms Minimum TX interval: 1000 ms Idle TX interval: 1000 ms Multiplier: 5 packets Passive: No
После того как BFD-сессия установлена, каждая сторона индивидуально вычисляет свои Tx Interval и Detection Interval. Tx Interval выбирается как наибольшее значение из локального Tx Interval и удаленного RX Interval. Detection Interval вычисляется по следующей формуле: Detection Interval = remoteMultiplier * MAX( RxLocal || TxRemote), где remoteMultiplier – значение Multiplier удаленной стороны, RxLocal – локальный Tx Interval, TxRemote – Tx Interval удаленной стороны.
Локально настроенные таймеры, таймеры удаленной стороны, а также вычисленные таймеры можно посмотреть следующим образом:
esr-200# sh bfd neighbors 10.100.0.2 Neighbor address: 10.100.0.2 Local address: 10.100.0.1 Interface: -- Remote discriminator: 3751534121 Local discriminator: 1670865501 State: Up Session type: Control Session mode: Multi-hop Local diagnostic code: No Diagnostic Remote diagnostic code: No Diagnostic Minimal Tx Interval: 300 ms <---- Локальный Tx Interval Minimal Rx Interval: 300 ms <---- Локальный Rx Interval Multiplier: 5 <---- Локальный Multiplier Actual Tx Interval: 300 ms <---- Вычисленный Tx Interval Actual Detection Interval: 1500 ms <---- Вычисленный Detection Interval Number of transmitted packets: 21781 Number of received packets: 21804 Uptime: 1d21h54m Client: BGP Last received packet: Desired Min Tx Interval: 300 ms <---- Required Min Rx Interval: 300 ms <---- Таймеры удаленной стороны Multiplier: 5 <----
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Активировать BFD для протокола OSPF на интерфейсе. | esr(config-if-gi)# ip ospf bfd-enable | |
2 | Активировать BFD для протокола BGP neighbor на интерфейсе. | esr(config-bgp-neighbor)# fall-over bfd | |
3 | Задать интервал, по истечении которого происходит отправка BFD-сообщения соседу. Глобально (не обязательно). | esr(config)# ip bfd idle-tx-interval <TIMEOUT> | <TIMEOUT> – интервал, по истечении которого происходит отправка BFD-пакета, принимает значение в миллисекундах в диапазоне:
По умолчанию: 1 секунда. |
4 | Включить логирование изменений состояния BFD-протокола (не обязательно). | esr(config)# ip bfd log-adjacency-changes | |
5 | Задать минимальный интервал, по истечении которого сосед должен сгенерировать BFD-сообщение. | esr(config)# ip bfd min-rx-interval <TIMEOUT> | <TIMEOUT> – интервал, по истечении которого должна происходить отправка BFD-сообщения соседом, принимает значение в миллисекундах в диапазоне:
По умолчанию:
|
6 | Задать минимальный интервал, по истечении которого происходит отправка BFD-сообщения соседу. | esr(config)# ip bfd min-tx-interval <TIMEOUT> | <TIMEOUT> – интервал, по истечении которого должна происходить отправка BFD-сообщения соседом, принимает значение в миллисекундах в диапазоне:
По умолчанию:
|
7 | Задать число пропущенных пакетов, после достижения которого BFD-сосед считается недоступным. Глобально. | esr(config)# ip bfd multiplier <COUNT> | <COUNT> – число пропущенных пакетов, после достижения которого сосед считается недоступным, принимает значение в диапазоне [1..100]. По умолчанию: 5. |
8 | Запустить работу механизма BFD с определенным IP-адресом. | esr(config)# ip bfd neighbor <ADDR> [ { interface <IF> | tunnel <TUN> } ] | <ADDR> – IP-адрес шлюза, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <IF> – интерфейс или группы интерфейсов; <TUN> – тип и номер туннеля; <VRF> – имя экземпляра VRF, задается строкой до 31 символа; multihop – ключ для установки TTL=255, для работы механизма BFD через маршрутизируемую сеть. |
9 | Перевести BFD-сессию в пассивный режим, то есть BFD-сообщения не будут отправляться до тех пор, пока не будут получены сообщения от BFD-соседа. Глобально (не обязательно). | esr(config)# ip bfd passive | |
10 | Задать интервал, по истечении которого происходит отправка BFD-сообщения соседу. | esr(config-if-gi)# ip bfd idle-tx-interval <TIMEOUT> | <TIMEOUT> – интервал, по истечении которого происходит отправка BFD-пакета, принимает значение в миллисекундах в диапазоне:
По умолчанию: 1 секунда. |
11 | Задать минимальный интервал, по истечении которого сосед должен сгенерировать BFD-сообщение. | esr(config-if-gi)# ip bfd min-rx-interval <TIMEOUT> | <TIMEOUT> – интервал, по истечении которого должна происходить отправка BFD-сообщения соседом, принимает значение в миллисекундах в диапазоне:
По умолчанию:
|
12 | Задать минимальный интервал, по истечении которого происходит отправка BFD-сообщения соседу. | esr(config-if-gi)# ip bfd min-tx-interval <TIMEOUT> | <TIMEOUT> – интервал, по истечении которого должна происходить отправка BFD-сообщения соседом, принимает значение в миллисекундах в диапазоне:
По умолчанию:
|
13 | Задать число пропущенных пакетов, после достижения которого BFD-сосед считается недоступным. | esr(config-if-gi)# ip bfd multiplier <COUNT> | <COUNT> – число пропущенных пакетов, после достижения которого сосед считается недоступным, принимает значение в диапазоне [1..100]. По умолчанию: 5. |
14 | Перевести BFD-сессию в пассивный режим, то есть BFD-сообщения не будут отправляться до тех пор, пока не будут получены сообщения от BFD-соседа. На интерфейсе | esr(config-if-gi)# ip bfd passive | |
15 | При активизации работы протока BFD на интерфейсе с включенным firewall, необходимо разрешить работу протокола UDP порт назначения – 3784 из зоны сконфигурированной на интерфейсе в зону self. Как создать необходимое правило описано в разделе Конфигурирование Firewall. |
Пример настройки
Задача:
Необходимо настроить протокол BFD для статического маршрута на маршрутизаторе R1.
Решение:
Предварительно необходимо настроить интерфейс Gi1/0/1 на R1 и R2:
R1(config)# interface gigabitethernet 1/0/1 R1(config-if-gi)# ip firewall disable R1(config-if-gi)# ip address 198.51.100.1/24
R2(config)# interface gigabitethernet 1/0/1 R2(config-if-gi)# ip firewall disable R2(config-if-gi)# ip address 198.51.100.2/24
На R1 настроим статический маршрут и привяжем к нему функционал BFD:
R1(config)# ip route 192.0.2.0/24 198.51.100.2 bfd
Для установки BFD-сессии на R2 также необходимо настроить соседа:
R2(config)# ip bfd neighbor 198.51.100.1
Для вывода оперативной информации возможно использование следующих команд:
R1# sh bfd neighbors Neighbor Discriminator State Interface --------------------------------------- ------------- --------- ---------------- 198.51.100.2 2907010617 Up gi1/0/1 R1# sh bfd neighbors 198.51.100.2 Neighbor address: 198.51.100.2 Local address: 198.51.100.1 Interface: gi1/0/1 Remote discriminator: 2907010617 Local discriminator: 2856477782 State: Up <--- состояние протокола Session type: Control Session mode: Single-hop Local diagnostic code: No Diagnostic Remote diagnostic code: No Diagnostic Minimal Tx Interval: 300 ms Minimal Rx Interval: 300 ms Multiplier: 5 Actual Tx Interval: 300 ms Actual Detection Interval: 1500 ms Number of transmitted packets: 1444 Number of received packets: 1402 Uptime (d,h:m:s): 00,00:03:39 Client: STATIC <---- сервис, который подписан на отслеживание изменения состояния R1# sh ip route 192.0.2.0/24 Codes: C - connected, S - static, R - RIP derived, O - OSPF derived, IA - OSPF inter area route, E1 - OSPF external type 1 route, E2 - OSPF external type 2 route B - BGP derived, D - DHCP derived, K - kernel route, V - VRRP route i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area H - NHRP, * - FIB route S * 192.0.2.0/24 [1/0] via 198.51.100.2 on gi1/0/1 [static 16:22:27] R1# sh bfd neighbors Neighbor Discriminator State Interface --------------------------------------- ------------- --------- ---------------- 198.51.100.2 2907010617 Up gi1/0/1 R1# sh ip route 192.0.2.0/24 Codes: C - connected, S - static, R - RIP derived, O - OSPF derived, IA - OSPF inter area route, E1 - OSPF external type 1 route, E2 - OSPF external type 2 route B - BGP derived, D - DHCP derived, K - kernel route, V - VRRP route i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area H - NHRP, * - FIB route S * 192.0.2.0/24 [1/0] via 198.51.100.2 on gi1/0/1 [static 16:22:27] <---- маршрут присутствует в FIB // После того как BFD-сессия разрушилась, отслеживаемый маршрут удалился из FIB: R1# sh bfd neighbors Neighbor Discriminator State Interface --------------------------------------- ------------- --------- ---------------- 198.51.100.2 2907010617 Down gi1/0/1 R1# sh ip route 192.0.2.0/24 Codes: C - connected, S - static, R - RIP derived, O - OSPF derived, IA - OSPF inter area route, E1 - OSPF external type 1 route, E2 - OSPF external type 2 route B - BGP derived, D - DHCP derived, K - kernel route, V - VRRP route i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area H - NHRP, * - FIB route R1#
Настройка завершена.
Настройка политики маршрутизации PBR
Алгоритм настройки Route-map для BGP
Route-map могут служить фильтрами, позволяющими обрабатывать маршрутную информацию при приеме этой информации от соседа либо при ее передаче соседу. Обработка может включать в себя фильтрацию на основании различных признаков маршрута, а также установку атрибутов (MED, AS-PATH, community, LocalPreference и другое) на соответствующие маршруты.
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Создать маршрутную карту для фильтрации и модификации IP-маршрутов. | esr(config)# route-map <NAME> | <NAME> – имя маршрутной карты, задается строкой до 31 символа. |
2 | Создать правило маршрутной карты. | esr(config-route-map)# rule <ORDER> | <ORDER> – номер правила, принимает значения [1 .. 10000]. |
3 | Указать действие, которое должно быть применено для маршрутной информации. | esr(config-route-map-rule)# action <ACT> | <ACT> – назначаемое действие:
|
4 | Задать значение атрибута BGP AS-Path в маршруте, для которого должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match as-path { [begin | contain | end ] <AS-PATH> | empty | regex <REGEX> } | <AS-PATH> – список номеров автономных систем, задается в виде AS,AS,AS, принимает значения [1..4294967295]. Опциональные параметры: <REGEX> – регулярное выражение, задаётся по стандарту POSIX-Extended Regular Expressions.
|
5 | Задать значение атрибута BGP Community, для которого должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match community { <COMMUNITY-LIST> | regex <REGEX> } | <COMMUNITY-LIST> – список community, задается в виде AS:N,AS:N, принимает значения [1..4294967295]. Можно указать до 64 community.
<REGEX> – регулярное выражение, задаётся по стандарту POSIX-Extended Regular Expressions. |
6 | Задать значение атрибута BGP Extended Community, для которого должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match extcommunity { <EXTCOMMUNITY-LIST> | regex <REGEX> } | <EXTCOMMUNITY-LIST> – список extcommunity, задается в виде KIND:AS:N, KIND:AS:N, где KIND – тип extcommunity:
N – номер extcommunity, принимает значения [1..65535].
<REGEX> – регулярное выражение, задаётся по стандарту POSIX-Extended Regular Expressions. |
7 | Задать профиль IP-адресов, содержащий значения подсетей назначения в маршруте (не обязательно). | esr(config-route-map-rule)# match ip address object-group <OBJ-GROUP-NETWORK-NAME> | <OBJ-GROUP-NETWORK-NAME> – имя профиля IP-адресов, содержащего префиксы подсетей назначения, задаётся строкой до 31 символа. |
esr(config-route-map-rule)# match ipv6 address object-group <OBJ-GROUP-NETWORK-NAME> | |||
8 | Задать профиль IP-адресов, содержащий значения атрибута BGP Next-Hop в маршруте для которого должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match ip bgp next-hop object-group <OBJ-GROUP-NETWORK-NAME> | <OBJ-GROUP-NETWORK-NAME> – имя профиля IP-адресов, содержащего префиксы подсетей назначения, задается строкой до 31 символа. |
esr(config-route-map-rule)# match ipv6 bgp next-hop object-group <OBJ-GROUP-NETWORK-NAME> | |||
9 | Задать профиль, содержащий IP-адреса маршрутизатора, анонсировавшего маршрут, для которого должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match ip route-source object-group <OBJ-GROUP-NETWORK-NAME> | <OBJ-GROUP-NETWORK-NAME> – имя профиля IP-адресов, содержащего префиксы подсетей назначения, задается строкой до 31 символа. |
esr(config-route-map-rule)# match ipv6 route-source object-group <OBJ-GROUP-NETWORK-NAME> | |||
10 | Задать ACL-группу, для которой должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match access-group <NAME> | <NAME> – имя списка контроля доступа, задается строкой до 31 символа. |
11 | Задать значение атрибута BGP MED в маршруте для которого должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match metric bgp <METRIC> | <METRIC> – значение атрибута BGPMED, принимает значения [0..4294967295]. |
12 | Задать значение атрибута OSPF Metric в маршруте, для которого должно срабатывать правило. | esr(config-route-map-rule)# match metric ospf <TYPE> <METRIC> | <TYPE> – тип атрибута OSPF Metric, принимает значение type-1 и type-2; <METRIC> – значение атрибута OSPF Metric, принимает значения [0..65535]. |
13 | Задать значение атрибута RIP Metric в маршруте, для которого должно срабатывать правило. | esr(config-route-map-rule)# match metric rip <METRIC> | <METRIC> – значение атрибута RIP Metric, принимает значения [0..16]. |
14 | Задать значение атрибута OSPF Tag в маршруте, для которого должно срабатывать правило. | esr(config-route-map-rule)# match tag ospf <TAG> | <TAG> – значение атрибута OSPF Tag, принимает значения [0..4294967295]. |
15 | Задать значение атрибута RIP Tag в маршруте, для которого должно срабатывать правило. | esr(config-route-map-rule)# match tag rip <TAG> | <RIP> – значение атрибута RIP Tag, принимает значения [0..65535]. |
16 | Задать значение атрибута BGP AS-Path, которое будет добавляться в начало списка AS-Path (не обязательно). | esr(config-route-map-rule)# action set as-path | <AS-PATH> – список номеров автономных систем, который будет добавлен к текущему значению в маршруте. Задаётся в виде AS,AS,AS, принимает значения [1..4294967295]. <TCACK-ID> – идентификатор vrrp-tracking, при котором будет исполняться указанное действие. Изменяется в диапазоне [1..60]. |
16.1 | Заменять номер или последовательность номеров AS в атрибуте BGP AS-Path на номер локальной AS (не обязательно). | esr(config-route-map-rule)# action set as-path replace { any | <AS-PATH> } | <AS-PATH> – список номеров автономных систем, который будет заменён на локальный номер AS. Задаётся в виде AS,AS,AS, принимает значения [1..4294967295].
|
17 | Задать значение атрибута BGP Community, которое будет установлено в маршруте (не обязательно). | esr(config-route-map-rule)# action set community {COMMUNITY-LIST> | no-advertise | no-export } | <COMMUNITY-LIST> – список community, задается в виде AS:N,AS:N, где каждая часть принимает значения [1..65535];
|
18 | Задать значение атрибута BGP ExtCommunity, которое будет установлено в маршруте (не обязательно). | esr(config-route-map-rule)# action set extcommunity <EXTCOMMUNITY-LIST> | <EXTCOMMUNITY-LIST> – список extcommunity, задается в виде KIND:AS:N, KIND:AS:N, где KIND – тип extcommunity:
N – номер extcommunity, принимает значения [1..65535]. |
19 | Задать атрибут BGP Next-Hop, который будет установлен в маршруте при анонсировании (не обязательно). | esr(config-route-map-rule)# action set ip bgp-next-hop <ADDR> | <ADDR> – IP-адрес шлюза, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
esr(config-route-map-rule)# action set ipv6 bgp-next-hop <IPV6-ADDR> | <IPV6-ADDR> – IPv6-адрес шлюза, задается в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]. | ||
20 | Задать значение Next-Hop, которое будет установлено в маршруте, полученном по BGP (не обязательно). | esr(config-route-map-rule)# action set ip next-hop {NEXTHOP> | blackhole | unreachable | prohibit} | <NEXTHOP> – IP-адрес шлюза, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255];
|
esr(config-route-map-rule)# action set ipv6 next-hop <IPV6-NEXTHOP> | <IPV6-NEXTHOP> – IPv6-адрес шлюза, задается в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]. | ||
21 | Задать значение атрибута BGP Local Preference, который будет установлен в маршруте (не обязательно). | esr(config-route-map-rule)# action set local-preference <PREFERENCE> | <PREFERENCE> – значение атрибута BGP Local Preference, принимает значения [0..255]. |
22 | Задать значение атрибута BGP Origin, которое будет установлено в маршруте (не обязательно). | esr(config-route-map-rule)# action set origin <ORIGIN> | <ORIGIN> – значение атрибута BGP Origin:
|
23 | Задать значение BGP MED, которое будет установлено в маршруте | esr(config-route-map-rule)# action set metric bgp <METRIC> | <METRIC> – значение атрибута BGP MED, принимает значения [0..4294967295]. |
24 | Добавить фильтрацию и модификацию маршрутов во входящих или исходящих направлениях. | esr(config-bgp-neighbor)# route-map <NAME><DIRECTION> | <NAME> – имя сконфигурированной маршрутной карты; <DIRECTION> – направление:
|
esr(config-ipv6-bgp-neighbor)# route-map <NAME><DIRECTION> |
Пример настройки 1. Route-map для BGP
Задача:
Назначить сommunity для маршрутной информации, приходящей из AS20:
Предварительно нужно выполнить следующие действия:
- Настроить BGP c AS2500 на маршрутизаторе ESR;
- Установить соседство с AS20.
Решение:
Создаем политику:
esr# configure esr(config)# route-map from-as20
Создаем правило 1:
esr(config-route-map)# rule 1
Если AS PATH содержит AS20, то назначаем ему сommunity 20:2020 и выходим:
esr(config-route-map-rule)# match as-path contain 20 esr(config-route-map-rule)# action set community 20:2020 esr(config-route-map-rule)# exit esr(config-route-map)# exit
В BGP процессе AS2500 заходим в настройки параметров соседа:
esr(config)# router bgp 2500 esr(config-bgp)# neighbor 185.0.0.2 esr(config-bgp-neighbor)# address-family ipv4 unicast
Привязываем политику к принимаемой маршрутной информации:
esr(config-bgp-neighbor-af)# route-map from-as20 in
Пример настройки 2. Route-map для BGP
Задача:
Для всей передаваемой маршрутной информации (с community 2500:25) назначить MED, равный 240, и указать источник маршрутной информации EGP:
Предварительно:
Настроить BGP c AS2500 на ESR.
Решение:
Создаем политику:
esr(config)# route-map to-as20
Создаем правило:
esr(config-route-map)# rule 1
Если community содержит 2500:25, то назначаем ему MED 240 и Origin EGP:
esr(config-route-map-rule)# match community 2500:25 esr(config-route-map-rule)# action set metric bgp 240 esr(config-route-map-rule)# action set origin egp esr(config-route-map-rule)# exit esr(config-route-map)# exit
В BGP процессе AS2500 заходим в настройки параметров соседа:
esr(config)# router bgp 2500 esr(config-bgp)# neighbor 185.0.0.2 esr(config-bgp-neighbor-af)# address-family ipv4 unicast
Привязываем политику к анонсируемой маршрутной информации:
esr(config-bgp-neighbor-af)# route-map to-as20 out esr(config-bgp-neighbor-af)# exit esr(config-bgp-neighbor)# exit esr(config-bgp)# exit
Пример настройки 3. Использование регулярных выражений в Route-map для BGP
Начиная с версии 1.23 доступно использование регулярных выражений в Route-map для контроля распространения маршрутной информации по протоколу BGP. Контроль можно производить по трём атрибутам BGP: AS-path, community, extcommunity. Синтаксис регулярных выражений соответствует стандарту POSIX ERE. В таблице ниже представлены некоторые примеры регулярных выражений.
Условие совпадения | Регулярное выражение |
---|---|
Маршруты с любым содержимым AS-path | .* |
Маршруты с пустым AS-path | ^$ |
Маршруты с одной любой AS в AS-path | ^[0-9]+$ |
Маршруты с двумя любыми AS в AS-path | ^[0-9]+ [0-9]+$ |
Маршруты, зарождённые в AS 15 | (^|.* )15$ |
Маршруты, полученные из AS 20 | ^20( .*|$) |
Маршруты, проходящие через AS 22 | .* 22 .* |
Маршруты, проходящие через AS 30, а затем через AS 22 | .* 22 30 .* |
Маршруты, проходящие через AS 30 или AS 43 | .* (30|43) .* |
Маршруты, зарождённые в AS 66 и проходящие через AS 60 | .* 60 (.* )*66$ |
Маршруты, зарождённые в AS 70 или проходящие через неё | .* 70( .*|$) |
Маршруты, содержащие приватные AS в AS-path | (^|.* )((6451[2-9])|(645[2-9][0-9])|(64[6-9][0-9]{2})|(65[0-4][0-9]{2})|(655[0-2][0-9])|(6553[0-4]))( .*|$) |
Номер AS 100, номер community 200 | ^100:200$ |
Номера AS 112 или 232, любой номер community | ^(112|232):[0-9]*$ |
Номер AS 277, номер community начинается с 3 | ^277:3[0-9]*$ |
Любой номер AS, номер community в диапазоне 150-1230 | ^([0-9]*):((1[5-9][0-9])|([2-9][0-9]{2})|(1[0-2][0-2][0-9])|(1230))$ |
Тип route target, IP-адрес 10.10.10.1, номер extcommunity 653 и 654 | ^rt:10\.10\.10\.1:65[34]$ |
Алгоритм настройки Route-map на основе списков доступа (Policy-based routing)
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Создать маршрутную карту для фильтрации и модификации IP-маршрутов. | esr(config)# route-map <NAME> | <NAME> – имя маршрутной карты, задаётся строкой до 31 символа. |
2 | Создать правило маршрутной карты. | esr(c onfig-route-map)# rule <ORDER> | <ORDER> – номер правила, принимает значения [1..10000]. |
3 | Указать действие, которое должно быть применено для маршрутной информации. | esr(config-route-map-rule)# action <ACT> | <ACT> – назначаемое действие:
|
4 | Задать ACL, для которого должно срабатывать правило (не обязательно). | esr(config-route-map-rule)# match ip access-group <NAME> | <NAME> – имя списка контроля доступа, задаётся строкой до 31 символа. |
5 | Задать Next-Hop для пакетов, которые попадают под критерии в указанном списке доступа (ACL) (не обязательно). | esr(config-route-map-rule)# action set ip next-hop verify-availability <NEXTHOP><METRIC> | <NEXTHOP> – IP-адрес шлюза задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <METRIC> – метрика маршрута, принимает значения [0..255]. |
6 | Назначить политику маршрутизации на основе списков доступа (ACL). | esr(config-if-gi)# ip policy route-map <NAME> | <NAME> – имя сконфигурированной политики маршрутизации, строка до 31 символа. |
7 | Разрешить фильтрацию и модификацию локального трафика на основе политики маршрутизации. | esr(config)# ip local policy [ vrf <VRF> ] route-map <NAME> | <NAME> – имя сконфигурированной политики маршрутизации, строка до 31 символа. |
Пример настройки Route-map на основе списков доступа (Policy-based routing)
Задача:
Распределить трафик между Интернет-провайдерами на основе подсетей пользователей.
Предварительно нужно назначить IP-адреса на интерфейсы.
Требуется направлять трафик с адресов 10.0.20.0/24 через ISP1 (184.45.0.150), а трафик с адресов 10.0.30.0/24 – через ISP2 (80.16.0.23). Требуется контролировать доступность адресов провайдеров (работоспособность подключений к ISP), и при неработоспособности одного из подключений переводить с него на рабочее подключение весь трафик.
Решение:
Создаем ACL:
esr# configure esr(config)# ip access-list extended sub20 esr(config-acl)# rule 1 esr(config-acl-rule)# match source-address 10.0.20.0 255.255.255.0 esr(config-acl-rule)# match destination-address any esr(config-acl-rule)# match protocol any esr(config-acl-rule)# action permit esr(config-acl-rule)# enable esr(config-acl-rule)# exit esr(config-acl)# exit esr(config)# ip access-list extended sub30 esr(config-acl)# rule 1 esr(config-acl-rule)# match source-address 10.0.30.0 255.255.255.0 esr(config-acl-rule)# match destination-address any esr(config-acl-rule)# match protocol any esr(config-acl-rule)# action permit esr(config-acl-rule)# enable esr(config-acl-rule)# exit esr(config-acl)# exit
Создаем политику:
esr(config)# route-map PBR
Создаем правило 1:
esr(config-route-map)# rule 1
Указываем список доступа (ACL) в качестве фильтра:
esr(config-route-map-rule)# match ip access-group sub20
Указываем next-hop для sub20:
esr(config-route-map-rule)# action set ip next-hop verify-availability 184.45.0.150 10 esr(config-route-map-rule)# action set ip next-hop verify-availability 80.16.0.23 30 esr(config-route-map-rule)# exit esr(config-route-map)# exit
Правилом 1 будет обеспечена маршрутизация трафика из сети 10.0.20.0/24 на адрес 184.45.0.150, а при его недоступности – на адрес 80.16.0.23. Приоритетность шлюзов задается значениями метрик – 10 и 30.
Создаем правило 2:
esr(config-route-map)# rule 2
Указываем список доступа (ACL) в качестве фильтра:
esr(config-route-map-rule)# match ip access-group sub30
Указываем nexthop для sub30 и выходим:
esr(config-route-map-rule)# action set ip next-hop verify-availability 80.16.0.23 10 esr(config-route-map-rule)# action set ip next-hop verify-availability 184.45.0.150 30 esr(config-route-map-rule)# exit esr(config-route-map)# exit
Правилом 2 будет обеспечена маршрутизация трафика из сети 10.0.30.0/24 на адрес 80.16.0.23, а при его недоступности – на адрес 184.45.0.150. Приоритетность задается значениями метрик.
Заходим на интерфейс TE 1/0/1:
esr(config)# interface tengigabitethernet 1/0/1
Привязываем политику на соответствующий интерфейс:
esr(config-if-te)# ip policy route-map PBR
Настройка VRF
VRF (Virtual Routing and Forwarding) – технология, которая позволяет изолировать маршрутную информацию, принадлежащую различным классам (например, маршруты одного клиента).
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Создать экземпляр VRF и перейти в режим настройки параметров экземпляра VRF. | esr(config)# ip vrf <VRF> | <VRF> – имя экземпляра VRF, задается строкой до 31 символа. |
2 | Назначить описание конфигурируемого экземпляра VRF. | esr(config-vrf)# description <DESCRIPTION> | <DESCRIPTION> – описание экземпляра VRF, задаётся строкой до 255 символов. |
3 | Настроить емкость таблиц маршрутизации в конфигурируемом VRF для IPv4/IPv6 протоколов маршрутизации (не обязательно). | esr(config-vrf)# ip protocols <PROTOCOL> max-routes <VALUE> | <PROTOCOL> – вид протокола, принимает значения: ospf, bgp; <VALUE> – количество маршрутов в маршрутной таблице, принимает значения в диапазоне:
Значение по умолчанию: 0. |
esr(config-vrf)#ipv6 protocols <PROTOCOL> max-routes <VALUE> | |||
4 | Включить и настроить протоколы динамической маршрутизации трафика (Static/OSPF/BGP/IS-IS) в экземпляре VRF (не обязательно). См. соответствующий раздел Конфигурирование статических маршрутов, Настройка OSPF и Настройка BGP. | ||
5 | В режиме конфигурирования физического/логического интерфейса, туннеля, правила DNAT/SNAT, DAS-сервера или SNMPv3 пользователя указать имя экземпляра VRF для которого будет использоваться (при необходимости). | esr(config-snat-ruleset)# ip vrf forwarding <VRF> | <VRF> – имя экземпляра VRF, задается строкой до 31 символа. |
6 | Настроить LT-туннель для передачи трафика в глобальный режим или другие VRF (при необходимости). | См. раздел Настройка LT-туннелей. |
Пример настройки
Задача:
К маршрутизатору ESR подключены 2 сети, которые необходимо изолировать от остальных сетей.
Решение:
Создадим VRF:
esr(config)# ip vrf bit esr(config-vrf)# exit
Создадим зону безопасности:
esr(config)# security zone vrf-sec esr(config-zone)# ip vrf forwarding bit esr(config-zone)# exit
Создадим правило для пары зон и разрешим любой TCP/UDP-трафик:
esr(config)# security zone-pair vrf-sec vrf-sec esr(config-zone-pair)# rule 1 esr(config-zone-rule)# match source-address any esr(config-zone-rule)# match destination-address any esr(config-zone-rule)# match protocol udp esr(config-zone-rule)# match source-port any esr(config-zone-rule)# match destination-port any esr(config-zone-rule)# action permit esr(config-zone-rule)# enable esr(config-zone-rule)# exit esr(config-zone-pair)# rule 2 esr(config-zone-rule)# match source-address any esr(config-zone-rule)# match destination-address any esr(config-zone-rule)# match protocol tcp esr(config-zone-rule)# match source-port any esr(config-zone-rule)# match destination-port any esr(config-zone-rule)# action permit esr(config-zone-rule)# enable esr(config-zone-rule)# exit
Создадим привязку интерфейсов, назначим IP-адреса, укажем принадлежность к зоне:
esr(config)# interface gigabitethernet 1/0/7 esr(config-if-gi)# ip vrf forwarding bit esr(config-if-gi)# ip address 10.20.0.1/24 esr(config-if-gi)# security-zone vrf-sec esr(config-if-gi)# exit esr(config)# interface gigabitethernet 1/0/14.10 esr(config-if-sub)# ip vrf forwarding bit esr(config-if-sub)# ip address 10.30.0.1/16 esr(config-if-sub)# security-zone vrf-sec esr(config-if-sub)# exit esr(config)# exit
Информацию об интерфейсах, привязанных к VRF, можно посмотреть командой:
esr# show ip vrf
Таблицу маршрутов VRF можно просмотреть с помощью команды:
esr# show ip route vrf bit
Настройка MultiWAN
Технология MultiWAN позволяет организовать отказоустойчивое соединение с резервированием линков от нескольких провайдеров, а также решает проблему балансировки трафика между резервными линками.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Сконфигурировать интерфейсы, по которым будет работать MultiWAN: установить IP-адреса и указать security-zone. | ||
2 | Прописать статические маршруты через WAN (если необходимо). | esr(config)# ip route <SUBNET> wan load-balance rule <ID> [<METRIC>] | <ID> – идентификатор создаваемого правила из п.2. [METRIC] – метрика маршрута, принимает значения [0..255]. |
3 | Создать правило WAN и перейти в режим настройки параметров правила. | esr(config)# wan load-balance rule <ID> | <ID> – идентификатор создаваемого правила, принимает значения [1..50]. |
4 | Задать интерфейсы или туннели, которые являются шлюзами в маршруте, создаваемом службой MultiWAN. | esr(config-wan-rule)# outbound | <IF>– имя интерфейса; <TUN> – имя туннеля; [WEIGHT] – вес туннеля или интерфейса, определяется в диапазоне [1..255]. Если установить значение 2, то по данному интерфейсу будет передаваться в 2 раза больше трафика, чем по интерфейсу со значением по умолчанию. В режиме резервирования активным будет маршрут с наибольшим весом. Значение по умолчанию 1. |
5 | Описать правила (не обязательно). | esr(config-wan-rule)# description <DESCRIPTION> | <DESCRIPTION> – описание правила wan, задаётся строкой до 255 символов. |
6 | Данной командой осуществляется переключение из режима балансировки в режим резервирования (если необходимо). | esr(config-wan-rule)# failover | |
7 | Данной командой включается отправка ответных пакетов сессии через тот же интерфейс, через который получены входящие пакеты сессии (если необходимо). | esr(config-wan-rule)# stickiness | |
8 | Включить wan-правило. | esr(config-wan-rule)# enable | |
9 | Создать список IP-адресов для проверки целостности соединения и осуществить переход в режим настройки параметров списка. | esr(config)# wan load-balance target-list <NAME> | <NAME> – название списка, задается строкой до 31 символа. |
10 | Задать цель проверки и перейти в режим настройки параметров цели. | esr(config-target-list)# target <ID> | <ID> – идентификатор цели, задаётся в пределах [1..50]. Если при удалении используется значение параметра «all», то будут удалены все цели для конфигурируемого списка целей. |
11 | Описать target (не обязательно). | esr(config-wan-target)# description <DESCRIPTION> | <DESCRIPTION> – описание target, задаётся строкой до 255 символов. |
12 | Указать время ожидания ответа на запрос по протоколу ICMP (не обязательно). | esr(config-wan-target)# resp-time <TIME> | <TIME> – время ожидания, определяется в секундах [1..30]. |
13 | Указать IP-адрес проверки. | esr(config-wan-target)# ip address <ADDR> | <ADDR> – IP-адрес назначения, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
esr(config-wan-target)# ipv6 address <IPV6-ADDR> | <IPV6-ADDR> – IPv6-адрес назначения, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]. | ||
14 | Включить проверку цели. | esr(config-wan-target)# enable | |
Команды для пунктов 14–17 необходимо применить на интерфейсах/туннелях в MultiWAN. | |||
15 | Включить WAN-режим на интерфейсе для IPv4/IPv6-стека. | esr(config-if-gi)# wan load-balance enable | |
esr(config-if-gi)# ipv6 wan load-balance enable | |||
16 | Задать количество неудачных попыток проверки соединения, после которых, при отсутствии ответа от встречной стороны, соединение будет считается неактивным (не обязательно). | esr(config-if-gi)# wan load-balance failure-count <VALUE> | <VALUE> – количество попыток, определяется в диапазоне [1..10]. Значение по умолчанию: 1. |
esr(config-if-gi)# ipv6 wan load-balance failure-count <VALUE> | |||
17 | Задать количество успешных попыток проверки соединения, после которых, в случае успеха, соединение считается вновь активным (не обязательно). | esr(config-if-gi)# wan load-balance success-count <VALUE> | <VALUE> – количество попыток, определяется в диапазоне [1..10]. Значение по умолчанию: 1. |
esr(config-if-gi)# ipv6 wan load-balance success-count <VALUE> | |||
18 | Задать IP-адрес соседа, который будет указан в качестве одного из шлюзов в статическом маршруте, создаваемом службой MultiWAN. | esr(config-if-gi)# wan load-balance nexthop { <IP> | dhcp enable | tunnel enable } | <IP> – IP-адрес назначения (шлюз), задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. dhcp enable – если на интерфейсе IP-адрес получен через DHCP-клиента, используется шлюз с DHCP-сервера. tunnel enable – использовать в качестве nexthop – p-t-p адрес назначения. Применимо для подключаемых интерфейсов, работающих через ppp. |
esr(config-if-gi)# ipv6 wan load-balance nexthop { <IPV6> } | <IPV6> – IPv6-адрес назначения (шлюз), задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]. | ||
19 | Данной командой будут проверяться IP-адреса из списка проверки целостности. В случае недоступности всех (по умолчанию)/хотя бы одной (с использованием ключа chack-all) из проверяемых узлов, шлюз будет считаться недоступным. | esr(config-if-gi)# wan load-balance target-list { check-all | <NAME> } | <NAME> – проверку производить на основании конкретного target листа (заданного в п.7). check-all – проверку производить на основании всех target листа. |
esr(config-if-gi)# ipv6 wan load-balance target-list { check-all | <NAME> } | |||
20 | Прописать статические маршруты через WAN. | esr(config)# ip route <SUBNET> wan load-balance rule <ID> [<METRIC>] | <ID> – идентификатор создаваемого правила из п.2. [METRIC] – метрика маршрута, принимает значения [0..255]. |
esr(config)# ipv6 route <SUBNET> wan load-balance rule <ID [<METRIC>] |
Пример настройки
Задача:
Настроить маршрут к серверу (108.16.0.1/28) с возможностью балансировки нагрузки.
Решение:
Предварительно нужно выполнить следующие действия:
- настроить зоны для интерфейсов te1/0/1 и te1/0/2;
- указать IP-адреса для интерфейсов te1/0/1 и te1/0/2.
Основной этап конфигурирования:
Настроим маршрутизацию:
esr(config)# ip route 108.16.0.0/28 wan load-balance rule 1
Создадим правило WAN:
еsr(config)# wan load-balance rule 1
Укажем участвующие интерфейсы:
еsr(config-wan-rule)# outbound interface tengigabitethernet 1/0/2 еsr(config-wan-rule)# outbound interface tengigabitethernet 1/0/1
Включим созданное правило балансировки и выйдем из режима конфигурирования правила:
еsr(config-wan-rule)# enable еsr(config-wan-rule)# exit
Создадим список для проверки целостности соединения:
еsr(config)# wan load-balance target-list google
Создадим цель проверки целостности:
esr(config-target-list)# target 1
Зададим адрес для проверки, включим проверку указанного адреса и выйдем:
еsr(config-wan-target)# ip address 8.8.8.8 еsr(config-wan-target)# enable еsr(config-wan-target)# exit
Настроим интерфейсы. В режиме конфигурирования интерфейса te1/0/1 указываем nexthop:
еsr(config)# interface tengigabitethernet 1/0/1 еsr(config-if)# wan load-balance nexthop 203.0.0.1
В режиме конфигурирования интерфейса te1/0/1 указываем список целей для проверки соединения:
еsr(config-if)# wan load-balance target-list google
В режиме конфигурирования интерфейса te1/0/1 включаем WAN-режим и выходим:
еsr(config-if)# wan load-balance enable еsr(config-if)# exit
В режиме конфигурирования интерфейса te1/0/2 указываем nexthop:
еsr(config)# interface tengigabitethernet 1/0/2 еsr(config-if)# wan load-balance nexthop 65.6.0.1
В режиме конфигурирования интерфейса te1/0/2 указываем список целей для проверки соединения:
еsr(config-if)# wan load-balance target-list google
В режиме конфигурирования интерфейса te1/0/2 включаем WAN-режим и выходим:
еsr(config-if)# wan load-balance enable еsr(config-if)# exit
Для переключения в режим резервирования настроим следующее:
Заходим в режим настройки правила WAN:
еsr(config)# wan load-balance rule 1
Функция MultiWAN также может работать в режиме резервирования, в котором трафик будет направляться в активный интерфейс с наибольшим весом. Включить данный режим можно следующей командой:
еsr(config-wan-rule)# failover
Настройка IS-IS
IS-IS — протокол динамической маршрутизации, стандартизированный ISO, основанный на состояниях линков (link-state). Он обеспечивает быструю сходимость и отличную масштабируемость, экономно использует пропускную способность сетей, использует Алгоритм Дейкстры для просчёта наилучших маршрутов. Отличительной особенностью протокола IS-IS является работа поверх канального уровня модели OSI, поэтому он не привязан к конкретному протоколу сетевого уровня.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Cоздать IS-IS процесс и перейти в режим настройки параметров этого процесса. | esr(config)# router isis <ID> [vrf <VRF>] | <ID> – номер процесса, принимает значения [1..65535]; <VRF> – имя экземпляра VRF, задается строкой до 31 символа. |
2 | Установить NET-адрес. | esr(config-isis)# net {<NET>} | <NET> – NET-адрес, формат: ff[.ffff.ffff.ffff.ffff.ffff.ffff].ffff.ffff.ffff.00. |
3 | Включить IS-IS процесс. | esr(config-isis)# enable | |
4 | Установить алгоритм аутентификации для L2-уровня (не обязательно). | esr(config-isis)# authentication domain algorithm <ALGORITHM> | <ALGORITHM> – алгоритм аутентификации:
|
5 | Установить пароль аутентификации для L2-уровня (не обязательно). | esr(config-isis)# authentication domain key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой 8 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером 8 байт (16 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
6 | Установить список ключей для аутентификации (не обязательно). | esr(config-isis)# authentication domain key chain <KEYCHAIN> | <KEYCHAIN> – идентификатор списка ключей, задаётся строкой до 16 символов. |
7 | Выбрать алгоритм аутентификации для L1-уровня (не обязательно). | esr(config-isis)# authentication area algorithm <ALGORITHM> | <ALGORITHM> – алгоритм аутентификации:
|
8 | Установить пароль аутентификации для L1-уровня (не обязательно). | esr(config-isis)# authentication area key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой 8 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером 8 байт (16 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
9 | Установить список ключей для аутентификации (не обязательно). | esr(config-isis)# authentication area key chain <KEYCHAIN> | <KEYCHAIN> – идентификатор списка ключей, задаётся строкой до 16 символов. |
10 | Включить передачу имени маршрутизатора в LSP (не обязательно). | esr(config-isis)# hostname dynamic | |
11 | Установить уровень работы IS-IS процесса (не обязательно). | esr(config-isis)# is-type {<LEVEL>} | <LEVEL> – уровень работы протокола IS-IS:
|
12 | Установить тип метрики, который будет использоваться в работе IS-IS процесса (не обязательно). | esr(config-isis)# metric-style { narrow | wide | transition } [<LEVEL>] | narrow – принимает и генерирует TLV (о достижимости сетей) старого типа; wide – принимает и генерирует TLV (о достижимости сетей) нового типа; transition – принимает и генерирует TLV (о достижимости сетей) нового и старого типа; <LEVEL> – уровень работы протокола IS-IS:
|
13 | Установить приоритетность маршрутов для данного IS-IS процесса (не обязательно). | esr(config-isis)# preference {<VALUE>} | <VALUE> – принимает значения [1..255]. |
14 | Включить работу IS-IS с IPv4 и/или IPv6 адресами (не обязательно). | esr(config-isis)# address-family { ipv4 | ipv6 } | ipv4 – семейство адресов IPv4; ipv6 – семейство адресов IPv6. |
15 | Установить интервал обновления собственных LSP (не обязательно). | esr(config-isis)# lsp-refresh-interval { min | max } <TIME> [ <LEVEL> ] | min – минимальный интервал обновления/генерации; max – максимальный интервал обновления/генерации; <TIME> – время в секундах, принимает значения [1..65535]; <LEVEL> – уровень работы протокола IS-IS:
|
16 | Установить время жизни собственных LSP (не обязательно). | esr(config-isis)# max-lsp-lifetime <TIME> [<LEVEL>] | <TIME> – время в секундах, принимает значения [1..65535]; <LEVEL> – уровень работы протокола IS-IS:
|
17 | Установить таймаут перед следующим расчётом SPF (не обязательно). | esr(config-isis)# spf-timeout <TIME> [<LEVEL>] | <TIME> – время в миллисекундах, принимает значения [1..10000]; <LEVEL> – уровень работы протокола IS-IS:
|
18 | Включить анонсирование маршрутов, полученных альтернативным способом (не обязательно). | esr(config-isis)# redistribute bgp <AS> [ route-map <NAME> ] [is-type <LEVEL>] | <AS> – номер автономной системы, может принимать значения [1..4294967295]; <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых маршрутов, задаётся строкой до 31 символа; <LEVEL> – уровень работы протокола IS-IS:
|
esr(config-isis)# redistribute ipv6 bgp <AS> [ route-map <NAME> ] [is-type <LEVEL>] | |||
esr(config-isis)# redistribute ospf <ID> <ROUTE-TYPE> [ route-map <NAME> ] [is-type <LEVEL>] | <ID> – номер процесса, может принимать значение [1..65535]; <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых OSPF-маршрутов, задаётся строкой до 31 символа; <LEVEL> – уровень работы протокола IS-IS:
| ||
esr(config-isis)# redistribute ipv6 ospf <ID> <ROUTE-TYPE> [ route-map <NAME> ] [is-type <LEVEL>] | |||
esr(config-isis)# redistribute isis <ID> <ROUTE-TYPE> [ route-map <NAME> ] [is-type <LEVEL>] | <ID> – номер процесса, может принимать значение [1..65535]; <ROUTE-TYPE> – тип маршрута:
<NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых IS-IS-маршрутов, задаётся строкой до 31 символа; <LEVEL> – уровень работы протокола IS-IS:
| ||
esr(config-isis)# redistribute rip [ route-map <NAME> ] [is-type <LEVEL>] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых RIP-маршрутов, задаётся строкой до 31 символа; <LEVEL> – уровень работы протокола IS-IS:
| ||
esr(config-isis)# redistribute ipv6 rip [ route-map <NAME> ] [is-type <LEVEL>] | |||
esr(config-isis)# redistribute static [ route-map <NAME> ] [is-type <LEVEL>] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых статических маршрутов, задаётся строкой до 31 символа; <LEVEL> – уровень работы протокола IS-IS:
| ||
esr(config-isis)# redistribute connected [ route-map <NAME> ] [is-type <LEVEL>] | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых подключённых маршрутов, задаётся строкой до 31 символа; <LEVEL> – уровень работы протокола IS-IS:
| ||
19 | Добавить фильтрацию подсетей во входящих или исходящих обновлениях (не обязательно). | esr(config-isis)# prefix-list { ipv6 <LIST_NAME> | <LIST_NAME> } {in|out} | <LIST-NAME> – имя сконфигурированного списка подсетей, задаётся строкой до 31 символа. in – фильтрация входящих маршрутов; out – фильтрация анонсируемых маршрутов. |
20 | Добавить фильтрацию подсетей во входящих или исходящих обновлениях (не обязательно). | esr(config-isis)# route-map <NAME> {in|out} | <NAME> – имя маршрутной карты, которая будет использоваться для фильтрации и модификации анонсируемых маршрутов, задаётся строкой до 31 символа. |
21 | Установить принадлежность интерфейса к определенному IS-IS процессу. | esr(config-if-gi)# isis instance <ID> | <ID> – номер процесса, принимает значения [1..65535]. |
22 | Включить работу протокола IS-IS на интерфейсе. | esr(config-if-gi)# isis enable | |
23 | Включить использование TLV#8 в hello-пакетах (не обязательно). | esr(config-if-gi)# isis hello-padding | |
24 | Установить приоритет при выборе DIS (не обязательно). | esr(config-if-gi)# isis priority <VALUE> [<LEVEL>] | <VALUE> – число, принимающее значения [0..127]; <LEVEL> – уровень работы протокола IS-IS:
|
25 | Установить значение метрики для интерфейсa (не обязательно). | esr(config-if-gi)# isis metric <VALUE> [<LEVEL>] | <VALUE> – число, принимающее значения [1..16777215]; <LEVEL> – уровень работы протокола IS-IS:
|
26 | Установить на каком уровне маршрутизации будет работать текущий процесс IS-IS на конкретном интерфейсе (не обязательно). | esr(config-if-gi)# isis circuit-type {<LEVEL>} | <LEVEL> – уровень работы протокола IS-IS:
|
27 | Установить интервал отправки hello-пакетов (не обязательно). | esr(config-if-gi)# isis hello-interval <TIME> [<LEVEL>] | <TIME> – время в секундах, принимает значения [1..65535]; <LEVEL> – уровень работы протокола IS-IS:
|
28 | Установить множитель для вычисления и отправки Hold Time (не обязательно). | esr(config-if-gi)# isis hello-multiplier <VALUE> [<LEVEL>] | <VALUE> – число, принимающее значения [3..1000]; <LEVEL> – уровень работы протокола IS-IS:
|
29 | Перевести интерфейс в режим работы point-to-point протокола IS-IS (не обязательно). | esr(config-if-gi)# isis network point-to-point | |
30 | Установить интервал генерации и отправки CSNP (не обязательно). | esr(config-if-gi)# isis csnp-interval <TIME> [<LEVEL>] | <TIME> – время в секундах, принимает значения [1..65535]; <LEVEL> – уровень работы протокола IS-IS:
|
31 | Установить интервал генерации и отправки PSNP (не обязательно). | esr(config-if-gi)# isis psnp-interval <TIME> [<LEVEL>] | <TIME> – время в секундах, принимает значения [1..65535]; <LEVEL> – уровень работы протокола IS-IS:
|
32 | Установить интервал между передачами LSP в Broadcast-сети (не обязательно). | esr(config-if-gi)# isis lsp-interval <TIME> [<LEVEL>] | <TIME> – время в миллисекундах, принимает значения [1-10000]; <LEVEL> – уровень работы протокола IS-IS:
|
33 | Установить интервал повторного распространения LSP в PtP-сети (не обязательно). | esr(config-if-gi)# isis lsp-retransmit-interval <TIME> [<LEVEL>] | <TIME> – время в секундах, принимает значения [1..65535]; <LEVEL> – уровень работы протокола IS-IS:
|
34 | Установить алгоритм аутентификации для hello-пакетов (не обязательно). | esr(config-if-gi)# isis authentication algorithm <ALGORITHM> [<LEVEL>] | <ALGORITHM> – алгоритм аутентификации:
<LEVEL> – уровень работы протокола IS-IS:
|
35 | Установить пароль для аутентификации hello-пакетов (не обязательно). | esr(config-if-gi)# isis authentication key ascii-text { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } [<LEVEL>] | <CLEAR-TEXT> – пароль, задаётся строкой 8 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером 8 байт (16 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...); <LEVEL> – уровень работы протокола IS-IS:
|
36 | Установить список ключей для аутентификации hello-пакетов (не обязательно). | esr(config-if-gi)# isis authentication key chain <KEYCHAIN> [<LEVEL>] | <KEYCHAIN> – идентификатор списка ключей, задаётся строкой до 16 символов; <LEVEL> – уровень работы протокола IS-IS:
|
Пример настройки
Задача:
Настроить протокол IS-IS на маршрутизаторах для обмена маршрутной информацией с соседями. Маршрутизатор ESR1 будет L1-only, ESR2 – L1/L2, ESR3 – L2-only, который также будет находится в другой area.
Решение:
Предварительно нужно настроить IP-адреса на интерфейсах согласно схеме, приведенной на рисунке.
Перейдём к настройке маршрутизатора ESR1. Создадим IS-IS процесс с идентификатором 1 и перейдём в режим конфигурирования протокола:
ESR1(config)# router isis 1
Зададим номер зоны, в которой будет работать маршрутизатор и его системный идентификатор:
ESR1(config-isis)# net 49.0001.1111.1111.1111.00
Настроим работу маршрутизатора только на первом уровне протокола IS-IS:
ESR1(config-isis)# is-type level-1
Зададим работу маршрутизатора с узкой метрикой на первом уровне:
ESR1(config-isis)# metric-style narrow level-1
Включим работу процесса IS-IS на маршрутизаторе:
ESR1(config-isis)# enable
Перейдём к конфигурированию интерфейсов. Нужно задать номер процесса IS-IS, который будет работать на интерфейсе и включить работу самого протокола на нём:
ESR1(config-if-gi)# isis instance 1 ESR1(config-if-gi)# isis enable
Перейдём к настройке маршрутизатора ESR2:
ESR2(config)# router isis 2
Зададим номер зоны такой же, как на ESR1, а также уникальный системный идентификатор:
ESR2(config-isis)# net 49.0001.2222.2222.2222.00
Зададим работу маршрутизатора с узкой метрикой на первом уровне и с широкой метрикой на втором и включим работу данного процесса IS-IS:
ESR2(config-isis)# metric-style narrow level-1 ESR2(config-isis)# metric-style wide level-2 ESR2(config-isis)# enable
Настроим работу интерфейсов на маршрутизаторе. На обоих интерфейсах настройка будет одинаковая:
ESR2(config-if-gi)# isis instance 2 ESR2(config-if-gi)# isis enable
Перейдём к настройке маршрутизатора ESR3:
ESR3(config)# router isis 3 ESR3(config-isis)# net 49.0002.3333.3333.3333.00 ESR3(config-isis)# is-type level-2 ESR3(config-isis)# metric-style wide level-2 ESR3(config-isis)# enable ESR3(config-if-gi)# isis instance 3 ESR3(config-if-gi)# isis enable
Установление соседства можно посмотреть командой show isis neighbors. Выполним её на ESR2:
ESR2# show isis neighbors IS-IS 2 IS-IS Level 1 Neighbors System ID Hostname Interface State Holdtime SNPA 1111.1111.1111 ESR1 gi1/0/2 Up 25 a8f9.4baa.1d42 IS-IS Level 2 Neighbors System ID Hostname Interface State Holdtime SNPA 3333.3333.3333 ESR3 gi1/0/1 Up 8 a8f9.4bab.813a