Настройка протокола LDP
LDP — протокол распределения меток. Для нахождения соседей используется рассылка hello-сообщений на мультикастный адрес 224.0.0.2. При обмене hello-сообщениями маршрутизаторы узнают транспортные адреса друг друга. Маршрутизатор с большим адресом инициализирует TCP-сессию. После проверки параметров LDP-сессия считается установленной.
В маршрутизаторах ESR поддержаны следующие режимы работы LDP:
- Режим обмена информации о меткаx — Downstream Unsolicited;
- Механизм контроля за распространением меток — Independent Label Distribution Control;
- Режим сохранения меток — Liberal Label Retention.
На интерфейсах, где включены протокол LDP и MPLS-коммутация, firewall должен быть отключен.
В текущей реализации протокол LDP работает только с IPv4-адресами.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | В контексте настройки параметров MPLS указать интерфейсы, участвующие в процессе MPLS-коммутации. | esr(config-mpls)# forwarding interface { <IF> | <TUN> } | <IF> – имя интерфейса устройства, задаётся в виде, описанном в разделе Типы и порядок именования интерфейсов маршрутизатора; <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. |
2 | Задать router-id для LDP (не обязательно, если указан transport-address). | esr(config-ldp)# router-id { <ID> | <IF> | <TUN> } | <ID> – идентификатор маршрутизатора, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. <IF> – интерфейс, задаётся в виде, описанном в разделе <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. |
3 | В контексте настройки address family ipv4 указать transport-address (не обязательно, если указан router-id). | esr(config-ldp-af-ipv4)# transport-address <ADDR> | <ADDR> – задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
4 | В контексте настройки address family ipv4 указать интерфейсы для включения на них процесса LDP. | esr(config-ldp-af-ipv4)# interface { <IF> | <TUN> } | <IF> – имя интерфейса устройства, задаётся в виде, описанном в разделе Типы и порядок именования интерфейсов маршрутизатора; <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. |
5 | Включить процесс LDP. | esr(config-ldp)# enable | |
6 | Включить функционал explicit-null (не обязательно). | esr(config-ldp)# egress-label-type explicit-null | |
7 | В режиме конфигурирования соседа LDP задать пароль командой password (не обязательно). | esr(config-ldp-neig)# password {<TEXT> | ENCRYPTED-TEXT>} | <CLEAR-TEXT> – пароль, задаётся строкой длиной [8..16] символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером [8..16] байт ([16..32] символа) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
В рамках настройки протокола LDP также доступен следующий функционал:
|
Если изменить значение router-id, то новое значение будет применено только после рестарта данного протокола. Для рестарта mpls ldp используется команда clear mpls ldp.
Пример настройки
Задача:
Настроить взаимодействие по протоколу LDP между пирами.
Решение:
Предварительная конфигурация маршрутизаторов:
На интерфейсы должны быть назначены IP-адреса, отключен межсетевой экран и настроен один из протоков внутренней маршрутизации.
Предварительная конфигурация ESR:
hostname ESR router ospf 1 area 0.0.0.0 enable exit enable exit interface gigabitethernet 1/0/1 ip firewall disable ip address 10.10.10.1/30 ip ospf instance 1 ip ospf exit interface loopback 1 ip address 1.1.1.1/32 ip ospf instance 1 ip ospf exit
Предварительная конфигурация ESR1:
hostname ESR1 router ospf 1 area 0.0.0.0 enable exit enable exit interface gigabitethernet 1/0/1 ip firewall disable ip address 10.10.10.2/30 ip ospf instance 1 ip ospf exit interface loopback 1 ip address 4.4.4.4/32 ip ospf instance 1 ip ospf exit
Настройка на ESR:
ESR# config ESR(config)# mpls ESR(config-mpls)# forwarding interface gigabitethernet 1/0/1 ESR(config-mpls)# ldp ESR(config-ldp)# router-id 1.1.1.1 ESR(config-ldp)# enable ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1 ESR(config-ldp-af-ipv4-if)# end ESR#
Настройка на ESR1:
ESR1# configure ESR1(config)# mpls ESR1(config-mpls)# forwarding interface gigabitethernet 1/0/1 ESR1(config-mpls)# ldp ESR1(config-ldp)# router-id 4.4.4.4 ESR1(config-ldp)# enable ESR1(config-ldp)# address-family ipv4 ESR1(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1 ESR1(config-ldp-af-ipv4-if)# end ESR1#
Проверка:
На одном из пиров ввести следующие команды:
ESR# show mpls ldp discovery detailed Local LDP ID: 1.1.1.1 Discovery sources: Interfaces: gigabitethernet 1/0/1: Hello interval: 5 seconds Transport IP address: 1.1.1.1 LDP ID: 4.4.4.4 Source IP address: 10.10.10.2 Transport IP address: 4.4.4.4 Hold time: 15 seconds Proposed hold time: 90/15 (local/peer) seconds
Вывод покажет параметры соседнего пира, полученные из мультикастовых hello-сообщений.
Сессия LDP должна находиться в статусе «Operational».
ESR1# show mpls ldp neighbor Peer LDP ID: 4.4.4.4; Local LDP ID 1.1.1.1 State: Operational TCP connection: 4.4.4.4:40245 - 1.1.1.1:646 Messages sent/received: 10/11 Uptime: 00:00:58 LDP discovery sources: gigabitethernet 1/0/1
Конфигурирование параметров сессии в протоколе LDP
По умолчанию в рассылаемых hello-сообщениях установлены следующие значения:
Параметр | LDP |
---|---|
Hello interval | 5 секунд |
Hold timer | 15 секунд |
Keepalive holdtime | 180 секунд |
Hold timer является согласуемым параметром – выбирается наименьший. В данном примере показано, что на ESR после согласования Hold timer равен 10 секундам.
ESR# sh mpls ldp discovery detailed Local LDP ID: 4.4.4.4 Discovery sources: Interfaces: gigabitethernet 1/0/4: Hello interval: 5 seconds Transport IP address: 4.4.4.4 LDP ID: 1.1.1.1 Source IP address: 10.10.10.1 Transport IP address: 1.1.1.1 Hold time: 10 seconds Proposed hold time: 15/10 (local/peer) seconds
Если после согласования Hello interval стал больше, чем Hold timer, то Hello interval будет равным Hold timer/3.
На маршрутизаторах ESR реализована возможность гибкой настройки параметров Hello holdtime, Hello interval и Keepalive holdtime. Рассмотрим пример настройки Hello holdtime для LDP-сессии:
ESR# show run mpls mpls ldp router-id 4.4.4.4 discovery hello holdtime 40 address-family ipv4 interface gigabitethernet 1/0/4 discovery hello holdtime 60 exit exit enable exit
Если параметры Hello Holdtime и Hello Interval не указаны, то используются значения по умолчанию. Если параметры указаны, то приоритет значений для address-family будет выше, чем для значений, сконфигурированных глобально.
ESR# show mpls ldp discovery detailed Local LDP ID: 4.4.4.4 Discovery sources: Interfaces: gigabitethernet 1/0/4: Hello interval: 5 seconds Transport IP address: 4.4.4.4 LDP ID: 1.1.1.1 Source IP address: 10.10.10.1 Transport IP address: 1.1.1.1 Hold time: 15 seconds Proposed hold time: 60 /15 (local/peer) seconds
Параметры, сконфигурированные в address-family, могут быть настроены на каждый отдельный интерфейс, участвующий в процессе LDP.
ESR# show running-config mpls mpls ldp router-id 4.4.4.4 discovery hello holdtime 50 discovery hello interval 10 address-family ipv4 interface gigabitethernet 1/0/1 discovery hello holdtime 60 discovery hello interval 20 exit interface gigabitethernet 1/0/4 discovery hello holdtime 30 discovery hello interval 10 exit exit enable exit
Для TCP-сессии Keepalive holdtime является также согласуемым параметром по аналогии с Hold timer. Keepalive interval рассчитывается автоматически и равен Keepalive holdtime/3. Keepalive holdtime можно задать как глобально, так и для каждого соседа. Таймер, заданный для определенного соседа, является более приоритетным.
ESR# show running-config mpls mpls ldp router-id 4.4.4.4 keepalive 30 // установлен в глобальной конфигурации LDP neighbor 1.1.1.1 keepalive 55// установлен в соседа с адресом 1.1.1.1 exit exit
ESR# sh mpls ldp neighbor 1.1.1.1 Peer LDP ID: 1.1.1.1; Local LDP ID 4.4.4.4 State: Operational TCP connection: 1.1.1.1:646 - 4.4.4.4:56668 Messages sent/received: 401/401 Uptime: 02:00:24 Peer holdtime: 55 Keepalive interval: 18 LDP discovery sources:
Алгоритм настройки параметров Hello holdtime и Hello interval в глобальной конфигурации LDP
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | В режиме конфигурации протокола LDP задать Hello holdtime. | esr(config-ldp)# discovery hello holdtime <TIME> | <TIME> – время в секундах в интервале [3..65535]. |
3 | В режиме конфигурации протокола LDP задать Hello interval. | esr(config-ldp)# discovery hello interval <TIME> | <TIME> – время в секундах в интервале [3..65535]. |
Алгоритм настройки параметров Hello holdtime и Hello interval для address family
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | В режиме конфигурации address familly протокола LDP установить Hello holdtime на нужном интерфейсе. | esr(config-ldp-af-ipv4-if)# discovery hello holdtime <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 15. |
3 | В режиме конфигурации address familly протокола LDP установить Hello interval на нужном интерфейсе. | esr(config-ldp-af-ipv4-if)# discovery hello interval <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 5. |
Алгоритм настройки параметра Keepalive holdtime в глобальной конфигурации LDP
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | В режиме конфигурации LDP задать параметр Keepalive. | esr(config-ldp)# keepalive <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 180. |
Алгоритм настройки параметра Keepalive holdtime для определенного соседа
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | В режиме конфигурации соседа задать параметр Keepalive holdtime. | esr(config-ldp-neig)# keepalive <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 180. |
Пример настройки
Задача:
Переопределить параметры Hello holdtime (40 секунд) и Hello interval (10 секунд) для всего процесса LDP. Для соседа с адресом 1.1.1.1 установить Keepalive holdtime равным 150 секунд.
Решение:
ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# discovery hello holdtime 40 ESR(config-ldp)# discovery hello interval 10 ESR(config-ldp)# neighbor 1.1.1.1 ESR(config-ldp-neig)# keepalive 150
Проверка:
Для просмотра hello-параметров:
ESR# sh mpls ldp discovery detailed Local LDP ID: 4.4.4.4 Discovery sources: Interfaces: gigabitethernet 1/0/4: Hello interval: 10 seconds Transport IP address: 4.4.4.4 LDP ID: 1.1.1.1 Source IP address: 10.10.10.1 Transport IP address: 1.1.1.1 Hold time: 15 seconds Proposed hold time: 40/15 (local/peer) seconds
Для просмотра параметров установленной TCP-сессии:
ESR# sh mpls ldp neighbor 1.1.1.1 Peer LDP ID: 1.1.1.1; Local LDP ID 4.4.4.4 State: Operational TCP connection: 1.1.1.1:646 - 4.4.4.4:45414 Messages sent/received: 15/15 Uptime: 00:06:31 Peer holdtime: 150 Keepalive interval: 50 LDP discovery sources:
Конфигурирование параметров сессии в протоколе targeted-LDP
По умолчанию для targeted LDP-сессии установлены следующие значения:
Параметр | targeted-LDP |
---|---|
Hello interval | 5 секунд |
Hold timer | 45 секунд |
Keepalive holdtime | 180 секунд |
Hold timer является согласуемым параметром – выбирается наименьший. В данном примере показано, что ESR после согласования установил 30 секунд:
ESR1# sh mpls ldp discovery detailed ... Targeted hellos: 1.1.1.1 -> 4.4.4.4: Hello interval: 2 seconds Transport IP address: 1.1.1.1 LDP ID: 4.4.4.4 Source IP address: 4.4.4.4 Transport IP address: 4.4.4.4 Hold time: 30 seconds Proposed hold time: 30/45 (local/peer) seconds
Если после согласования Hello interval стал больше, чем Hold timer, то Hello interval будет равным Hold timer/3.
На маршрутизаторах ESR реализована возможность гибкой настройки параметров Hello holdtime, Hello interval и Keepalive holdtime: параметры можно задать как для всего процесса LDP, так и на соответствующего соседа.
Пример вывода для процесса LDP:
ESR# sh running-config mpls mpls ldp router-id 1.1.1.1 keepalive 160 discovery targeted-hello holdtime 30 discovery targeted-hello interval 10 exit exit
Пример вывода для targeted-LDP-сессии для определенного соседа:
ESR# sh running-config mpls mpls ldp router-id 1.1.1.1 neighbor 4.4.4.4 keepalive 160 targeted discovery targeted-hello holdtime 30 discovery targeted-hello interval 45 exit exit exit
Если параметры установлены и для процесса LDP, и на определенного соседа, приоритетом будут считаться настройки, установленные для соседа.
ESR# sh running-config mpls mpls ldp router-id 1.1.1.1 keepalive 160 discovery hello holdtime 90 discovery targeted-hello interval 30 neighbor 4.4.4.4 keepalive 140 targeted discovery targeted-hello holdtime 45 discovery targeted-hello interval 15 exit exit exit
ESR# show mpls ldp discovery detailed ... Targeted hellos: 1.1.1.1 -> 4.4.4.4: Hello interval: 15 seconds Transport IP address: 1.1.1.1 LDP ID: 4.4.4.4 Source IP address: 4.4.4.4 Transport IP address: 4.4.4.4 Hold time: 45 seconds Proposed hold time: 45/45 (local/peer) seconds ESR# show mpls ldp neighbor 4.4.4.4 Peer LDP ID: 4.4.4.4; Local LDP ID 1.1.1.1 State: Operational TCP connection: 4.4.4.4:51861 - 1.1.1.1:646 Messages sent/received: 10/10 Uptime: 00:00:09 Peer holdtime: 140 Keepalive interval: 46 LDP discovery sources: 1.1.1.1 -> 4.4.4.4:
Алгоритм настройки параметров Hello holdtime, Hello interval и Keepalive holdtime для процесса LDP
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | В режиме конфигурации протокола LDP задать Hello holdtime. | esr(config-ldp)# discovery targeted-hello holdtime <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 45. |
3 | В режиме конфигурации протокола LDP задать Hello interval. | esr(config-ldp)# discovery targeted- hello interval <TIME> | <TIME> – время в секундах в интервале [1..65535]. Значение по умолчанию: 5. |
4 | В режиме конфигурации протокола LDP задать Keepalive holdtime. | esr(config-ldp)# keepalive <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 180. |
Алгоритм настройки параметров Hello holdtime, Hello interval и Keepalive holdtime для определенного соседа
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | В режиме конфигурации LDP-соседа задать Hello holdtime. | esr(config-ldp-neig)# discovery targeted-hello holdtime <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 45. |
3 | В режиме конфигурации LDP-соседа задать Hello interval. | esr(config-ldp-neig)# discovery targeted- hello interval <TIME> | <TIME> – время в секундах в интервале [1..65535]. Значение по умолчанию: 5. |
4 | В режиме конфигурации LDP-соседа задать Keepalive holdtime. | esr(config-ldp-neig)# keepalive <TIME> | <TIME> – время в секундах в интервале [3..65535]. Значение по умолчанию: 180. |
Пример настройки
Задача:
Переопределить параметры Hello holdtime (120 секунд) и Hello interval (30 секунд) для всего процесса targeted-LDP. Для соседа с адресом 4.4.4.4 установить Keepalive holdtime равным 150 секунд.
Решение:
ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# discovery targeted-hello holdtime 40 ESR(config-ldp)# discovery targeted-hello interval 10 ESR(config-ldp)# neighbor 4.4.4.4 ESR(config-ldp-neig)# keepalive 150
Проверка:
Для просмотра hello-параметров targeted LDP-сессии:
ESR1# sh mpls ldp discovery detailed ... Targeted hellos: 1.1.1.1 -> 4.4.4.4: Hello interval: 10 seconds Transport IP address: 1.1.1.1 LDP ID: 4.4.4.4 Source IP address: 4.4.4.4 Transport IP address: 4.4.4.4 Hold time: 40 seconds Proposed hold time: 40/45 (local/peer) seconds
Для просмотра параметров установленной TCP-сессии:
ESR# sh mpls ldp neighbor 4.4.4.4 Peer LDP ID: 4.4.4.4; Local LDP ID 1.1.1.1 State: Operational TCP connection: 4.4.4.4:34879 - 1.1.1.1:646 Messages sent/received: 11/11 Uptime: 00:01:05 Peer holdtime: 150 Keepalive interval: 50 LDP discovery sources: 1.1.1.1 -> 4.4.4.4: Hello interval: 10 seconds Holdtime: 40 seconds ...
Настройка фильтрации LDP-меток
По умолчанию маршрутизаторы выделяют на каждый FEC отдельную метку. Существуют сценарии, когда необходимо выделять MPLS-метки только для определенных FEC. Ниже рассмотрены существующие возможности для реализации фильтрации LDP-меток.
Метод на основе Advertise-labels
Данный метод позволяет аллоцировать метки протоколом LDP только на префиксы, описанные в соответствующей object-group. Отличительной особенностью данного метода является то, что префиксы должны иметь точное совпадение с маршрутом из FIB.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | Создать object-group типа network. | esr(config)# object-group network <NAME> | <NAME> – имя конфигурируемого списка подсетей, задаётся строкой до 31 символа. |
3 | Описать префиксы, для которых будут назначаться метки. | esr(config-object-group-network)# ip prefix <ADDR/LEN> | <ADDR/LEN> – IP-адрес и маска подсети, задаётся в виде AAA.BBB.CCC.DDD/EE, где каждая часть AAA – DDD принимает значения [0..255] и EE принимает значения [1..32]. |
4 | В контексте настройки LDP применить созданную object-group. | esr(config-ldp)# advertise-labels <NAME> | <NAME> – имя конфигурируемого списка подсетей, задаётся строкой до 31 символа. |
Метки будут выделяться ТОЛЬКО на описанные в object-group подсети, независимо от того, как они были изучены (connected, local, IGP и т. д.).
Данный функционал поддержан для протокола IPv4.
Пример настройки
Задача:
Назначить MPLS-метки только FEC 10.10.0.2/32 и 10.10.0.1/32.
Решение:
На ESR_A и ESR_B создадим object-group ADV_LABELS типа network и добавим в нее префиксы 10.10.0.1/32 и 10.10.0.2/32 соответственно:
esr(config)# object-group network ADV_LABELS esr(config-object-group-network)# ip prefix 10.10.0.1/32 esr(config-object-group-network)# ip prefix 10.10.0.2/32
esr(config)# object-group network ADV_LABELS esr(config-object-group-network)# ip prefix 10.10.0.1/32 esr(config-object-group-network)# ip prefix 10.10.0.2/32
Применим созданную object-group на обоих маршрутизаторах:
esr(config)# mpls esr(config-ldp)# ldp esr(config-ldp)# advertise-labels ADV_LABELS
Проверка:
На ESR_B убедимся, что метка назначена для соответствующих префиксов:
esr# sh mpls ldp bindings 10.10.0.1/32 10.10.0.1/32 local label: exp-null remote label: 75 lsr: 172.16.0.1
И не назначена для 192.168.2.0/24:
esr# sh mpls ldp bindings 192.168.2.0/24 esr#
Метод на основе Prefix-list
Данный метод позволяет управлять выделением меток для протокола LDP на основе подсетей, описанный в соответствующем Prefix-list. В отличие от метода на основе Advertise-labels, гибкость функционала Prefix-list позволяет задать диапазон (префикс), для подсетей которого будет аллоцирована метка. Данный вариант настройки является более гибким и масштабируемым.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | Создать prefix-list. | esr(config)# ip prefix-list <NAME> | <NAME> – имя конфигурируемого списка подсетей, задаётся строкой до 31 символа. |
3 | Описать подсеть, для адресов которой будут выделяться метки. | esr(config-object-group-network)# ip prefix <ADDR/LEN> [ { eq <LEN> | le <LEN> | ge <LEN> [ le <LEN> ] } | <ADDR> – IP-адрес, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <LEN> – длина префикса, принимает значения [1..32]; eq – при указании команды длина префикса должна соответствовать указанной; le – при указании команды длина префикса должна быть меньше либо соответствовать указанной; ge – при указании команды длина префикса должна быть больше либо соответствовать указанной. |
4 | В контексте настройки LDP применить prefix-list для соответствующей address-family. | esr(config-ldp-af-ipv4)# prefix-list <NAME> | <NAME> – имя конфигурируемого списка, задаётся строкой до 31 символа. |
Пример настройки
Задача:
Для организации сервисов L2VPN и L3VPN выделена подсеть 10.10.0.0/24. Необходимо средствами протокола LDP назначить транспортные MPLS-метки для всех адресов (подсетей/32), входящих в выделенный диапазон.
Решение:
На ESR_A и ESR_B создадим prefix-list и опишем необходимый для сервисов диапазон адресов:
esr(config)# ip prefix-list LDP_ALLOCATE esr(config-pl)# permit 10.10.0.0/24 eq 32
esr(config)# ip prefix-list LDP_ALLOCATE esr(config-pl)# permit 10.10.0.0/24 eq 32
Применим созданный prefix-list на обоих маршрутизаторах:
esr(config)# mpls esr(config-ldp)# ldp esr(config-ldp)# address-family ipv4 esr(config-ldp-af-ipv4)# prefix-list LDP_ALLOCATE esr(config-ldp-af-ipv4)# do commit esr(config-ldp-af-ipv4)# do confirm
Проверка:
На примере ESR_B убедимся, что метка назначена для соответствующих префиксов:
esr# sh mpls ldp bindings 10.10.0.1/32 10.10.0.1/32 local label: exp-null remote label: 45 lsr: 172.16.0.1
И не назначена для 192.168.2.0/24:
esr# sh mpls ldp bindings 192.168.2.0/24 esr#
Настройка сервиса L2VPN Martini mode
L2VPN позволяет организовать передачу ethernet-фреймов через MPLS-домен. Выделение и распространение туннельных меток в данном режиме осуществляется по средствам протокола LDP. В реализации L2VPN можно условно выделить два случая:
- P2P – туннель, создаваемый по схеме «точка-точка».
VPLS – туннель, создаваемый по схеме «точка-многоточка».
В обоих случаях для передачи ethernet-фреймов между маршрутизаторами создается виртуальный канал (далее pseudo-wire). Для согласования параметров pseudo-wire, а также для выделения и передачи туннельных меток между маршрутизаторами устанавливается LDP-сессия в targeted-режиме.
Алгоритм настройки L2VPN VPWS
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | Создать pw-class в системе и осуществить переход в режим настройки параметров pw-class. | esr(config-l2vpn)# pw-class <WORD> | <WORD> – имя pw-class длиной [1..31] символов. |
3 | Добавить описание для pw-class (не обязательно). | esr(config-l2vpn-pw-class)# description <LINE> | <LINE> – описание. Задается в виде строки длиной [1..255] символов. |
4 | Установить значение MTU для pseudo-wire входящих в pw-class (не обязательно). | esr(config-l2vpn-pw-class)# encapsulation | <MTU> – значение MTU, принимает значение в диапазоне [552..10000] Значение по умолчанию: 1500. |
5 | Отключить обмен status-tlv сообщениями (не обязательно). | esr(config-l2vpn-pw-class)# encapsulation | Значение по умолчанию: status-tlv enable. |
6 | Создать p2p-туннель в системе и осуществить переход в режим настройки параметров p2p-туннеля. | esr(config-l2vpn)# p2p <NAME> | <NAME> – имя p2p-сервиса, задается строкой до 31 символа. |
7 | Задать Attached Circuit интерфейс. | esr(config-l2vpn-p2p)# interface | <IF> – имя интерфейса устройства, задаётся в виде, описанном в разделе Типы и порядок именования интерфейсов маршрутизатора; <TUN> – имя туннеля устройства, задаётся в виде, описанном в разделе Типы и порядок именования туннелей маршрутизатора. |
8 | Включить p2p-туннель. | esr(config-l2vpn-p2p)# enable | |
9 | Задать транспортный режим (не обязательно). | esr(config-l2vpn-p2p)# transport-mode | <ethernet> – режим, при котором при входе в pseudo-wire из заголовка удаляется 802.1Q тег; <vlan> – режим, при котором 802.1Q тег может быть сохранен при передаче через pseudo-wire. Значение по умолчанию: ethernet. |
10 | Создать pseudo-wire и осуществить переход в режим настройки его параметров. | esr(config-l2vpn-p2p)# pw <PW_ID> <LSR_ID> | <PW_ID> – идентификатор psewdowire, задается в виде числа в диапазоне [1..4294967295] <LSR_ID> – идентификатор LSR, до которого строится pseudo-wire, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255] |
11 | Добавить описание для pseudo-wire (не обязательно). | esr(config-l2vpn-pw)# description <LINE> | <LINE> – описание. Задается в виде строки длиной [1..255] символов. |
12 | Задать pw-class для pseudo-wire. | esr(config-l2vpn-pw)# pw-class <WORD> | <WORD> – имя pw-class длиной [1..31] символов. |
13 | Задать адрес LSR до которого устанавливается pseudo-wire (не обязательно, если neighbor address совпадает с LSR_ID). | esr(config-l2vpn-pw)# neighbor-address <ADDR> | <ADDR> – IP-адрес маршрутизатора, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
14 | Включить pseudo-wire. | esr(config-l2vpn-pw)# enable | |
В случае если необходимо изменить параметры по умолчанию для targeted LDP-сессии, обратитесь к разделу Конфигурирование параметров сессии в протоколе targeted-LDP. |
Пример настройки L2VPN VPWS
Задача:
Настроить l2vpn таким образом, чтобы интерфейс ge1/0/2.100 маршрутизатора CE1 и интерфейс ge1/0/2.100 маршрутизатора CE2 работали в рамках одного широковещательного домена.
Решение:
Предварительно нужно:
Включить поддержку Jumbo-фреймов с помощью команды system jumbo-frames (для вступления изменений в силу требуется перезагрузка устройства);
- Настроить IP-адреса на интерфейсах согласно схеме сети, приведенной на рисунке выше;
- Организовать обмен маршрутами между PE1 и PE2 при помощи IGP-протокола (OSPF, IS-IS, RIP).
На маршрутизаторе PE1 создадим саб-интерфейс, на который будем принимать трафик от CE1:
PE1# configure PE1(config)# interface gigabitethernet 1/0/4.100 PE1(config-subif)# exit
Выставим на интерфейсе в сторону PE2 значение MTU равным 9600, для того чтобы избежать ситуации с превышением MTU после инкапсуляции MPLS-заголовка, а также отключим межсетевой экран:
PE1#(config)# interface gigabitethernet 1/0/1 PE1(config-if-gi)# mtu 9600 PE1(config-if-gi)# ip firewall disable PE1(config-if-gi)# exit
Разрешим прием пакетов с MPLS-заголовком на интерфейсе в сторону MPLS-сети (в данном примере интерфейс в сторону PE2):
PE1(config)# mpls PE1(config-mpls)# forwarding interface gigabitethernet 1/0/1
Настроим протокол LDP и включим обнаружение соседей на интерфейсе в сторону PE2:
PE1(config-mpls)# ldp PE1(config-ldp)# router-id 1.1.1.1 PE1(config-ldp)# address-family ipv4 PE1(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1 PE1(config-ldp-af-ipv4-if)# exit PE1(config-ldp-af-ipv4)# transport-address 1.1.1.1 PE1(config-ldp-af-ipv4)# exit PE1(config-ldp)# enable PE1(config-ldp)# exit
Создадим pw-class, на основе которого в дальнейшем будет создан виртуальный канал (pw). Так как в данном примере на pw будут применяться параметры по умолчанию, достаточно будет указать имя класса:
PE1(config-mpls)# l2vpn PE1(config-l2vpn)# pw-class for_p2p_VLAN100 PE1(config-l2vpn-pw-class)# exit
Создадим новый l2vpn типа p2p и добавим pw до маршрутизатора PE3, идентификатор pw для удобства возьмем равным VID (в данном случае равным 100):
PE1(config-l2vpn)# p2p to_PE2_VLAN100 PE1(config-l2vpn-p2p)# interface gigabitethernet 1/0/4.100 PE1(config-l2vpn-p2p)# pw 100 3.3.3.3 PE1(config-l2vpn-pw)# pw-class for_p2p_VLAN100 PE1(config-l2vpn-pw)# enable PE1(config-l2vpn-pw)# exit PE1(config-l2vpn-p2p)# enable PE1(config-l2vpn-p2p)# end
Применим конфигурацию:
PE1# commit PE1# confirm
Проведем настройку маршрутизатора PE2 по аналогии с PE1:
PE2# configure PE2(config)# interface gigabitethernet 1/0/4.100 PE2(config-subif)# exit PE2#(config)# interface gigabitethernet 1/0/1 PE2(config-if-gi)# mtu 9600 PE1(config-if-gi)# ip firewall disable PE1(config-if-gi)# exit PE2(config)# mpls PE2(config-mpls)# forwarding interface gigabitethernet 1/0/1 PE2(config-mpls)# ldp PE2(config-ldp)# router-id 2.2.2.2 PE2(config-ldp)# address-family ipv4 PE2(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1 PE2(config-ldp-af-ipv4-if)# exit PE2(config-ldp-af-ipv4)# transport-address 2.2.2.2 PE2(config-ldp-af-ipv4)# exit PE2(config-ldp)# enable PE2(config-ldp)# exit PE2(config-mpls)# l2vpn PE2(config-l2vpn)# pw-class for_p2p_VLAN100 PE2(config-l2vpn-pw-class)# exit PE2(config-l2vpn)# p2p to_PE1_VLAN100 PE2(config-l2vpn-p2p)# interface gigabitethernet 1/0/4.100 PE2(config-l2vpn-p2p)# pw 100 1.1.1.1 PE2(config-l2vpn-pw)# pw-class for_p2p_VLAN100 PE2(config-l2vpn-pw)# enable PE2(config-l2vpn-pw)# exit PE2(config-l2vpn-p2p)# enable PE2(config-l2vpn-p2p)# end PE2# commit PE2# confirm
Убедимся в установлении соседства по протоколу LDP и выведем информацию по статусу виртуального канала (pseudowire) между PE1 и PE2:
PE2# show mpls ldp neighbor Peer LDP ID: 1.1.1.1; Local LDP ID 2.2.2.2 State: Operational TCP connection: 1.1.1.1:646 - 2.2.2.2:34625 Messages sent/received: 12/12 Uptime: 00:03:50 LDP discovery sources: 2.2.2.2 -> 1.1.1.1
PE2# show mpls l2vpn pseudowire Neighbor PW ID Type Status --------------------------------------- ---------- ---------- ------ 1.1.1.1 100 Ethernet Up
Соседство по протоколу LDP установлено, pseudowire перешел в статус 'UP'. Настройка l2vpn типа p2p завершена.
Алгоритм настройки L2VPN VPLS
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | Создать сетевой мост в системе без указания IP-адреса (см. раздел Настройка Bridge). | ||
3 | Создать pw-class в системе и осуществить переход в режим настройки параметров pw-class. | esr(config-l2vpn)# pw-class <WORD> | <WORD> – имя pw-class длиной [1..31] символов. |
4 | Добавить описание для pw-class (не обязательно). | esr(config-l2vpn-pw-class)# description <LINE> | <LINE> – описание. Задается в виде строки длиной [1..255] символов. |
5 | Установить значение MTU для pseudo-wire входящих в pw-class (не обязательно). | esr(config-l2vpn-pw-class)# encapsulation | <MTU> – значение MTU, принимает значение в диапазоне [552..10000]. Значение по умолчанию: 1500. |
6 | Отключить обмен status-tlv сообщениями (не обязательно). | esr(config-l2vpn-pw-class)# encapsulation | Значение по умолчанию: status-tlv enable. |
7 | Создать VPLS-домен в системе и осуществить переход в режим настройки параметров VPLS-домена. | esr(config-l2vpn)# vpls <NAME> | <NAME> – имя p2p-сервиса, задается строкой до 31 символа. |
8 | Включить VPLS-туннель. | esr(config-l2vpn-vpls)# enable | |
9 | Добавить бридж-домен. | esr (config-l2vpn-vpls)# bridge-group <ID> | <ID> – идентификатор бридж-домена, задается в виде числа в диапазоне [1..250]. |
10 | Задать транспортный режим (не обязательно). | esr(config-l2vpn-vpls)# transport-mode | <ethernet> – режим, при котором при входе в pseudo-wire из заголовка удаляется 802.1Q тег; |
11 | Создать pseudo-wire и осуществить переход в режим настройки его параметров. | esr(config-l2vpn-vpls)# pw <PW_ID> <LSR_ID> | <PW_ID> – идентификатор psewdowire, задается в виде числа в диапазоне [1..4294967295 ] <LSR_ID> – идентификатор LSR до которого строится pseudo-wire, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
12 | Добавить описание для pseudo-wire (не обязательно). | esr(config-l2vpn-pw)# description <LINE> | <LINE> – описание. Задается в виде строки длиной [1..255] символов. |
13 | Задать pw-class для pseudo-wire. | esr(config-l2vpn-pw)# pw-class <WORD> | <WORD> – имя pw-class длиной [1..31] символов. |
14 | Задать адрес LSR до которого устанавливается pseudo-wire (не обязательно, если neighbor address совпадает с LSR_ID). | esr(config-l2vpn-pw)# neighbor-address <ADDR> | <ADDR> – IP-адрес маршрутизатора, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
15 | Включить pseudo-wire. | esr(config-l2vpn-pw)# enable | |
16 | В случае если топология создаваемого VPLS-домена требует установить более одного pseudo-wire, повторить шаги с 10 по 14. | ||
17 | В случае если необходимо изменить параметры по умолчанию для targeted LDP-сессии, обратитесь к разделу Конфигурирование параметров сессии в протоколе targeted-LDP. |
Пример настройки L2VPN VPLS
Задача:
Настроить l2vpn таким образом, чтобы маршрутизаторы CE1, CE2, CE3 имели L2-связность через интерфейсы gi1/0/2.100 и gi1/0/4 (CE2).
Решение:
Предварительно необходимо:
Включить поддержку Jumbo-фреймов с помощью команды system jumbo-frames (для вступления изменений в силу требуется перезагрузка устройства);
- Настроить IP-адреса на интерфейсах согласно схеме сети, приведенной на рисунке выше;
- Организовать обмен маршрутами между PE1, PE2 и PE3 при помощи IGP протокола (OSPF, IS-IS).
На маршрутизаторе PE1 создадим бридж-группу и включим ее:
PE1# configure PE1(config)# bridge 10 PE1(config-bridge)# enable PE1(config-bridge)# exit
Интерфейсе в сторону CE1 включим в созданную бридж-группу:
PE1(config)# interface gigabitethernet 1/0/4.100 PE1(config-subif)# bridge-group 10 PE1(config-subif)# exit
Выставим на интерфейсе в сторону PE2 значение MTU равным 9600, для того чтобы избежать ситуации с превышением MTU после инкапсуляции MPLS-заголовка, а также отключим межсетевой экран:
PE1#(config)# interface gigabitethernet 1/0/1 PE1(config-if-gi)# mtu 9600 PE1(config-if-gi)# ip firewall disable PE1(config-if-gi)# exit
Разрешим прием пакетов с MPLS-заголовком на интерфейсе в сторону MPLS-сети (в данном примере интерфейс в сторону PE2):
PE1(config)# mpls PE1(config-mpls)# forwarding interface gigabitethernet 1/0/1
Настроим протокол LDP и включим обнаружение соседей на интерфейсе в сторону PE2:
PE1(config-mpls)# ldp PE1(config-ldp)# router-id 1.1.1.1 PE1(config-ldp)# address-family ipv4 PE1(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1 PE1(config-ldp-af-ipv4-if)# exit PE1(config-ldp-af-ipv4)# transport-address 1.1.1.1 PE1(config-ldp-af-ipv4)# exit PE1(config-ldp)# enable PE1(config-ldp)# exit
Создадим pw-class, на основе которого в дальнейшем будет созданы виртуальные каналы (pw). Так как в данном примере на pw будут применяться параметры по умолчанию, достаточно будет указать имя класса:
PE1(config-mpls)# l2vpn PE1(config-l2vpn)# pw-class for_vpls1 PE1(config-l2vpn-pw-class)# exit
Создадим новый l2vpn типа vpls и добавим pw до маршрутизаторов PE2 и PE3, идентификатор pw для удобства возьмем равным VID (в данном случае равным 100):
PE1(config-l2vpn)# vpls vpls1 PE1(config-l2vpn-vpls)# bridge-group 10 PE1(config-l2vpn-vpls)# pw 100 2.2.2.2 PE1(config-l2vpn-pw)# pw-class for_vpls1 PE1(config-l2vpn-pw)# enable PE1(config-l2vpn-pw)# exit PE1(config-l2vpn-vpls)# pw 100 3.3.3.3 PE1(config-l2vpn-pw)# pw-class for_vpls1 PE1(config-l2vpn-pw)# enable PE1(config-l2vpn-pw)# exit PE1(config-l2vpn-vpls)# enable PE1(config-l2vpn-vpls)# end
Применим созданную конфигурацию:
PE1# commit PE1# confirm
Проведем настройку маршрутизатора PE2 и PE3 по аналогии с PE1:
PE2# configure PE2(config)# bridge 10 PE2(config-bridge)# enable PE2(config-bridge)# exit PE2(config)# interface gigabitethernet 1/0/4.100 PE2(config-subif)# bridge-group 10 PE2(config-subif)# exit PE2(config)# interface gigabitethernet 1/0/2 PE2(config-if-gi)# mtu 9600 PE2(config-if-gi)# ip firewall disable PE2(config-if-gi)# exit PE2(config)# mpls PE2(config-mpls)# forwarding interface gigabitethernet 1/0/1 PE2(config-mpls)# forwarding interface gigabitethernet 1/0/2 PE2(config-mpls)# ldp PE2(config-ldp)# enable PE2(config-ldp)# router-id 2.2.2.2 PE2(config-ldp)# address-family ipv4 PE2(config-ldp-af-ipv4)# transport-address 2.2.2.2 PE2(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1 PE2(config-ldp-af-ipv4-if)# exit PE2(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 PE2(config-ldp-af-ipv4-if)# exit PE2(config-ldp-af-ipv4)# exit PE2(config-ldp)# exit PE2(config-mpls)# l2vpn PE2(config-l2vpn)# pw-class for_vpls1 PE2(config-l2vpn-pw-class)# exit PE2(config-l2vpn)# vpls vpls1 PE2(config-l2vpn-vpls)# enable PE2(config-l2vpn-vpls)# bridge-group 10 PE2(config-l2vpn-vpls)# pw 100 1.1.1.1 PE2(config-l2vpn-pw)# pw-class for_vpls1 PE2(config-l2vpn-pw)# enable PE2(config-l2vpn-pw)# exit PE2(config-l2vpn-vpls)# pw 100 3.3.3.3 PE2(config-l2vpn-pw)# pw-class for_vpls1 PE2(config-l2vpn-pw)# enable PE2(config-l2vpn-pw)# end PE2# commit PE2# confirm PE3(config)# bridge 10 PE3(config-bridge)# enable PE3(config-bridge)# exit PE3(config)# interface gigabitethernet 1/0/4.100 PE3(config-subif)# bridge-group 10 PE3(config-subif)# exit PE3(config)# interface gigabitethernet 1/0/1 PE3(config-if-gi)# mtu 9600 PE3(config-if-gi)# ip firewall disable PE3(config-if-gi)# exit PE3(config)# mpls PE3(config-mpls)# forwarding interface gigabitethernet 1/0/1 PE3(config-mpls)# exit PE3(config)# mpls PE3(config-mpls)# ldp
PE3(config-ldp)# enable PE3(config-ldp)# router-id 3.3.3.3 PE3(config-ldp)# address-family ipv4 PE3(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1 PE3(config-ldp-af-ipv4-if)# exit PE3(config-ldp-af-ipv4)# transport-address 3.3.3.3 PE3(config-ldp-af-ipv4)# exit PE3(config-ldp)# exit PE3(config-mpls)# l2vpn PE3(config-l2vpn)# pw-class for_vpls PE3(config-l2vpn-pw-class)# exit PE3(config-l2vpn)# vpls vpls1 PE3(config-l2vpn-vpls)# enable PE3(config-l2vpn-vpls)# bridge-group 10 PE3(config-l2vpn-vpls)# pw 100 2.2.2.2 PE3(config-l2vpn-pw)# pw-class for_vpls PE3(config-l2vpn-pw)# enable PE3(config-l2vpn-pw)# exit PE3(config-l2vpn-vpls)# pw 100 1.1.1.1 PE3(config-l2vpn-pw)# pw-class for_vpls PE3(config-l2vpn-pw)# enable PE3(config-l2vpn-pw)# end PE3# commit PE3# confirm
Убедимся в установлении соседства по протоколу LDP и выведем информацию по статусу виртуального канала (pseudowire) между PE1, PE2 и PE3:
PE3# show mpls ldp neighbor Peer LDP ID: 1.1.1.1; Local LDP ID 3.3.3.3 State: Operational TCP connection: 1.1.1.1:646 - 3.3.3.3:45979 Messages sent/received: 22/22 Uptime: 00:13:16 LDP discovery sources: 3.3.3.3 -> 1.1.1.1 Peer LDP ID: 2.2.2.2; Local LDP ID 3.3.3.3 State: Operational TCP connection: 2.2.2.2:646 - 3.3.3.3:59627 Messages sent/received: 22/22 Uptime: 00:13:20 LDP discovery sources: 3.3.3.3 -> 2.2.2.2 gigabitethernet 1/0/1
PE3# show mpls l2vpn pseudowire Neighbor PW ID Type Status --------------------------------------- ---------- ---------- ------ 1.1.1.1 100 Ethernet Up 2.2.2.2 100 Ethernet Up
Соседство по протоколу LDP установлено, pseudowire перешел в статус 'UP'. Настройка l2vpn завершена.
Настройка сервиса L2VPN Kompella mode
В отличии от Martini mode, где вся работа ложится на LDP, в данном режиме LDP отводится только работа с транспортными метками. Автообнаружение и построение псевдо-провода возложено на протокол BGP.
Алгоритм настройки L2VPN VPLS
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить протокол LDP (см. раздел Конфигурирование протокола LDP). | ||
2 | Создать сетевой мост в системе без указания IP-адреса (см. раздел Настройка Bridge). | ||
3 | Создать VPLS-домен в системе и осуществить переход в режим настройки параметров VPLS-домена. | esr(config-l2vpn)# vpls <NAME> | <NAME> – имя p2p-сервиса, задается строкой до 31 символа. |
4 | Включить VPLS-туннель. | esr(config-l2vpn-vpls)# enable | |
5 | Добавить бридж-домен. | esr(config-l2vpn-vpls)# bridge-group <ID> | <ID> – идентификатор бридж-домена, задается в виде числа в диапазоне [1..250]. |
6 | Перейти в контекст настройки autodiscovery bgp. | esr(config-l2vpn-vpls)# autodiscovery bgp | |
7 | Указать route distinguisher для данного экземпляра VPLS. | esr(config-bgp)# rd <RD> | <RD> – значение Route distinguisher, задается в одном из следующих видов:
|
8 | Указать route target import для данного экземпляра VPLS. | esr(config-bgp)# route-target import <RT> | <RT> – значение route-target, задается в одном из следующих видов:
|
9 | Указать route target export для данного экземпляра VPLS. | esr(config-bgp)# route-target export <RT> | <RT> – значение route-target, задается в одном из следующих видов:
|
10 | Указать ve id. | esr(config-bgp)# ve id <ID> | <ID> – идентификатор экземпляра VPLS, задается в виде числа в диапазоне [1..16384]. |
11 | Указать vpn id. | esr (config-bgp)# vpn id <ID> | <ID> – идентификатор VPN, задается в виде числа в диапазоне [1..4294967295]. |
12 | Указать ve range (не обязательно). | esr (config-bgp)# ve range <RANGE> | <RANGE> – диапазон идентификаторов пограничных устройств VPLS [8..100]. |
13 | Указать mtu (не обязательно). | esr (config-bgp)# mtu <VALUE> | <VALUE> – значение MTU [552..10000]. |
14 | Включить игнорирование типа инкапсуляции (не обязательно). | esr(config-bgp)# ignore encapsulation-mismatch | |
15 | Включить игнорирование значений MTU (не обязательно). | esr(config-bgp)# ignore mtu-mismatch | |
16 | В контексте настройки address-family l2vpn vpls протокола BGP включить передачу расширенных атрибутов. | esr(config-bgp-neighbor-af)# send-community extended |
Пример настройки L2VPN VPLS
Задача:
Настроить L2VPN-сервис: все CE-устройства должны работать в рамках одного широковещательного домена.
Решение:
Предварительно необходимо:
Включить поддержку Jumbo-фреймов с помощью команды system jumbo-frames (для вступления изменений в силу требуется перезагрузка устройства);
- Настроить IP-адреса на интерфейсах согласно схеме сети, приведенной на рисунке выше;
- Организовать обмен маршрутами между PE1, PE2, PE3 и RR при помощи IGP-протокола (OSPF, IS-IS).
Настроим маршрутизатор RR:
hostname RR system jumbo-frames router ospf 1 area 0.0.0.0 enable exit enable exit interface gigabitethernet 1/0/2 mtu 9500 ip firewall disable ip address 10.30.0.2/30 ip ospf instance 1 ip ospf exit interface gigabitethernet 1/0/3 mtu 9500 ip firewall disable ip address 10.31.0.2/30 ip ospf instance 1 ip ospf exit interface loopback 1 ip address 10.10.0.4/32 ip ospf instance 1 ip ospf exit mpls ldp router-id 10.10.0.4 address-family ipv4 interface gigabitethernet 1/0/2 exit interface gigabitethernet 1/0/3 exit exit enable exit forwarding interface gigabitethernet 1/0/2 forwarding interface gigabitethernet 1/0/3 exit
Настроим BGP Route Reflector для address family l2vpn:
RR(config)# router bgp 65500 RR(config-bgp)# router-id 10.10.0.4 RR(config-bgp)# neighbor 10.10.0.1 RR(config-bgp-neighbor)# remote-as 65500 RR(config-bgp-neighbor)# route-reflector-client RR(config-bgp-neighbor)# update-source 10.10.0.4 RR(config-bgp-neighbor)# address-family l2vpn vpls RR(config-bgp-neighbor-af)# send-community extended RR(config-bgp-neighbor-af)# enable RR(config-bgp-neighbor-af)# exit RR(config-bgp-neighbor)# enable RR(config-bgp-neighbor)# exit RR(config-bgp)# neighbor 10.10.0.2 RR(config-bgp-neighbor)# remote-as 65500 RR(config-bgp-neighbor)# route-reflector-client RR(config-bgp-neighbor)# update-source 10.10.0.4 RR(config-bgp-neighbor)# address-family l2vpn vpls RR(config-bgp-neighbor-af)# send-community extended RR(config-bgp-neighbor-af)# enable RR(config-bgp-neighbor-af)# exit RR(config-bgp-neighbor)# enable RR(config-bgp-neighbor)# exit RR(config-bgp)# neighbor 10.10.0.3 RR(config-bgp-neighbor)# remote-as 65500 RR(config-bgp-neighbor)# route-reflector-client RR(config-bgp-neighbor)# update-source 10.10.0.4 RR(config-bgp-neighbor)# address-family l2vpn vpls RR(config-bgp-neighbor-af)# send-community extended RR(config-bgp-neighbor-af)# enable RR(config-bgp-neighbor-af)# exit RR(config-bgp-neighbor)# enable RR(config-bgp-neighbor)# exit RR(config-bgp)# enable
Настройка протокола BGP на PE-маршрутизаторах:
hostname PE1 system jumbo-frames router ospf 1 area 0.0.0.0 enable exit enable exit interface gigabitethernet 1/0/1 mtu 9500
ip firewall disable ip address 10.20.0.1/30 ip ospf instance 1 ip ospfexit interface gigabitethernet 1/0/2 mtu 9500 ip firewall disable ip address 10.30.0.1/30 ip ospf instance 1 ip ospf exitinterface gigabitethernet 1/0/3 mtu 9500 ip firewall disable ip address 10.22.0.1/30 ip ospf instance 1 ip ospf exit interface loopback 1 ip address 10.10.0.1/32 ip ospf instance 1 ip ospf exit mpls ldp router-id 10.10.0.1 address-family ipv4 interface gigabitethernet 1/0/1 exit interface gigabitethernet 1/0/2 exit interface gigabitethernet 1/0/3 exit exit enable exit forwarding interface gigabitethernet 1/0/1 forwarding interface gigabitethernet 1/0/2 forwarding interface gigabitethernet 1/0/3 exit
Настройка протокола BGP:
PE1(config)# router bgp 65500 PE1(config-bgp)# neighbor 10.10.0.4 PE2(config-bgp)# router-id 10.10.0.1 PE1(config-bgp-neighbor)# remote-as 65500 PE1(config-bgp-neighbor)# update-source 10.10.0.1 PE1(config-bgp-neighbor)# address-family l2vpn vpls PE1(config-bgp-neighbor-af)# send-community extended PE1(config-bgp-neighbor-af)# enable PE1(config-bgp-neighbor-af)# exit PE1(config-bgp-neighbor)# enable PE1(config-bgp-neighbor)# exit PE1(config-bgp)# enable PE1(config-bgp)# exit
Проверим, что BGP-сессия успешно установлена с RR:
` PE1# show bgp neighbors BGP neighbor is 10.10.0.4 BGP state: Established Neighbor address: 10.10.0.4 Neighbor AS: 65500 Neighbor ID: 10.10.0.4 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: internal multihop AS4 Source address: 10.10.0.1 Weight: 0 Hold timer: 110/180 Keepalive timer: 21/60 Uptime: 7375 s
Настройка BGP на PE2:
hostname PE2 system jumbo-frames router ospf 1 area 0.0.0.0 enable exit enable exit
interface gigabitethernet 1/0/1 mtu 9500 ip firewall disable ip address 10.20.0.2/30 ip ospf instance 1 ip ospf exit interface gigabitethernet 1/0/2 mtu 9500 ip firewall disable ip address 10.21.0.1/30 ip ospf instance 1 ip ospf exit interface gigabitethernet 1/0/3 mtu 9500 ip firewall disable ip address 10.31.0.1/30 ip ospf instance 1 ip ospf exit interface loopback 1 ip address 10.10.0.2/32 ip ospf instance 1 ip ospf exit mpls ldp router-id 10.10.0.2 address-family ipv4 interface gigabitethernet 1/0/1 exit interface gigabitethernet 1/0/2 exit interface gigabitethernet 1/0/3 exit exit enable exit forwarding interface gigabitethernet 1/0/1 forwarding interface gigabitethernet 1/0/2 forwarding interface gigabitethernet 1/0/3 exit
PE2(config)# router bgp 65500 PE2(config-bgp)# router-id 10.10.0.2 PE2(config-bgp)# neighbor 10.10.0.4 PE2(config-bgp-neighbor)# remote-as 65500 PE2(config-bgp-neighbor)# update-source 10.10.0.2 PE2(config-bgp-neighbor)# address-family l2vpn vpls PE2(config-bgp-neighbor-af)# send-community extended PE2(config-bgp-neighbor-af)# enable PE2(config-bgp-neighbor-af)# exit PE2(config-bgp-neighbor)# enable PE2(config-bgp-neighbor)# exit PE2(config-bgp)# enable PE2(config-bgp)# exit
Убедимся, что сессия с RR поднялась успешно:
PE2# show bgp neighbors BGP neighbor is 10.10.0.4 BGP state: Established Neighbor address: 10.10.0.4 Neighbor AS: 65500 Neighbor ID: 10.10.0.4 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: internal multihop AS4 Source address: 10.10.0.2 Weight: 0 Hold timer: 113/180 Keepalive timer: 56/60 Uptime: 47 s
Настройка BGP на PE3:
hostname PE3 system jumbo-frames router ospf 1 area 0.0.0.0 enable exit enable exit interface gigabitethernet 1/0/2 mtu 9500 ip firewall disable ip address 10.21.0.2/30 ip ospf instance 1 ip ospf exit interface gigabitethernet 1/0/3 mtu 9500 ip firewall disable ip address 10.22.0.2/30 ip ospf instance 1 ip ospf exit interface loopback 1 ip address 10.10.0.3/24 ip ospf instance 1 ip ospf exit mpls ldp router-id 10.10.0.3 address-family ipv4 interface gigabitethernet 1/0/2 exit interface gigabitethernet 1/0/3 exit exit enable exit forwarding interface gigabitethernet 1/0/2 forwarding interface gigabitethernet 1/0/3 exit
PE3(config)# router bgp 65500 PE3(config-bgp)# router-id 10.10.0.3 PE3(config-bgp)# neighbor 10.10.0.4 PE3(config-bgp-neighbor)# remote-as 65500 PE3(config-bgp-neighbor)# update-source 10.10.0.3 PE3(config-bgp-neighbor)# address-family l2vpn vpls PE3(config-bgp-neighbor-af)# send-community extended PE3(config-bgp-neighbor-af)# enable PE3(config-bgp-neighbor-af)# exit PE3(config-bgp-neighbor)# enable PE3(config-bgp-neighbor)# exit PE3(config-bgp)# enable PE3(config-bgp)# exit
Проверим, что сессия BGP установлена успешно:
PE3# show bgp neighbors BGP neighbor is 10.10.0.4 BGP state: Established Neighbor address: 10.10.0.4 Neighbor AS: 65500 Neighbor ID: 10.10.0.4 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: internal multihop AS4 Source address: 10.10.0.3 Weight: 0 Hold timer: 141/180 Keepalive timer: 27/60 Uptime: 77 s
Следующим этапом на каждом PE-маршрутизаторе создадим бридж-домен и включим в него интерфейс (Attachment circuit, AC), смотрящий в сторону CE:
PE1:
PE1(config)# bridge 1 PE1(config-bridge)# enable PE1(config-bridge)# exit PE1(config)# interface gigabitethernet 1/0/4 PE1(config-if-gi)# mode switchport PE1(config-if-gi)# bridge-group 1
Проверим, что интерфейс включен в бридж-домен:
PE1# show interfaces bridge Bridges Interfaces ---------- -------------------------------------------------------------- bridge 1 gi1/0/4 PE1# sh interfaces status bridge 1 Interface 'bridge 1' status information: Description: -- Operational state: Up Administrative state: Up Supports broadcast: Yes Supports multicast: Yes MTU: 1500 MAC address: a8:f9:4b:ac:4d:15 Last change: 4 minutes and 22 seconds Mode: Routerport
PE2:
PE2(config)# bridge 1 PE2(config-bridge)# enable PE2(config-bridge)# exit PE2(config)# interface gigabitethernet 1/0/4 PE2(config-if-gi)# mode switchport PE2(config-if-gi)# bridge-group 1
PE2# show interfaces bridge 1 Bridges Interfaces ---------- -------------------------------------------------------------- bridge 1 gi1/0/4 PE2# sh interfaces status bridge 1 Interface 'bridge 1' status information: Description: -- Operational state: Up Administrative state: Up Supports broadcast: Yes Supports multicast: Yes MTU: 1500 MAC address: a8:f9:4b:ad:f2:45 Last change: 10 seconds Mode: routerport
PE3:
PE3(config)# bridge 1 PE3(config-bridge)# enable PE3(config-bridge)# exit PE3(config)# interface gigabitethernet 1/0/4 PE3(config-if-gi)# mode switchport PE3(config-if-gi)# bridge-group 1
PE3# show interfaces bridge Bridges Interfaces ---------- -------------------------------------------------------------- bridge 1 gi1/0/4 PE3# sh interfaces status bridge Interface Admin Link MTU MAC address Last change Mode state state ------------------ ----- ----- ------ ------------------ ------------------------- ---------- bridge 1 Up Up 1500 a8:f9:4b:ac:df:f0 1 minute and 21 seconds Routerport PE3# sh interfaces status bridge 1 Interface 'bridge 1' status information: Description: -- Operational state: Up Administrative state: Up Supports broadcast: Yes Supports multicast: Yes MTU: 1500 MAC address: a8:f9:4b:ac:df:f0 Last change: 1 minute and 24 seconds Mode: Routerport
Далее выполним настройку VPLS:
PE1:
Переходим в контекст настройки L2VPN и включим в него заранее созданный бридж-домен.
PE1(config)# mpls PE1(config-mpls)# l2vpn PE1(config-l2vpn)# vpls l2vpn PE1(config-l2vpn-vpls)# bridge-group 1
Укажем RD, RT, VE-ID, VPN ID согласно схеме сети и активируем сервис:
В некоторых случаях можно отказаться от ввода таких параметров, как RD и RT: если указать только VPN ID, то они будут сформированы следующим образом: <номер AS> : <vpn-id>.
Например, есть номер автономной системы AS 65550, vpn-id указан 10, тогда cгенерируются следующие параметры:
RD - 65550: 10.
RT import/export - 65550:10.
PE1(config-l2vpn-vpls)# autodiscovery bgp PE1(config-bgp)# rd 65500:100 PE1(config-bgp)# route-target import 65500:100 PE1(config-bgp)# route-target export 65500:100 PE1(config-bgp)# ve id 1 PE1(config-bgp)# vpn id 1 PE1(config-bgp)# exit PE1(config-l2vpn-vpls)# enable
После активации сервиса проверим, что в таблице l2vpn появилась маршрутная информация и она анонсируется на RR:
PE1# show bgp l2vpn vpls all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher VID VBO VBS Next hop Metric LocPrf Weight Path ----- --------------------- ----- ----- ----- --------------- ---------- ---------- ------ ------------------- *> 65500:100 1 1 10 -- -- -- -- PE1# show bgp l2vpn vpls all neighbor 10.10.0.4 advertise-routes Origin codes: i - IGP, e - EGP, ? - incomplete Route Distinguisher VID VBO VBS Next hop Metric LocPrf Path --------------------- ----- ----- ----- --------------- ---------- ---------- ---------------------- 65500:100 1 1 10 10.10.0.1 -- 100 i * Подробный вывод анонсированного маршрута * PE1# show bgp l2vpn vpls all neighbor 10.10.0.4 advertise-routes ve-id 1 block -offset 1 BGP routing table entry for 65500:100 VE ID 1 VE Block Offset 1 VE Block Size: 10 Label Base: 86 Next hop: 10.10.0.1 AS path: -- Origin: IGP Local preference: 100 Extended Community: RT:65500:100 Layer2-info: encaps (VPLS), control flags(0x00), MTU (1500)
Переходим к настройке PE2:
PE2(config-mpls)# l2vpn PE2(config-l2vpn)# vpls l2vpn PE2(config-l2vpn-vpls)# bridge-group 1 PE2(config-l2vpn-vpls)# autodiscovery bgp PE2(config-bgp)# rd 65500:100
PE2(config-bgp)# route-target export 65500:100 PE2(config-bgp)# route-target import 65500:100 PE2(config-bgp)# vpn id 2 PE2(config-bgp)# ve id 2 PE2(config-bgp)# exit PE2(config-l2vpn-vpls)# enable
Проверим, что PE2 анонсирует маршрутную информацию на RR:
PE2# show bgp l2vpn vpls all neighbor 10.10.0.4 advertise-routes Origin codes: i - IGP, e - EGP, ? - incomplete Route Distinguisher VID VBO VBS Next hop Metric LocPrf Path --------------------- ----- ----- ----- --------------- ---------- ---------- ---------------------- 65500:100 2 1 10 10.10.0.2 -- 100 i
В таблице l2vpn видны как и свои маршруты, так и от PE1:
PE2# show bgp l2vpn vpls all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher VID VBO VBS Next hop Metric LocPrf Weight Path ----- --------------------- ----- ----- ----- --------------- ---------- ---------- ------ ------------------- *> 65500:100 2 1 10 -- -- -- -- *>i 65500:100 1 1 10 10.10.0.1 -- 100 0 i
Просмотреть вычисленные сервисные метки можно следующим образом:
PE2# show mpls l2vpn bindings Neighbor: 10.10.0.1, PW ID: 2, VE ID: 1 Local label: 45 Encasulation Type: VPLS Control flags: 0x00 MTU: 1500 Remote label: 87 Encasulation Type: VPLS Control flags: 0x00 MTU: 1500
PE2# show mpls forwarding-table Local Outgoing Prefix Outgoing Next Hop label label or tunnel ID Interface -------- -------- ----------------- ---------------- ---------------------------------- 45 87 PW ID 2 -- 10.10.0.1
Проверим состояние сервиса:
PE2# show mpls l2vpn vpls l2vpn VPLS: l2vpn bridge 1: MTU: 1500 Status: Up ACs: gigabitethernet 1/0/4: MTU: 1500 Status: Up PWs: PW ID 2, Neighbor 10.10.0.1: MTU: 1500 Last change: 00:21:33 Status: Up
Перейдем к настройке PE3:
PE3# config PE3(config)# mpls PE3(config-mpls)# l2vpn PE3(config-l2vpn)# vpls l2vpn PE3(config-l2vpn-vpls)# bridge-group 1 PE3(config-l2vpn-vpls)# autodiscovery bgp PE3(config-bgp)# rd 65500:100 PE3(config-bgp)# route-target export 65500:100 PE3(config-bgp)# route-target import 65500:100 PE3(config-bgp)# ve id 3 PE3(config-bgp)# vpn id 3 PE3(config-bgp)# exit PE3(config-l2vpn-vpls)# enable
Проверим маршрутную информацию на PE3:
PE3# show bgp l2vpn vpls all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher VID VBO VBS Next hop Metric LocPrf Weight Path ----- --------------------- ----- ----- ----- --------------- ---------- ---------- ------ ------------------- *> 65500:100 3 1 10 -- -- -- -- *>i 65500:100 2 1 10 10.10.0.2 -- 100 0 i *>i 65500:100 1 1 10 10.10.0.1 -- 100 0 i
Убедимся, что PE3 анонсирует маршрутную информацию на RR:
PE3# show bgp l2vpn vpls all neighbor 10.10.0.4 advertise-routes Origin codes: i - IGP, e - EGP, ? - incomplete Route Distinguisher VID VBO VBS Next hop Metric LocPrf Path --------------------- ----- ----- ----- --------------- ---------- ---------- ---------------------- 65500:100 3 1 10 10.10.0.3 -- 100 i
Проверим, что псевдо-провод построен до обеих PE и находится в статусе 'UP':
PE3# show mpls l2vpn vpls l2vpn VPLS: l2vpn bridge 1: MTU: 1500 Status: Up ACs: gigabitethernet 1/0/4: MTU: 1500 Status: Up PWs: PW ID 3, Neighbor 10.10.0.2: MTU: 1500 Last change: 00:06:08 Status: Up PW ID 3, Neighbor 10.10.0.1: MTU: 1500 Last change: 00:06:08 Status: Up
Проверим сетевую доступность клиентских устройств (СЕ):
CE3# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. !!!!! --- 192.168.0.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 0.173/0.208/0.290/0.045 ms CE3# ping 192.168.0.2 PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data. !!!!! --- 192.168.0.2 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 0.158/0.204/0.255/0.032 ms PE3# sh mac address-table bridge 1 VID MAC Address Interface Type ----- ------------------ ------------------------------ ------- -- a8:f9:4b:aa:11:08 gigabitethernet 1/0/4 Dynamic -- a8:f9:4b:aa:11:06 dypseudowire 3_10.10.0.1 Dynamic -- a8:f9:4b:aa:11:07 dypseudowire 3_10.10.0.2 Dynamic 3 valid mac entries
Настройка L2VPN-сервиса завершена.
Настройка сервиса L3VPN
Сервис L3VPN позволяет объединить распределенные клиентские IP-сети и обеспечить передачу трафика между ними с рамках единой VRF.
В текущей реализации протокола MP-BGP поддержана передача только VPN-IPv4 маршрутов (AFI = 1, SAFI = 128).
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Настроить адресацию и один из протоколов IGP на всех P и PE-маршрутизаторах. | ||
2 | Настроить распространение транспортных меток по протоколу LDP. | ||
3 | Создать VRF. | esr(config)# ip vrf <VRF> | <VRF> – имя экземпляра VRF, задается строкой до 31 символа. |
4 | Указать route distinguisher для данного VRF. | esr(config-vrf)# rd <RD> | <RD> – значение Route distinguisher, задается в одном из следующих видов:
|
5 | Указать route target import для данного VRF. | esr(config-vrf)# route-target import <RT> | <RT> – значение route-target, задается в одном из следующих видов:
|
6 | Указать route target export для данного VRF. | esr(config-vrf)# route-target export <RT> | <RT> – значение route-target, задается в одном из следующих видов:
|
7 | Указать разрешенное количество маршрутов для данного VRF. | esr(config-vrf)# ip protocols <PROTOCOLS> max-routes <VALUE> | <PROTOCOL> – вид протокола, принимает значения: rip (только в глобальном режиме), ospf, isis, bgp; <VALUE> – количество маршрутов в маршрутной таблице, принимает значения в диапазоне:
|
8 | В рамках настройки address-family VPNv4 протокола BGP включить передачу расширенных атрибутов. | esr(config-bgp-neighbor-af)# send-community extended |
Пример настройки
Задача:
Настроить L3VPN на базе технологии MPLS между ESR1 и ESR3. Конечным результатом настройки является появление связности между узлами, подключенными к VRF на различных маршрутизаторах сети (то есть объединение VRF на разных маршрутизаторах через MPLS-транспорт). При этом должна быть обеспечена передача сервисных MPLS-меток для сервиса L3VPN посредством MP-BGP и передача транспортных меток для достижения nexthop-адресов полученных BGP-маршрутов.
Решение:
Настройка адресации и включение IGP на P/PE-маршрутизаторах
ESR1(config)# router ospf log-adjacency-changes ESR1(config)# router ospf 1 ESR1(config-ospf)# router-id 1.1.1.1 ESR1(config-ospf)# area 0.0.0.0 ESR1(config-ospf-area)# enable ESR1(config-ospf-area)# exit ESR1(config-ospf)# enable ESR1(config-ospf)# exit ESR1(config)# ESR1(config)# interface loopback 1 ESR1(config-loopback)# ip address 1.1.1.1/32 ESR1(config-loopback)# ip ospf instance 1 ESR1(config-loopback)# ip ospf ESR1(config-loopback)# exit ESR1(config)# ESR1(config)# interface gigabitethernet 1/0/1.10 ESR1(config-subif)# ip firewall disable ESR1(config-subif)# ip address 10.10.10.1/30 ESR1(config-subif)# ip ospf instance 1 ESR1(config-subif)# ip ospf ESR1(config-subif)# exit ESR1(config)# ESR1(config)# interface gigabitethernet 1/0/1.40 ESR1(config-subif)# ip firewall disable ESR1(config-subif)# ip address 40.40.40.1/30 ESR1(config-subif)# ip ospf instance 1 ESR1(config-subif)# ip ospf ESR1(config-subif)# exit ESR1(config)# ESR1(config)# system jumbo-frames ESR1(config)# do commit ESR1(config)# do confirm
ESR2(config)# router ospf log-adjacency-changes ESR2(config)# router ospf 1 ESR2(config-ospf)# router-id 2.2.2.2 ESR2(config-ospf)# area 0.0.0.0 ESR2(config-ospf-area)# enable ESR2(config-ospf-area)# exit ESR2(config-ospf)# enable ESR2(config-ospf)# exit ESR2(config)# ESR2(config)# interface loopback 1 ESR2(config-loopback)# ip address 2.2.2.2/32 ESR2(config-loopback)# ip ospf instance 1 ESR2(config-loopback)# ip ospf ESR2(config-loopback)# exit ESR2(config)# ESR2(config)# interface gigabitethernet 1/0/1.10 ESR2(config-subif)# ip firewall disable ESR2(config-subif)# ip address 10.10.10.2/30 ESR2(config-subif)# ip ospf instance 1 ESR2(config-subif)# ip ospf ESR2(config-subif)# exit ESR2(config)# ESR2(config)# interface gigabitethernet 1/0/1.20 ESR2(config-subif)# ip firewall disable ESR2(config-subif)# ip address 20.20.20.2/30 ESR2(config-subif)# ip ospf instance 1 ESR2(config-subif)# ip ospf ESR2(config-subif)# exit ESR2(config)# ESR2(config)# system jumbo-frames ESR2(config)# do commit ESR2(config)# do confirm
ESR3(config)# router ospf log-adjacency-changes ESR3(config)# router ospf 1 ESR3(config-ospf)# router-id 3.3.3.3 ESR3(config-ospf)# area 0.0.0.0 ESR3(config-ospf-area)# enable ESR3(config-ospf-area)# exit ESR3(config-ospf)# enable ESR3(config-ospf)# exit ESR3(config)# ESR3(config)# interface loopback 1 ESR3(config-loopback)# ip address 3.3.3.3/32 ESR3(config-loopback)# ip ospf instance 1 ESR3(config-loopback)# ip ospf ESR3(config-loopback)# exit ESR3(config)# ESR3(config)# interface gigabitethernet 1/0/1.20 ESR3(config-subif)# ip firewall disable ESR3(config-subif)# ip address 20.20.20.1/30 ESR3(config-subif)# ip ospf instance 1 ESR3(config-subif)# ip ospf ESR3(config-subif)# exit ESR3(config)# ESR3(config)# interface gigabitethernet 1/0/1.30 ESR3(config-subif)# ip firewall disable ESR3(config-subif)# ip address 30.30.30.1/30 ESR3(config-subif)# ip ospf instance 1 ESR3(config-subif)# ip ospf ESR3(config-subif)# exit ESR3(config)# ESR3(config)# system jumbo-frames ESR3(config)# do commit ESR3(config)# do confirm
ESR4(config)# router ospf log-adjacency-changes ESR4(config)# router ospf 1 ESR4(config-ospf)# router-id 4.4.4.4 ESR4(config-ospf)# area 0.0.0.0 ESR4(config-ospf-area)# enable ESR4(config-ospf-area)# exit ESR4(config-ospf)# enable ESR4(config-ospf)# exit ESR4(config)# ESR4(config)# interface loopback 1 ESR4(config-loopback)# ip address 4.4.4.4/32 ESR4(config-loopback)# ip ospf instance 1 ESR4(config-loopback)# ip ospf ESR4(config-loopback)# exit ESR4(config)# ESR4(config)# interface gigabitethernet 1/0/1.40 ESR4(config-subif)# ip firewall disable ESR4(config-subif)# ip address 40.40.40.2/30 ESR4(config-subif)# ip ospf instance 1 ESR4(config-subif)# ip ospf ESR4(config-subif)# exit ESR4(config)# ESR4(config)# interface gigabitethernet 1/0/1.30 ESR4(config-subif)# ip firewall disable ESR4(config-subif)# ip address 30.30.30.2/30 ESR4(config-subif)# ip ospf instance 1 ESR4(config-subif)# ip ospf ESR4(config-subif)# exit ESR4(config)# ESR4(config)# system jumbo-frames ESR4(config)# do commit ESR4(config)# do confirm
Необходимо убедиться, что протокол OSPF запущен на каждом маршрутизаторе:
ESR1# show ip ospf neighbors Router ID Pri State DTime Interface Router IP --------- --- ----- ----- ------------- --------- 2.2.2.2 128 Full/BDR 00:39 gi1/0/1.10 10.10.10.2 4.4.4.4 128 Full/BDR 00:32 gi1/0/1.40 40.40.40.2 ESR1# show ip ospf O 40.40.40.0/30 [150/10] dev gi1/0/1.40 [ospf1 1970-01-08] (1.1.1.1) O * 30.30.30.0/30 [150/20] via 40.40.40.2 on gi1/0/1.40 [ospf1 1970-01-08] (3.3.3.3) O 1.1.1.1/32 [150/0] dev lo1 [ospf1 1970-01-08] (1.1.1.1) O * 4.4.4.4/32 [150/10] via 40.40.40.2 on gi1/0/1.40 [ospf1 1970-01-08] (4.4.4.4) O * 20.20.20.0/30 [150/20] via 10.10.10.2 on gi1/0/1.10 [ospf1 22:05:45] (3.3.3.3) O 10.10.10.0/30 [150/10] dev gi1/0/1.10 [ospf1 22:05:33] (1.1.1.1) O * 3.3.3.3/32 [150/20] multipath [ospf1 22:05:45] (3.3.3.3) via 40.40.40.2 on gi1/0/1.40 weight 1 O * 2.2.2.2/32 [150/10] via 10.10.10.2 on gi1/0/1.10 [ospf1 22:05:45] (2.2.2.2)
Настройка LDP на P/PE-маршрутизаторах
ESR1# config ESR1(config)# mpls ESR1(config-mpls)# ldp ESR1(config-ldp)# address-family ipv4 ESR1(config-ldp-af-ipv4)# transport-address 1.1.1.1 ESR1(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.10 ESR1(config-ldp-af-ipv4-if)# exit ESR1(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.40 ESR1(config-ldp-af-ipv4-if)# exit ESR1(config-ldp-af-ipv4)# exit ESR1(config-ldp)# enable ESR1(config-ldp)# exit ESR1(config-mpls)# forwarding interface gigabitethernet 1/0/1.10 ESR1(config-mpls)# forwarding interface gigabitethernet 1/0/1.40 ESR1(config-mpls)# exit ESR1(config)# do commit ESR1(config)# do confirm
ESR2# config ESR2(config)# mpls ESR2(config-mpls)# ldp ESR2(config-ldp)# address-family ipv4 ESR2(config-ldp-af-ipv4)# transport-address 2.2.2.2 ESR2(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.10 ESR2(config-ldp-af-ipv4-if)# exit ESR2(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.20 ESR2(config-ldp-af-ipv4-if)# exit ESR2(config-ldp-af-ipv4)# exit ESR2(config-ldp)# enable ESR2(config-ldp)# exit ESR2(config-mpls)# forwarding interface gigabitethernet 1/0/1.10 ESR2(config-mpls)# forwarding interface gigabitethernet 1/0/1.20 ESR2(config-mpls)# exit ESR2(config)# do commit ESR2(config)# do confirm
ESR3# config ESR3(config)# mpls ESR3(config-mpls)# ldp ESR3(config-ldp)# address-family ipv4 ESR3(config-ldp-af-ipv4)# transport-address 3.3.3.3 ESR3(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.20 ESR3(config-ldp-af-ipv4-if)# exit ESR3(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.30 ESR3(config-ldp-af-ipv4-if)# exit ESR3(config-ldp-af-ipv4)# exit ESR3(config-ldp)# enable ESR3(config-ldp)# exit ESR3(config-mpls)# forwarding interface gigabitethernet 1/0/1.20 ESR3(config-mpls)# forwarding interface gigabitethernet 1/0/1.30 ESR3(config-mpls)# exit ESR3(config)# do commit ESR3(config)# do confirm
ESR4# config ESR4(config)# mpls ESR4(config-mpls)# ldp ESR4(config-ldp)# address-family ipv4 ESR4(config-ldp-af-ipv4)# transport-address 4.4.4.4 ESR4(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.30 ESR4(config-ldp-af-ipv4-if)# exit ESR4(config-ldp-af-ipv4)# interface gigabitethernet 1/0/1.40 ESR4(config-ldp-af-ipv4-if)# exit ESR4(config-ldp-af-ipv4)# exit ESR4(config-ldp)# enable ESR4(config-ldp)# exit ESR4(config-mpls)# forwarding interface gigabitethernet 1/0/1.30 ESR4(config-mpls)# forwarding interface gigabitethernet 1/0/1.40 ESR4(config-mpls)# exit ESR4(config)# do commit ESR4(config)# do confirm
Для проверки сходимости LDP можно воспользоваться одной из следующих команд:
ESR1# show mpls ldp neighbor Peer LDP ID: 2.2.2.2; Local LDP ID 1.1.1.1 State: Operational TCP connection: 2.2.2.2:33933 - 1.1.1.1:646 Messages sent/received: 1059/1070 Uptime: 17:32:07 LDP discovery sources: gigabitethernet 1/0/1.10 Peer LDP ID: 4.4.4.4; Local LDP ID 1.1.1.1 State: Operational TCP connection: 4.4.4.4:40894 - 1.1.1.1:646 Messages sent/received: 1376/1386 Uptime: 22:38:38 LDP discovery sources: gigabitethernet 1/0/1.40
Настройка MP-BGP
Создадим VRF на ESR1 и ESR3 соответственно. Укажем RD, rt-export/import в соответствии со схемой, настроим интерфейс для взаимодействия с CE (CE-SiteA и CE-SiteB). Дополнительно создадим route-map для разрешения анонсирования маршрутов по протоколу BGP:
Без указания атрибутов RD и RT маршрутная информация не попадет в таблицу VPNv4.
ESR1(config)# ip vrf Customer1 ESR1(config-vrf)# ip protocols bgp max-routes 1000 ESR1(config-vrf)# rd 65500:100 ESR1(config-vrf)# route-target import 65500:100 ESR1(config-vrf)# route-target export 65500:100 ESR1(config-vrf)# exit ESR1(config)# interface gigabitethernet 1/0/2 ESR1(config-if-gi)# ip vrf forwarding Customer1 ESR1(config-if-gi)# description "Customer1" ESR1(config-if-gi)# ip firewall disable ESR1(config-if-gi)# ip address 192.168.32.1/30 ESR1(config-if-gi)# exit ESR1(config)# route-map OUTPUT ESR1(config-route-map)# rule 1 ESR1(config-route-map-rule)# action permit ESR1(config-route-map-rule)# exit ESR1(config-route-map)# exit ESR1(config)# do commit ESR1(config)# do confirm
ESR3(config)# ip vrf Customer1 ESR3(config-vrf)# ip protocols bgp max-routes 1000 ESR3(config-vrf)# rd 65500:100 ESR3(config-vrf)# route-target export 65500:100 ESR3(config-vrf)# route-target import 65500:100 ESR3(config-vrf)# exit ESR3(config)# interface gigabitethernet 1/0/2 ESR3(config-if-gi)# ip vrf forwarding Customer1 ESR3(config-if-gi)# description "Customer1" ESR3(config-if-gi)# ip firewall disable ESR3(config-if-gi)# ip address 192.168.32.5/30 ESR3(config-if-gi)# exit ESR3(config)# route-map OUTPUT ESR3(config-route-map)# rule 1 ESR3(config-route-map-rule)# action permit ESR3(config-route-map-rule)# exit ESR3(config-route-map)# exit ESR3(config)# do commit ESR3(config)# do confirm
Настроим iBGP между ESR1 и ESR3. Включим отправку extended community на обоих устройствах:
ESR1(config)# router bgp log-neighbor-changes ESR1(config)# router bgp 65500 ESR1(config-bgp)# router-id 1.1.1.1 ESR1(config-bgp)# enable ESR1(config-bgp)# neighbor 3.3.3.3 ESR1(config-bgp-neighbor)# remote-as 65500 ESR1(config-bgp-neighbor)# update-source 1.1.1.1 ESR1(config-bgp-neighbor)# enable ESR1(config-bgp-neighbor)# address-family vpnv4 unicast ESR1(config-bgp-neighbor-af)# send-community extended ESR1(config-bgp-neighbor-af)# enable ESR1(config-bgp-neighbor-af)# exit ESR1(config-bgp-neighbor)# exit ESR1(config-bgp)# exit ESR1(config)# do commit ESR1(config)# do confirm
ESR3(config)# router bgp log-neighbor-changes ESR3(config)# router bgp 65500 ESR3(config-bgp)# router-id 3.3.3.3 ESR3(config-bgp)# enable ESR3(config-bgp)# neighbor 1.1.1.1 ESR3(config-bgp-neighbor)# remote-as 65500 ESR3(config-bgp-neighbor)# update-source 3.3.3.3 ESR3(config-bgp-neighbor)# enable ESR3(config-bgp-neighbor)# address-family vpnv4 unicast ESR3(config-bgp-neighbor-af)# send-community extended ESR3(config-bgp-neighbor-af)# enable ESR3(config-bgp-neighbor-af)# exit ESR3(config-bgp-neighbor)# exit ESR3(config-bgp)# exit ESR3(config)# do commit ESR3(config)# do confirm
Необходимо убедиться, что BGP-сессия успешно установлена:
ESR1# show bgp neighbors BGP neighbor is 3.3.3.3 BGP state: Established Neighbor address: 3.3.3.3 Neighbor AS: 65500 Neighbor ID: 3.3.3.3 Neighbor caps: refresh enhanced-refresh restart-aware AS4 Session: internal multihop AS4 Source address: 1.1.1.1 Weight: 0 Hold timer: 126/180 Keepalive timer: 40/60 Address family ipv4 unicast: Default originate: No Default information originate: No Uptime: 88495 s
Настройка маршрутизации PE-CE
Согласно топологии, Customer1 анонсирует по BGP (AS65505) подсеть 10.100.0.0/24. Необходимо настроить соответствующие интерфейсы, eBGP между ESR1 и CE_SiteA. Также необходимо разрешить анонсирование маршрутов в сторону PE.
По умолчанию для eBGP анонсирование маршрутов запрещено, необходимо настроить разрешающее правило. Для iBGP анонсирование маршрутов разрешено.
Необходимая конфигурация на маршрутизаторе CE-SiteA:
CE-SiteA(config)# interface gigabitethernet 1/0/2 CE-SiteA(config-if-gi)# ip firewall disable CE-SiteA(config-if-gi)# ip address 192.168.32.2/30 CE-SiteA(config-if-gi)# exit CE-SiteA(config)# interface loopback 1 CE-SiteA(config-loopback)# ip address 10.100.0.1/24 CE-SiteA(config-loopback)# exit CE-SiteA(config)# route-map OUTPUT CE-SiteA(config-route-map)# rule 1 CE-SiteA(config-route-map-rule)# match ip address 10.100.0.0/24 CE-SiteA(config-route-map-rule)# action permit CE-SiteA(config-route-map-rule)# exit CE-SiteA(config-route-map)# exit CE-SiteA(config)# router bgp log-neighbor-changes CE-SiteA(config)# router bgp 65505 CE-SiteA(config-bgp)# router-id 192.168.32.1 CE-SiteA(config-bgp)# neighbor 192.168.32.1 CE-SiteA(config-bgp-neighbor)# remote-as 65500 CE-SiteA(config-bgp-neighbor)# allow-local-as 1 CE-SiteA(config-bgp-neighbor)# update-source 192.168.32.2 CE-SiteA(config-bgp-neighbor)# address-family ipv4 unicast CE-SiteA(config-bgp-neighbor-af)# route-map OUTPUT out CE-SiteA(config-bgp-neighbor-af)# enable CE-SiteA(config-bgp-neighbor-af)# exit CE-SiteA(config-bgp-neighbor)# enable CE-SiteA(config-bgp-neighbor)# exit CE-SiteA(config-bgp)# address-family ipv4 unicast CE-SiteA(config-bgp-af)# network 10.100.0.0/24 CE-SiteA(config-bgp-af)# exit CE-SiteA(config-bgp)# enable CE-SiteA(config-bgp)# exit CE-SiteA(config)# do commit CE-SiteA(config)# do confirm
Переходим к настройке eBGP на маршрутизаторе ESR1.
Создадим eBGP-сессию с CE_SiteA и разрешим передачу маршрутов BGP-пиру:
ESR1(config)# router bgp 65500 ESR1(config-bgp)# vrf Customer1 ESR1(config-bgp-vrf)# router-id 192.168.32.1 ESR1(config-bgp-vrf)# neighbor 192.168.32.2 ESR1(config-bgp-vrf-neighbor)# remote-as 65505 ESR1(config-bgp-vrf-neighbor)# update-source 192.168.32.1 ESR1(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR1(config-bgp-neighbor-af-vrf)# route-map OUTPUT out ESR1(config-bgp-neighbor-af-vrf)# enable ESR1(config-bgp-neighbor-af-vrf)# exit ESR1(config-bgp-vrf-neighbor)# enable ESR1(config-bgp-vrf-neighbor)# exit ESR1(config-bgp-vrf)# address-family ipv4 unicast ESR1(config-bgp-vrf-af)# redistribute connected ESR1(config-bgp-vrf-af)# redistribute bgp 65500 ESR1(config-bgp-vrf-af)# exit ESR1(config-bgp-vrf)# enable ESR1(config-bgp-vrf)# exit ESR1(config-bgp)# exit ESR1(config)# do commit ESR1(config)# do confirm
При передаче маршрутов из VRF в таблицу VPNv4 достаточно настроить передачу (redistribute) маршрутов в этом VRF.
Пример конфигурации передачи в VPNv4 таблицу connected- и static-сетей:
ESR1(config)# router bgp 65500 ESR1(config-bgp)# router-id 1.1.1.1 ESR1(config-bgp)# neighbor 3.3.3.3 ESR1(config-bgp-neighbor)# remote-as 65500 ESR1(config-bgp-neighbor)# update-source 1.1.1.1 ESR1(config-bgp-neighbor)# enable ESR1(config-bgp-neighbor)# address-family vpnv4 unicast ESR1(config-bgp-neighbor-af)# send-community extended ESR1(config-bgp-neighbor-af)# enable ESR1(config-bgp-neighbor-af)# exit ESR1(config-bgp-neighbor)# exit ESR1(config-bgp)# enable EESR1(config-bgp)# vrf Customer1 ESR1(config-bgp-vrf)# address-family ipv4 unicast ESR1(config-bgp-vrf-af)# redistribute connected ESR1(config-bgp-vrf-af)# redistribute static ESR1(config-bgp-vrf-af)# exit ESR1(config-bgp-vrf)# exit ESR1(config-bgp)# exit ESR1(config)# do commit ESR1(config)# do confirm
Для проверки принятых и анонсированных маршрутов можно воспользоваться следующими командами:
ESR1# show bgp vpnv4 unicast vrf Customer1 neighbors 192.168.32.2 advertise-routes Status codes: u - unicast, b - broadcast, m - multicast, a - anycast * - valid, > - best Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> u 10.100.1.0/24 192.168.32.1 100 65500 i *> u 192.168.32.4/30 192.168.32.1 100 65500 i
Вывод анонсируемых маршрутов для определенного пира. Маршрутная информация отображается после применения фильтрации:
ESR1# show bgp vpnv4 unicast vrf Customer1 neighbors 192.168.32.2 routes Status codes: u - unicast, b - broadcast, m - multicast, a - anycast * - valid, > - best Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> u 10.100.0.0/24 192.168.32.2 100 0 65505
Вывод принятой маршрутной информации от определенного пира. Маршрутная информация отображается после применения фильтрации.
CE-SiteB
Необходимо проделать схожие операции между маршрутизаторами ESR3 и CE_SiteB.
Произвести настройку соответствующих интерфейсов и создать eBGP-сессию между ESR3 и CE_SiteB:
CE-SiteB(config)# interface gigabitethernet 1/0/2 CE-SiteB(config-if-gi)# ip firewall disable CE-SiteB(config-if-gi)# ip address 192.168.32.6/30 CE-SiteB(config-if-gi)# exit CE-SiteB(config)# CE-SiteB(config)# interface loopback 1 CE-SiteB(config-loopback)# ip address 10.100.1.1/24 CE-SiteB(config-loopback)# exit CE-SiteB(config)# CE-SiteB(config)# route-map OUTPUT CE-SiteB(config-route-map)# rule 1 CE-SiteB(config-route-map-rule)# match ip address 10.100.1.0/24 CE-SiteB(config-route-map-rule)# action permit CE-SiteB(config-route-map-rule)# exit CE-SiteB(config-route-map)# exit CE-SiteB(config)# CE-SiteB(config)# router bgp 65505 CE-SiteB(config-bgp)# router-id 192.168.32.6 CE-SiteB(config-bgp)# neighbor 192.168.32.5 CE-SiteB(config-bgp-neighbor)# remote-as 65500 CE-SiteB(config-bgp-neighbor)# allow-local-as 1 CE-SiteB(config-bgp-neighbor)# update-source 192.168.32.6 CE-SiteB(config-bgp-neighbor)# address-family ipv4 unicast CE-SiteB(config-bgp-neighbor-af)# route-map OUTPUT out CE-SiteB(config-bgp-neighbor-af)# enable CE-SiteB(config-bgp-neighbor-af)# exit CE-SiteB(config-bgp-neighbor)# enable CE-SiteB(config-bgp-neighbor)# exit CE-SiteB(config-bgp)# address-family ipv4 unicast CE-SiteB(config-bgp-af)# network 10.100.1.0/24 CE-SiteB(config-bgp-af)# exit CE-SiteB(config-bgp)# enable CE-SiteB(config-bgp)# exit CE-SiteB(config)# do commit CE-SiteB(config)# do confirm
Со стороны ESR3 также настроить eBGP и разрешить передачу маршрутной информации из VRF в таблицу VPNv4:
router bgp 65500 ESR3(config)# router bgp 65500 ESR3(config-bgp)# vrf Customer1 ESR3(config-bgp-vrf)# router-id 192.168.32.5 ESR3(config-bgp-vrf)# neighbor 192.168.32.6 ESR3(config-bgp-vrf-neighbor)# remote-as 65505 ESR3(config-bgp-vrf-neighbor)# update-source 192.168.32.5 ESR3(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR3(config-bgp-neighbor-af-vrf)# route-map OUTPUT out ESR3(config-bgp-neighbor-af-vrf)# enable ESR3(config-bgp-neighbor-af-vrf)# exit ESR3(config-bgp-vrf-neighbor)# enable ESR3(config-bgp-vrf-neighbor)# exit ESR3(config-bgp-vrf)# address-family ipv4 unicast ESR3(config-bgp-vrf-af)# redistribute connected ESR3(config-bgp-vrf-af)# redistribute bgp 65500 ESR3(config-bgp-vrf-af)# exit ESR3(config-bgp-vrf)# enable ESR3(config-bgp-vrf)# exit ESR3(config-bgp)# exit ESR3(config)# do commit ESR3(config)# do confirm
Для просмотра VPNv4-таблицы воспользоваться командой:
ESR1# show bgp vpnv4 unicast all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher IP Prefix Next hop Metric Label LocPrf Weight Path ----- --------------------- ------------------ --------------- ---------- ------- ---------- ------ ---------------- *> 65500:100 10.100.0.0/24 -- -- 23 -- -- ? *>i 65500:100 192.168.32.4/30 3.3.3.3 -- 84 100 0 i *>i 65500:100 10.100.1.0/24 3.3.3.3 -- 84 100 0 i
Данная команда выводит все принятые VPNv4-маршруты после применения фильтрации.
Балансировка трафика MPLS
Маршрутизаторы ESR имеют многоядерную архитектуру. Одним из первых звеньев обработки поступающего трафика является load balancer daemon (lbd), который выполняет две основных функции:
- Равномерно распределяет нагрузку между всеми CPU маршрутизатора.
- Выявляет аномальные ситуации с высокой нагрузкой на отдельные CPU и перераспределяет обработку с этих CPU на менее загруженные.
По умолчанию lbd использует только MPLS-метки для вычисления хеша и дальнейшего распределения нагрузки на различные CPU. Данное поведение не всегда дает преимущество, особенно когда существуют «большие» однородные потоки MPLS-трафика. Для добавления энтропии в хеш можно включить дополнительную функцию:
cpu load-balance mpls passenger ip
Включает возможность «заглядывать» дальше MPLS-заголовка для поиска IP-заголовка и добавления ip-src и ip-dst в расчет хеша:
Для L3VPN: идет поиск пары ip-src и ip-dst в ip-заголовке, находящимся за MPLS-заголовком.
Для L2VPN: ESR попытается «заглянуть» в ethernet-фрейм (который находится за mpls-заголовком) и получить ip-src и ip-dst в ip-заголовке для добавления в расчет хеша.
cpu load-balance mpls passenger ip-over-ethernet-pseudowire-with-cw
cpu load-balance mpls passenger ip-over-ethernet-pseudowire-without-cw
Позволяет явно указать, используется ли при построении L2VPN функция Control Word. Это позволяет исключить возникновение ошибки, когда пакет с наличием Сontrol word может быть ошибочно распознан как пакет без него.
При хешировании MPLS-меток действуют следующие ограничения:
- В расчет не добавляются метки 0-15 (Special-Purpose Labels) – см. RFC 7274;
- В расчет не добавляется метка, если непосредственно перед ней следует метка 15 (Extension Label) – см. RFC 7274;
- В расчет хеша добавляется не более трёх меток.
Во избежание падения LDP-сессии при большой нагрузке на СPU маршрутизатора на моделях ESR-200, ESR-1000, ESR-1200, ESR-1500, ESR-1700 после включения функции все пакеты протокола LDP будут обрабатываться управляющими CPU (Management CPU), которые не участвуют в обработке трафика. Для ESR-200, ESR-1000, ESR-1200, ESR-1500 – это СPU 0, ESR-1700 – CPU 0-1.
Пример настройки
Задача:
Включить балансировку L2VPN-трафика без использования функционала Control Word.
Решение:
ESR(config)# system cpu load-balance mpls passenger ip ESR(config)# system cpu load-balance mpls passenger ipoe-pw-without-cw
Работа с бридж-доменом в рамках MPLS
Для организации L2VPN-сервиса необходимо настроить на устройстве бридж-домен, создать требуемые AC, PW (LDP-signaling) и связать все данные элементы с бридж-доменом.
Для point-to-point бридж-домен создается автоматически.
Между элементами бридж-домена осуществляется коммутация трафика на основании перечисленных правил:
- Для каждого бридж-домена автоматически создается таблица MAC-адресов по аналогии с Ethernet-коммутаторами. Ethernet-кадры коммутируются на основании анализа MAC-адреса получателя (DST MAC).
- Кадры с известным DST MAC будут отправляться в соответствующие AC/PW.
- Кадры с неизвестным DST MAC, broadcast- и multicast-кадры (т. н. BUM-трафик, Broadcast, Unknown unicast и Multicast) будут отправляться во все элементы бридж-домена, за исключением того элемента (AC либо PW), с которого вошли в бридж-домен.
- При коммутации учитываются DST MAC в кадрах, но не учитываются VLAN-теги, имеющиеся на кадрах – таким образом, коммутация внутри бридж-домена не является «VLAN-aware».
Бридж-домен может работать в двух транспортных режимах: ethernet или vlan. Транспортный режим задает правила обработки трафика на входе и выходе с бридж-домена.
В LDP signaling по умолчанию используется ethernet mode (Raw mode, type 5). Для каждого отдельного экземпляра VPLS можно задать транспортный режим.
В BGP signaling бридж-домен работает только в ethernet mode.
PE1# config PE1(config)# mpls PE1(config-mpls)# l2vpn PE1(config-l2vpn)# vpls MARTINI_br PE1(config-l2vpn-vpls)# transport-mode vlan PE1# sh mpls l2vpn pseudowire Neighbor PW ID Sig Type Status --------------------------------------- ---------- --- ---------- ------ 10.10.0.2 200 LDP Eth Tagged Up
В LDP signaling транспортный режим согласуется между PE в процессе создания псевдо-провода, поэтому он должен совпадать на обоих PE.
Рассмотрим правила обработки трафика:
1. Ethernet (Raw) mode:
- Если AC является саб-интерфейсом, то vlan-тег перед помещение в бридж снимается. При выходе из бриджа vlan-тег восстанавливается.
- Если AC является интерфейсом, то тегированный и нетегированный трафики проходят в обоих направлениях без модификаций.
Предположим, PE1 и PE2 cконфигурированы в ethernet mode. Со стороны PE1 в бридж-домен включен cаб-интерфейс gigabitethernet 1/0/4.100, поэтому vlan-тег (vlan id 100) с входящего трафика будет удален перед помещением в Pseudowire 10 (соответственно, восстановлен при трафике в сторону АС). С другой стороны, AC на PE2 является интерфейсом, значит трафик будет проходить без модификаций в обоих направлениях.
2. Vlan (Tagged) mode:
- Если AC является саб-интерфейсом, то vlan-тег перед помещением в бридж сохраняется. При выходе из бриджа vlan-тег может быть сохранен или перезаписан в зависимости от конфигурации.
- Если АС является интерфейсом, то модификация тегов не происходит в обоих направлениях.
Назначение MTU при работе с MPLS
Важно правильно настроить MTU на интерфейсах, участвующих в передаче трафика. Существует два ключевых момента:
- Размер Ethernet-заголовка (18 байт), inner tag (4 байта), outer tag (4 байта) не учитываются на AC-интерфейсах;
- На интерфейсах, принимающих участие в пересылке MPLS-трафика, необходимо увеличить MTU на количество меток (каждая метка равна 4 байтам).
Значение MTU также участвует в сигнализации при построении псевдо-провода как в LDP-signaling, так и в BGP-signaling. Ниже рассмотрены примеры настройки для обоих случаев:
Для сигнализации (LDP, BGP) значение MTU по умолчанию – 1500.
Значения MTU, участвующие в сигнализации, не влияют на фактический размер пакета, проходящего по псевдо-проводу.
В LDP-signaling MTU задается в рамках настройки pw – class:
PE2(config)# mpls PE2(config-mpls)# l2vpn PE2(config-l2vpn)# pw-class MTU_example PE2(config-l2vpn-pw-class)# encapsulation mpls mtu 9000 PE2(config-l2vpn-pw-class)# exit PE2(config-mpls)# l2vpn PE2(config-l2vpn)# vpls MTU_Example_PW PE2(config-l2vpn-vpls)# pw 200 10.10.0.1 PE2(config-l2vpn-pw)# pw-class PE2(config-l2vpn-pw)# pw-class MTU_example *Просмотр созданных pw-class'ов* PE2# sh mpls l2vpn pw-class PW-class Neighbor PW ID Status Status-tlv MTU -------------------------------- ---------- ---------- ------ ---------- ------ MTU_example 10.10.0.1 200 Up Enable 9000 PE2# sh mpls l2vpn vpls MTU_Example_PW VPLS: MTU_Example_PW ... PWs: PW ID 2, Neighbor 10.10.0.1: MTU: 9000 Last change: 01:27:42 Status: Up * Для сигнализации PW 2 данного VPLS выбрано MTU 9000*
На рисунке выше РЕ1 поднимает два псевдо-провода: pseudowire 10 до PE2, и pseudowire 20 до PE3 соответственно. Для сигнализации с PE2 MTU будет равным 2000 (pw-class TO_PE2), для PE3 – MTU будет равным 3000 (pw-class TO_PE3).
Для BGP-signaling MTU указывается в рамках конфигурации l2vpn-сервиса:
PE1(config)# mpls PE1(config-mpls)# l2vpn PE1(config-l2vpn)# vpls l2vpn_MTU PE1(config-l2vpn-vpls)# autodiscovery bgp PE1(config-bgp)# mtu 1500 PE2# sh mpls l2vpn vpls l2vpn_MTU VPLS: l2vpn_MTU ... PWs: PW ID 2, Neighbor 10.10.0.1: MTU: 1500 Last change: 01:27:42 Status: Up * Для сигнализации всех псевдо-проводов данного VPLS будет выбрано MTU 1500 *
Если при согласовании значение MTU не совпадает, то статус псевдо-провода будет – 'DOWN', 'Reason: MTU mismatch':
PE1(config-l2vpn)# vpls l2vpn_MTU PE1(config-l2vpn-vpls)# autodiscovery bgp PE1(config-bgp)# mtu 2000 PE2# sh mpls l2vpn vpls l2vpn_MTU ... PWs: PW ID 2, Neighbor 10.10.0.1: MTU: 2000 Last change: 00:00:10 Status: Down Reason: MTU mismatch
В BGP-signaling можно отключить проверку MTU для сервиса:
PE1(config)# mpls PE1(config-mpls)# l2vpn PE1(config-l2vpn)# vpls l2vpn _MTU PE1(config-l2vpn-vpls)# autodiscovery bgp PE1(config-bgp)# ignore mtu-mismatch
Теперь при согласовании значение MTU будет игнорироваться.
По умолчанию бридж-домен имеет MTU равным 1500 байт. Стоит отметить, что бридж-домен автоматически выбирает наименьшее значение MTU, исходя из собственного MTU и MTU интерфейсов, включенных в бридж-домен.
* Например, имеем бридж-домен 100, в который включены интерфейсы gi1/0/1 cо значением MTU 2000, и gi1/0/2 cо значением MTU 3000 * CE3(config)# bridge 100 CE3(config-bridge)# enable CE3(config-bridge)# exit CE3(config)# interface gigabitethernet 1/0/1 CE3(config-if-gi)# mtu 2000 CE3(config-if-gi)# bridge-group 100 CE3(config-if-gi)# exit CE3(config)# interface gigabitethernet 1/0/2 CE3(config-if-gi)# mtu 3000 CE3(config-if-gi)# bridge-group 100 CE3(config-if-gi)# do com * MTU бридж-домена будет равным 1500, так как по умолчанию сам бридж имеет MTU 1500 (значение по умолчанию), которое и стало наименьшим: MTU bridge 100 = 1500 <-- Наименьшее значение MTU MTU gi1/0/1 = 2000 MTU gi1/0/2 = 3000 * CE3# sh interfaces bridge Bridges Interfaces ---------- -------------------------------------------------------------- bridge 100 gi1/0/1-2 CE3# sh interfaces status bridge 100 Interface 'bridge 100' status information: Description: -- Operational state: UP Administrative state: Up Supports broadcast: Yes Supports multicast: Yes MTU: 1500 MAC address: a8:f9:4b:aa:11:00 Last change: 1 minute and 46 seconds Mode: Routerport * Изменим MTU на самом бридж-домене: * CE3(config)# bridge 100 CE3(config-bridge)# mtu 6000 CE3(config-bridge)# do com * MTU бридж-домена стало равным 2000 байт, так как gi1/0/2 имеет наименьшее MTU: MTU bridge 100 = 6000 MTU gi1/0/1 = 2000 <-- Наименьшее значение MTU MTU gi1/0/2 = 3000 * CE3# sh interfaces bridge Bridges Interfaces ---------- -------------------------------------------------------------- bridge 100 gi1/0/1-2 CE3# sh interfaces status bridge 100 Interface 'bridge 100' status information: Description: -- Operational state: Up Administrative state: Up Supports broadcast: Yes Supports multicast: Yes MTU: 2000 MAC address: a8:f9:4b:aa:11:00 Last change: 6 minutes and 42 seconds Mode: Routerport
Рассмотрим пример прохождения трафика в L2VPN-сервисе:
PE1 имеет следующие значения MTU на интерфейсах:
PE1# sh interfaces status Interface Admin Link MTU MAC address Last change Mode state state ------------------ ----- ----- ------ ------------------ ------------------------- ---------- gi1/0/1 Up Up 9000 a8:f9:4b:ac:4d:16 5 hours, 25 minutes and 2 Routerport seconds gi1/0/2 Up Up 1500 a8:f9:4b:ac:4d:17 4 days, 4 hours, 49 Switchport minutes and 40 seconds gi1/0/3 Up Up 1800 a8:f9:4b:ac:4d:18 4 days, 1 hour, 49 Switchport minutes and 38 seconds bridge 2 Up Up 1500 a8:f9:4b:ac:4d:15 1 day, 1 hour, 27 minutes Routerport and 28 seconds
СE1 посылает пакеты размером 1500 байт, CE2 – 1800 байт соответственно. Так как MTU бридж-домена меньше, чем MTU пакета от CE2, то пакет от CE2 будет отброшен перед попаданием в бридж-домен. Аналогичные действия будут, если MTU интерфейса, смотрящего в сторону mpls-core (gi1/0/1), меньше чем MTU, приходящих от СE-пакетов (с учетом MPLS-заголовка).
Cхожее поведение и при прохождении трафика в L3VPN-сервисе:
Если СE1 пошлет пакет с большим MTU, чем на интерфейсе, смотрящим в сторону клиента (gi1/0/2) или в сторону mpls-core (gi1/0/1), то пакет будет отброшен.
Inter-AS Option A
Рассмотрим примеры настройки на базе построения сервисов l3vpn и l2vpn. Главная особенность inter-AS Option A – отсутствие mpls-меток в трафике при передаче между ABSR. Для разделения трафика клиентских сервисов между ASBR обычно используют VRF для l3vpn или тегирование (dot1q, q-in-q) для сервисов l2vpn.
L2VPN
Настроим СE:
ESR# config ESR(config)# hostname CE1 ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 192.168.1.1/24 ESR(config-if-gi)# do com ESR(config-if-gi)# do conf
ESR# config ESR(config)# hostname CE2 ESR(config)# interface gigabitethernet 1/0/1.200 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 192.168.2.1/24 ESR(config-if-gi)# do com ESR(config-if-gi)# do conf
ESR# config ESR(config)# hostname CE3 ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 192.168.1.2/24 ESR(config-if-gi)# do com ESR(config-if-gi)# do conf
ESR# config ESR(config)# hostname CE4 ESR(config)# interface gigabitethernet 1/0/1.200 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 192.168.2.2/24 ESR(config-if-gi)# do com ESR(config-if-gi)# do conf
Произведем настройку PE1 и PE2. Анонсирование сервисных меток возложим на протокол BGP (Kompella mode):
ESR(config)# hostname PE1 ESR(config)# system jumbo-frames ESR(config)# router bgp log-neighbor-changes ESR(config)# router bgp 65500 ESR(config-bgp)# neighbor 10.10.1.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.10.1.1 ESR(config-bgp-neighbor)# address-family l2vpn vpls ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# bridge 100 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# bridge 200 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# description "to CE1" ESR(config-subif)# bridge-group 100 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/1.200 ESR(config-subif)# description "to CE2" ESR(config-subif)# bridge-group 200 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.100.0.1/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.10.1.1/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.10.1.1 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# l2vpn ESR(config-l2vpn)# vpls CE1 ESR(config-l2vpn-vpls)# bridge-group 100 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 1 ESR(config-bgp)# ve id 2 ESR(config-bgp)# rd 65500:1 ESR(config-bgp)# route-target export 65500:1 ESR(config-bgp)# route-target import 65500:1 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# vpls CE2 ESR(config-l2vpn-vpls)# bridge-group 200 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 2 ESR(config-bgp)# ve id 2 ESR(config-bgp)# rd 65500:2 ESR(config-bgp)# route-target export 65500:2 ESR(config-bgp)# route-target import 65500:2 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname ESR ESR(config)# system jumbo-frames ESR(config)# ESR(config)# router bgp log-neighbor-changes ESR(config)# router bgp 65500 ESR(config-bgp)# router-id 10.11.1.1 ESR(config-bgp)# neighbor 10.11.1.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.11.1.1 ESR(config-bgp-neighbor)# address-family l2vpn vpls ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# bridge 100 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# bridge 200 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# description "to CE3" ESR(config-subif)# bridge-group 100 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/1.200 ESR(config-subif)# description "to CE4" ESR(config-subif)# bridge-group 200 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.101.0.1/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.11.1.1/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.11.1.1 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# l2vpn ESR(config-l2vpn)# vpls CE1 ESR(config-l2vpn-vpls)# bridge-group 100 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 1 ESR(config-bgp)# ve id 2 ESR(config-bgp)# rd 65500:1 ESR(config-bgp)# route-target export 65500:1 ESR(config-bgp)# route-target import 65500:1 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# vpls CE2 ESR(config-l2vpn-vpls)# bridge-group 200 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 2 ESR(config-bgp)# ve id 2 ESR(config-bgp)# rd 65500:2 ESR(config-bgp)# route-target export 65500:2 ESR(config-bgp)# route-target import 65500:2 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
Настроим ASBR1 и ASBR2. Для разделения трафика от CE1 и CE2 в сторону ASBR2 сделаем интерфейс gi1/0/1 транковым. Vlan 100 и 200 будут предназначены для трафика от CE1 и СE2 соответственно:
ESR(config)# hostname ASBR1 ESR(config)# ESR(config)# system jumbo-frames ESR(config)# ESR(config)# vlan 100,200 ESR(config-vlan)# exit ESR(config)# ESR(config)# router bgp 65500 ESR(config-bgp)# router-id 10.10.1.2 ESR(config-bgp)# neighbor 10.10.1.1 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.10.1.2 ESR(config-bgp-neighbor)# address-family l2vpn vpls ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# bridge 10 ESR(config-bridge)# vlan 100 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# bridge 20 ESR(config-bridge)# vlan 200 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1 ESR(config-if-gi)# description "to ASBR2" ESR(config-if-gi)# mode switchport ESR(config-if-gi)# spanning-tree disable ESR(config-if-gi)# switchport forbidden default-vlan ESR(config-if-gi)# switchport mode trunk ESR(config-if-gi)# switchport trunk allowed vlan add 100,200 ESR(config-if-gi)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# description "to PE1" ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.100.0.2/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.10.1.2/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.10.1.2 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# l2vpn ESR(config-l2vpn)# vpls CE1 ESR(config-l2vpn-vpls)# bridge-group 10 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 1 ESR(config-bgp)# ve id 1 ESR(config-bgp)# rd 65500:1 ESR(config-bgp)# route-target export 65500:1 ESR(config-bgp)# route-target import 65500:1 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# vpls CE2 ESR(config-l2vpn-vpls)# bridge-group 20 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 2 ESR(config-bgp)# ve id 1 ESR(config-bgp)# rd 65500:2 ESR(config-bgp)# route-target export 65500:2 ESR(config-bgp)# route-target import 65500:2 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname ASBR2 ESR(config)# ESR(config)# system jumbo-frames ESR(config)# ESR(config)# vlan 100,200 ESR(config-vlan)# exit ESR(config)# ESR(config)# router bgp 65500 ESR(config-bgp)# router-id 10.10.1.2 ESR(config-bgp)# neighbor 10.10.1.1 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.10.1.2 ESR(config-bgp-neighbor)# address-family l2vpn vpls ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# bridge 10 ESR(config-bridge)# vlan 100 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# bridge 20 ESR(config-bridge)# vlan 200 ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1 ESR(config-if-gi)# description "to ASBR1" ESR(config-if-gi)# mode switchport ESR(config-if-gi)# spanning-tree disable ESR(config-if-gi)# switchport forbidden default-vlan ESR(config-if-gi)# switchport mode trunk ESR(config-if-gi)# switchport trunk allowed vlan add 100,200 ESR(config-if-gi)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# description "to PE1" ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.100.0.2/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.10.1.2/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.10.1.2 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# l2vpn ESR(config-l2vpn)# vpls CE1 ESR(config-l2vpn-vpls)# bridge-group 10 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 1 ESR(config-bgp)# ve id 1 ESR(config-bgp)# rd 65500:1 ESR(config-bgp)# route-target export 65500:1 ESR(config-bgp)# route-target import 65500:1 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# vpls CE2 ESR(config-l2vpn-vpls)# bridge-group 20 ESR(config-l2vpn-vpls)# autodiscovery bgp ESR(config-bgp)# vpn id 2 ESR(config-bgp)# ve id 1 ESR(config-bgp)# rd 65500:2 ESR(config-bgp)# route-target export 65500:2 ESR(config-bgp)# route-target import 65500:2 ESR(config-bgp)# exit ESR(config-l2vpn-vpls)# enable ESR(config-l2vpn-vpls)# exit ESR(config-l2vpn)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
Проверим назначение меток, статус сервисов, а также сетевую доступность между CE:
ASBR2# sh bgp l2vpn vpls all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher VID VBO VBS Next hop Metric LocPrf Weight Path ----- --------------------- ----- ----- ----- --------------- ---------- ---------- ------ ------------------- *>i 65500:1 2 1 10 10.11.1.1 -- 100 0 i *>i 65500:2 2 1 10 10.11.1.1 -- 100 0 i *> 65500:1 1 1 10 -- -- -- -- *> 65500:2 1 1 10 -- -- -- -- ASBR2# sh mpls forwarding-table Local Outgoing Prefix Outgoing Next Hop label label or tunnel ID Interface -------- -------- ------------------------------------------- ---------------- --------------------------------------- 56 imp-null 10.11.1.1/32 gi1/0/2 10.101.0.1 47 37 PW ID 1 -- 10.11.1.1 37 47 PW ID 2 -- 10.11.1.1
ASBR2# sh mpls l2vpn vpls VPLS: CE1 bridge 10: MTU: 1500 Status: Up PWs: PW ID 1, Neighbor 10.11.1.1: MTU: 1500 Last change: 00:16:59 Status: Up VPLS: CE2 bridge 20: MTU: 1500 Status: Up PWs: PW ID 2, Neighbor 10.11.1.1: MTU: 1500 Last change: 00:16:59 Status: Up
CE1# ping 192.168.1.2 detailed PING 192.168.1.2 (192.168.1.2) 56 bytes of data. 64 bytes from 192.168.1.2: icmp_seq=1 ttl=0 time=1.08 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=0 time=1.06 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=0 time=1.01 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=0 time=0.971 ms 64 bytes from 192.168.1.2: icmp_seq=5 ttl=0 time=0.972 ms CE2# ping 192.168.2.2 detailed packets PING 192.168.2.2 (192.168.2.2) 56 bytes of data. 64 bytes from 192.168.2.2: icmp_seq=1 ttl=0 time=1.17 ms 64 bytes from 192.168.2.2: icmp_seq=2 ttl=0 time=0.972 ms 64 bytes from 192.168.2.2: icmp_seq=3 ttl=0 time=0.960 ms 64 bytes from 192.168.2.2: icmp_seq=4 ttl=0 time=1.04 ms 64 bytes from 192.168.2.2: icmp_seq=5 ttl=0 time=0.976 ms ASBR2# sh mac address-table bridge 10 VID MAC Address Interface Type ----- ------------------ ------------------------------ ------- -- e4:5a:d4:01:b9:73 vlan 100 Dynamic -- e4:5a:d4:a1:34:61 dypseudowire 1_10.11.1.1 Dynamic 2 valid mac entries ASBR2# sh mac address-table bridge 20 VID MAC Address Interface Type ----- ------------------ ------------------------------ ------- -- e4:5a:d4:01:c1:80 vlan 200 Dynamic -- e4:5a:d4:a1:34:61 dypseudowire 2_10.11.1.1 Dynamic 2 valid mac entries
L3VPN
Настроим СЕ:
ESR(config)# hostname CE1 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.1.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.110.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.1.1/30 ESR(config-subif)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.110.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname CE2 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.2.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.112.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.2.1/30 ESR(config-subif)# exit ESR(config)# ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.112.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname CE3 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.3.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.113.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.3.1/30 ESR(config-subif)# exit ESR(config)# ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.113.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname CE4 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.4.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.114.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.4.1/30 ESR(config-subif)# exit ESR(config)# ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.114.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
Произведем настройку PE1 и PE2:
ESR(config)# hostname PE1 ESR(config)# ESR(config)# ip vrf CE1 ESR(config-vrf)# ip protocols bgp max-routes 100 ESR(config-vrf)# rd 65500:1 ESR(config-vrf)# route-target export 65500:1 ESR(config-vrf)# route-target import 65500:1 ESR(config-vrf)# exit ESR(config)# ip vrf CE2 ESR(config-vrf)# ip protocols bgp max-routes 100 ESR(config-vrf)# rd 65500:2 ESR(config-vrf)# route-target export 65500:2 ESR(config-vrf)# route-target import 65500:2 ESR(config-vrf)# exit ESR(config)# ESR(config)# system jumbo-frames ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp log-neighbor-changes ESR(config)# router bgp 65500 ESR(config-bgp)# neighbor 10.10.1.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.10.1.1 ESR(config-bgp-neighbor)# address-family vpnv4 unicast ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# vrf CE1 ESR(config-bgp-vrf)# neighbor 192.168.1.1 ESR(config-bgp-vrf-neighbor)# remote-as 65501 ESR(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af-vrf)# route-map BGP out ESR(config-bgp-neighbor-af-vrf)# enable ESR(config-bgp-neighbor-af-vrf)# exit ESR(config-bgp-vrf-neighbor)# enable ESR(config-bgp-vrf-neighbor)# exit ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# enable ESR(config-bgp-vrf)# exit ESR(config-bgp)# vrf CE2 ESR(config-bgp-vrf)# neighbor 192.168.2.1 ESR(config-bgp-vrf-neighbor)# remote-as 65501 ESR(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af-vrf)# route-map BGP out ESR(config-bgp-neighbor-af-vrf)# enable ESR(config-bgp-neighbor-af-vrf)# exit ESR(config-bgp-vrf-neighbor)# enable ESR(config-bgp-vrf-neighbor)# exit ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# enable ESR(config-bgp-vrf)# exit ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip vrf forwarding CE1 ESR(config-subif)# description "to CE1" ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.1.2/30 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/1.200 ESR(config-subif)# ip vrf forwarding CE2 ESR(config-subif)# description "to CE2" ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.2.2/30 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.100.0.1/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.10.1.1/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.10.1.1 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname PE2 ESR(config)# ESR(config)# ip vrf CE1 ESR(config-vrf)# ip protocols bgp max-routes 100 ESR(config-vrf)# rd 65500:1 ESR(config-vrf)# route-target export 65500:1 ESR(config-vrf)# route-target import 65500:1 ESR(config-vrf)# exit ESR(config)# ip vrf CE2 ESR(config-vrf)# ip protocols bgp max-routes 100 ESR(config-vrf)# rd 65500:2 ESR(config-vrf)# route-target export 65500:2 ESR(config-vrf)# route-target import 65500:2 ESR(config-vrf)# exit ESR(config)# ESR(config)# system jumbo-frames ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp log-neighbor-changes ESR(config)# router bgp 65500 ESR(config-bgp)# router-id 10.11.1.1 ESR(config-bgp)# neighbor 10.11.1.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.11.1.1 ESR(config-bgp-neighbor)# address-family vpnv4 unicast ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# vrf CE1 ESR(config-bgp-vrf)# neighbor 192.168.3.1 ESR(config-bgp-vrf-neighbor)# remote-as 65501 ESR(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af-vrf)# route-map BGP out ESR(config-bgp-neighbor-af-vrf)# enable ESR(config-bgp-neighbor-af-vrf)# exit ESR(config-bgp-vrf-neighbor)# enable ESR(config-bgp-vrf-neighbor)# exit ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# enable ESR(config-bgp-vrf)# exit ESR(config-bgp)# vrf CE2 ESR(config-bgp-vrf)# neighbor 192.168.4.1 ESR(config-bgp-vrf-neighbor)# remote-as 65501 ESR(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af-vrf)# route-map BGP out ESR(config-bgp-neighbor-af-vrf)# enable ESR(config-bgp-neighbor-af-vrf)# exit ESR(config-bgp-vrf-neighbor)# enable ESR(config-bgp-vrf-neighbor)# exit ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# enable ESR(config-bgp-vrf)# exit ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip vrf forwarding CE1 ESR(config-subif)# description "to CE3" ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.3.2/30 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/1.200 ESR(config-subif)# ip vrf forwarding CE2 ESR(config-subif)# description "to CE4" ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.4.2/30 ESR(config-subif)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.101.0.1/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.11.1.1/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.11.1.1 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
Настроим ASBR1 и ASBR2. Для передачи маршрутной информации между ними воспользуемся протоколом OSPF в соответствующих VRF:
ESR(config)# hostname ASBR1 ESR(config)# ESR(config)# ip vrf CE1 ESR(config-vrf)# ip protocols ospf max-routes 100 ESR(config-vrf)# rd 65500:1 ESR(config-vrf)# route-target export 65500:1 ESR(config-vrf)# route-target import 65500:1 ESR(config-vrf)# exit ESR(config)# ip vrf CE2 ESR(config-vrf)# ip protocols ospf max-routes 100 ESR(config-vrf)# rd 65500:2 ESR(config-vrf)# route-target export 65500:2 ESR(config-vrf)# route-target import 65500:2 ESR(config-vrf)# exit ESR(config)# ESR(config)# system jumbo-frames ESR(config)# ESR(config)# vlan 100,200 ESR(config-vlan)# exit ESR(config)# ESR(config)# router bgp 65500 ESR(config-bgp)# router-id 10.10.1.2 ESR(config-bgp)# neighbor 10.10.1.1 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.10.1.2 ESR(config-bgp-neighbor)# address-family vpnv4 unicast ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# vrf CE1 ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute ospf 1 intra-area inter-area external1 external2 ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# exit ESR(config-bgp)# vrf CE2 ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute ospf 1 intra-area inter-area external1 external2 ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# exit ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf log-adjacency-changes ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# router ospf 1 vrf CE1 ESR(config-ospf)# redistribute bgp 65500 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# router ospf 1 vrf CE2 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# bridge 10 ESR(config-bridge)# ip vrf forwarding CE1 ESR(config-bridge)# vlan 100 ESR(config-bridge)# ip firewall disable ESR(config-bridge)# ip address 172.16.32.1/30 ESR(config-bridge)# ip ospf instance 1 ESR(config-bridge)# ip ospf ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# bridge 20 ESR(config-bridge)# ip vrf forwarding CE2 ESR(config-bridge)# vlan 200 ESR(config-bridge)# ip firewall disable ESR(config-bridge)# ip address 172.16.32.5/30 ESR(config-bridge)# ip ospf instance 1 ESR(config-bridge)# ip ospf ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1 ESR(config-if-gi)# description "to ASBR2" ESR(config-if-gi)# mode switchport ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# spanning-tree disable ESR(config-if-gi)# switchport forbidden default-vlan ESR(config-if-gi)# switchport mode trunk ESR(config-if-gi)# switchport trunk allowed vlan add 100,200 ESR(config-if-gi)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# description "to PE1" ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.100.0.2/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.10.1.2/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.10.1.2 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname ASBR2 ESR(config)# ESR(config)# ip vrf CE1 ESR(config-vrf)# ip protocols ospf max-routes 100 ESR(config-vrf)# rd 65500:1 ESR(config-vrf)# route-target export 65500:1 ESR(config-vrf)# route-target import 65500:1 ESR(config-vrf)# exit ESR(config)# ip vrf CE2 ESR(config-vrf)# ip protocols ospf max-routes 100 ESR(config-vrf)# rd 65500:2 ESR(config-vrf)# route-target export 65500:2 ESR(config-vrf)# route-target import 65500:2 ESR(config-vrf)# exit ESR(config)# ESR(config)# system jumbo-frames ESR(config)# ESR(config)# vlan 100,200 ESR(config-vlan)# exit ESR(config)# ESR(config)# router bgp 65500 ESR(config-bgp)# router-id 10.11.1.2 ESR(config-bgp)# neighbor 10.11.1.1 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# update-source 10.11.1.2 ESR(config-bgp-neighbor)# address-family vpnv4 unicast ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# vrf CE1 ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute ospf 1 intra-area inter-area external1 external2 ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# exit ESR(config-bgp)# vrf CE2 ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# redistribute ospf 1 intra-area inter-area external1 external2 ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# exit ESR(config-bgp)# exit ESR(config)# ESR(config)# router ospf log-adjacency-changes ESR(config)# router ospf 1 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# router ospf 1 vrf CE1 ESR(config-ospf)# redistribute bgp 65500 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# router ospf 1 vrf CE2 ESR(config-ospf)# redistribute bgp 65500 ESR(config-ospf)# area 0.0.0.0 ESR(config-ospf-area)# enable ESR(config-ospf-area)# exit ESR(config-ospf)# enable ESR(config-ospf)# exit ESR(config)# ESR(config)# bridge 10 ESR(config-bridge)# ip vrf forwarding CE1 ESR(config-bridge)# vlan 100 ESR(config-bridge)# ip firewall disable ESR(config-bridge)# ip address 172.16.32.2/30 ESR(config-bridge)# ip ospf instance 1 ESR(config-bridge)# ip ospf ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# bridge 20 ESR(config-bridge)# ip vrf forwarding CE2 ESR(config-bridge)# vlan 200 ESR(config-bridge)# ip firewall disable ESR(config-bridge)# ip address 172.16.32.6/30 ESR(config-bridge)# ip ospf instance 1 ESR(config-bridge)# ip ospf ESR(config-bridge)# enable ESR(config-bridge)# exit ESR(config)# ESR(config)# interface gigabitethernet 1/0/1 ESR(config-if-gi)# description "to ASBR1" ESR(config-if-gi)# mode switchport ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# spanning-tree disable ESR(config-if-gi)# switchport forbidden default-vlan ESR(config-if-gi)# switchport mode trunk ESR(config-if-gi)# switchport trunk allowed vlan add 100,200 ESR(config-if-gi)# exit ESR(config)# interface gigabitethernet 1/0/2 ESR(config-if-gi)# description "to PE2" ESR(config-if-gi)# mtu 1522 ESR(config-if-gi)# ip firewall disable ESR(config-if-gi)# ip address 10.101.0.2/30 ESR(config-if-gi)# ip ospf instance 1 ESR(config-if-gi)# ip ospf ESR(config-if-gi)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.11.1.2/32 ESR(config-loopback)# ip ospf instance 1 ESR(config-loopback)# ip ospf ESR(config-loopback)# exit ESR(config)# mpls ESR(config-mpls)# ldp ESR(config-ldp)# router-id 10.11.1.2 ESR(config-ldp)# address-family ipv4 ESR(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ESR(config-ldp-af-ipv4-if)# exit ESR(config-ldp-af-ipv4)# exit ESR(config-ldp)# enable ESR(config-ldp)# exit ESR(config-mpls)# forwarding interface gigabitethernet 1/0/2 ESR(config-mpls)# exit ESR(config)# do com ESR(config)# do conf
Проверим распространение маршрутной информации и сетевую доступность узлов:
PE1# sh bgp vpnv4 unicast all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher IP Prefix Next hop Metric Label LocPrf Weight Path ----- --------------------- ------------------ --------------- ---------- ------- ---------- ------ ---------------- *> 65500:1 10.110.0.1/32 -- -- 37 100 -- 65501 i *> 65500:1 10.111.0.1/32 -- -- 35 100 -- 65501 i *>i 65500:1 10.113.0.1/32 10.10.1.2 -- 43 100 0 ? *>i 65500:1 10.114.0.1/32 10.10.1.2 -- 48 100 0 ? CE1# ping 10.113.0.1 source ip 10.110.0.1 detailed PING 10.113.0.1 (10.113.0.1) from 10.110.0.1 : 56 bytes of data. 64 bytes from 10.113.0.1: icmp_seq=1 ttl=0 time=1.31 ms 64 bytes from 10.113.0.1: icmp_seq=2 ttl=0 time=1.14 ms 64 bytes from 10.113.0.1: icmp_seq=3 ttl=0 time=1.08 ms 64 bytes from 10.113.0.1: icmp_seq=4 ttl=0 time=1.06 ms 64 bytes from 10.113.0.1: icmp_seq=5 ttl=0 time=1.16 ms
Inter-AS Option B
В отличие от Option A, между ASBR нет необходимости использовать VRF: при передаче трафика между ASBR будет навешиваться mpls-метка. Данная схема имеет лучшую масштабируемость.
В текущей реализации Option B поддержана только для VPN-IPv4 маршрутов (AFI = 1, SAFI = 128).
L3VPN
Настроим CE:
ESR(config)# hostname CE1 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.1.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.110.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.1.1/30 ESR(config-subif)# exit ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.110.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname CE2 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.2.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.112.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.2.1/30 ESR(config-subif)# exit ESR(config)# ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.112.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname CE3 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.3.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.113.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.3.1/30 ESR(config-subif)# exit ESR(config)# ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.113.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
ESR(config)# hostname CE4 ESR(config)# ESR(config)# route-map BGP ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65501 ESR(config-bgp)# neighbor 192.168.4.2 ESR(config-bgp-neighbor)# remote-as 65500 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map BGP 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 10.114.0.1/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit ESR(config)# interface gigabitethernet 1/0/1.100 ESR(config-subif)# ip firewall disable ESR(config-subif)# ip address 192.168.4.1/30 ESR(config-subif)# exit ESR(config)# ESR(config)# interface loopback 1 ESR(config-loopback)# ip address 10.114.0.1/32 ESR(config-loopback)# exit ESR(config)# do com ESR(config)# do conf
Произведем настройку PE1 и PE2:
PE1(config)# hostname PE1 PE1(config)# PE1(config)# ip vrf CE1 PE1(config-vrf)# ip protocols bgp max-routes 100 PE1(config-vrf)# rd 65501:1 PE1(config-vrf)# route-target export 65501:1 PE1(config-vrf)# route-target import 65501:1 PE1(config-vrf)# exit PE1(config)# ip vrf CE2 PE1(config-vrf)# ip protocols bgp max-routes 100 PE1(config-vrf)# rd 65501:2 PE1(config-vrf)# route-target export 65501:2 PE1(config-vrf)# route-target import 65501:2 PE1(config-vrf)# exit PE1(config)# PE1(config)# system jumbo-frames PE1(config)# PE1(config)# route-map BGP_OUT PE1(config-route-map)# rule 1 PE1(config-route-map-rule)# exit PE1(config-route-map)# exit PE1(config)# router bgp 65501 PE1(config-bgp)# neighbor 10.10.1.2 PE1(config-bgp-neighbor)# remote-as 65501 PE1(config-bgp-neighbor)# update-source 10.10.1.1 PE1(config-bgp-neighbor)# address-family vpnv4 unicast PE1(config-bgp-neighbor-af)# send-community extended PE1(config-bgp-neighbor-af)# enable PE1(config-bgp-neighbor-af)# exit PE1(config-bgp-neighbor)# enable PE1(config-bgp-neighbor)# exit PE1(config-bgp)# enable PE1(config-bgp)# vrf CE1 PE1(config-bgp-vrf)# neighbor 192.168.1.1 PE1(config-bgp-vrf-neighbor)# remote-as 65510 PE1(config-bgp-vrf-neighbor)# address-family ipv4 unicast PE1(config-bgp-neighbor-af-vrf)# route-map BGP_OUT out PE1(config-bgp-neighbor-af-vrf)# enable PE1(config-bgp-neighbor-af-vrf)# exit PE1(config-bgp-vrf-neighbor)# enable PE1(config-bgp-vrf-neighbor)# exit PE1(config-bgp-vrf)# address-family ipv4 unicast PE1(config-bgp-vrf-af)# redistribute bgp 65501 route-map BGP_OUT PE1(config-bgp-vrf-af)# exit PE1(config-bgp-vrf)# enable PE1(config-bgp-vrf)# exit PE1(config-bgp)# vrf CE2 PE1(config-bgp-vrf)# neighbor 192.168.2.1 PE1(config-bgp-vrf-neighbor)# remote-as 65511 PE1(config-bgp-vrf-neighbor)# address-family ipv4 unicast PE1(config-bgp-neighbor-af-vrf)# route-map BGP_OUT out PE1(config-bgp-neighbor-af-vrf)# enable PE1(config-bgp-neighbor-af-vrf)# exit PE1(config-bgp-vrf-neighbor)# enable PE1(config-bgp-vrf-neighbor)# exit PE1(config-bgp-vrf)# address-family ipv4 unicast PE1(config-bgp-vrf-af)# redistribute bgp 65501 route-map BGP_OUT PE1(config-bgp-vrf-af)# exit PE1(config-bgp-vrf)# enable PE1(config-bgp-vrf)# exit PE1(config-bgp)# exit PE1(config)# PE1(config)# router ospf 1 PE1(config-ospf)# area 0.0.0.0 PE1(config-ospf-area)# enable PE1(config-ospf-area)# exit PE1(config-ospf)# enable PE1(config-ospf)# exit PE1(config)# PE1(config)# interface gigabitethernet 1/0/1.100 PE1(config-subif)# ip vrf forwarding CE1 PE1(config-subif)# description "to CE1" PE1(config-subif)# ip firewall disable PE1(config-subif)# ip address 192.168.1.2/30 PE1(config-subif)# exit PE1(config)# interface gigabitethernet 1/0/1.200 PE1(config-subif)# ip vrf forwarding CE2 PE1(config-subif)# description "to CE2" PE1(config-subif)# ip firewall disable PE1(config-subif)# ip address 192.168.2.2/30 PE1(config-subif)# exit PE1(config)# interface gigabitethernet 1/0/2 PE1(config-if-gi)# description "to ASBR1" PE1(config-if-gi)# mtu 1522 PE1(config-if-gi)# ip firewall disable PE1(config-if-gi)# ip address 10.100.0.1/30 PE1(config-if-gi)# ip ospf instance 1 PE1(config-if-gi)# ip ospf PE1(config-if-gi)# exit PE1(config)# interface loopback 1 PE1(config-loopback)# ip address 10.10.1.1/32 PE1(config-loopback)# ip ospf instance 1 PE1(config-loopback)# ip ospf PE1(config-loopback)# exit PE1(config)# mpls PE1(config-mpls)# ldp PE1(config-ldp)# router-id 10.10.1.1 PE1(config-ldp)# address-family ipv4 PE1(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 PE1(config-ldp-af-ipv4-if)# exit PE1(config-ldp-af-ipv4)# exit PE1(config-ldp)# enable PE1(config-ldp)# exit PE1(config-mpls)# forwarding interface gigabitethernet 1/0/2 PE1(config-mpls)# exit PE1(config)# do com PE1(config)# do conf
PE2(config)# hostname PE2 PE2(config)# PE2(config)# ip vrf CE1 PE2(config-vrf)# ip protocols bgp max-routes 100 PE2(config-vrf)# rd 65501:1 PE2(config-vrf)# route-target export 65501:1 PE2(config-vrf)# route-target import 65501:1 PE2(config-vrf)# exit PE2(config)# ip vrf CE2 PE2(config-vrf)# ip protocols bgp max-routes 100 PE2(config-vrf)# rd 65501:2 PE2(config-vrf)# route-target export 65501:2 PE2(config-vrf)# route-target import 65501:2 PE2(config-vrf)# exit PE2(config)# PE2(config)# system jumbo-frames PE2(config)# PE2(config)# route-map BGP_OUT PE2(config-route-map)# rule 1 PE2(config-route-map-rule)# exit PE2(config-route-map)# exit PE2(config)# router bgp 65500 PE2(config-bgp)# neighbor 10.11.1.2 PE2(config-bgp-neighbor)# remote-as 65500 PE2(config-bgp-neighbor)# update-source 10.11.1.1 PE2(config-bgp-neighbor)# address-family vpnv4 unicast PE2(config-bgp-neighbor-af)# send-community extended PE2(config-bgp-neighbor-af)# enable PE2(config-bgp-neighbor-af)# exit PE2(config-bgp-neighbor)# enable PE2(config-bgp-neighbor)# exit PE2(config-bgp)# enable PE2(config-bgp)# vrf CE1 PE2(config-bgp-vrf)# neighbor 192.168.3.1 PE2(config-bgp-vrf-neighbor)# remote-as 65512 PE2(config-bgp-vrf-neighbor)# address-family ipv4 unicast PE2(config-bgp-neighbor-af-vrf)# route-map BGP_OUT out PE2(config-bgp-neighbor-af-vrf)# enable PE2(config-bgp-neighbor-af-vrf)# exit PE2(config-bgp-vrf-neighbor)# enable PE2(config-bgp-vrf-neighbor)# exit PE2(config-bgp-vrf)# address-family ipv4 unicast PE2(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP_OUT PE2(config-bgp-vrf-af)# exit PE2(config-bgp-vrf)# enable PE2(config-bgp-vrf)# exit PE2(config-bgp)# vrf CE2 PE2(config-bgp-vrf)# neighbor 192.168.4.1 PE2(config-bgp-vrf-neighbor)# remote-as 65513 PE2(config-bgp-vrf-neighbor)# address-family ipv4 unicast PE2(config-bgp-neighbor-af-vrf)# route-map BGP_OUT out PE2(config-bgp-neighbor-af-vrf)# enable PE2(config-bgp-neighbor-af-vrf)# exit PE2(config-bgp-vrf-neighbor)# enable PE2(config-bgp-vrf-neighbor)# exit PE2(config-bgp-vrf)# address-family ipv4 unicast PE2(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP_OUT PE2(config-bgp-vrf-af)# exit PE2(config-bgp-vrf)# enable PE2(config-bgp-vrf)# exit PE2(config-bgp)# exit PE2(config)# PE2(config)# router ospf 1 PE2(config-ospf)# router-id 10.11.1.1 PE2(config-ospf)# area 0.0.0.0 PE2(config-ospf-area)# enable PE2(config-ospf-area)# exit PE2(config-ospf)# enable PE2(config-ospf)# exit PE2(config)# PE2(config)# interface gigabitethernet 1/0/1.100 PE2(config-subif)# ip vrf forwarding CE1 PE2(config-subif)# description "to CE3" PE2(config-subif)# ip firewall disable PE2(config-subif)# ip address 192.168.3.2/30 PE2(config-subif)# exit PE2(config)# interface gigabitethernet 1/0/1.200 PE2(config-subif)# ip vrf forwarding CE2 PE2(config-subif)# description "CE4" PE2(config-subif)# ip firewall disable PE2(config-subif)# ip address 192.168.4.2/30 PE2(config-subif)# exit PE2(config)# interface gigabitethernet 1/0/2 PE2(config-if-gi)# description "to ASBR2" PE2(config-if-gi)# mtu 1522 PE2(config-if-gi)# ip firewall disable PE2(config-if-gi)# ip address 10.102.0.1/30 PE2(config-if-gi)# ip ospf instance 1 PE2(config-if-gi)# ip ospf PE2(config-if-gi)# exit PE2(config)# interface loopback 1 PE2(config-loopback)# ip address 10.11.1.1/32 PE2(config-loopback)# ip ospf instance 1 PE2(config-loopback)# ip ospf PE2(config-loopback)# exit PE2(config)# mpls PE2(config-mpls)# ldp PE2(config-ldp)# router-id 10.11.1.1 PE2(config-ldp)# address-family ipv4 PE2(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 PE2(config-ldp-af-ipv4-if)# exit PE2(config-ldp-af-ipv4)# exit PE2(config-ldp)# enable PE2(config-ldp)# exit PE2(config-mpls)# forwarding interface gigabitethernet 1/0/2 PE2(config-mpls)# exit PE2(config)# do com PE2(config)# do conf
Настроим ASBR1 и ASBR2:
ASBR1(config)# hostname ASBR1 ASBR1(config)# ASBR1(config)# system jumbo-frames ASBR1(config)# ASBR1(config)# route-map VPNv4 ASBR1(config-route-map)# rule 1 ASBR1(config-route-map-rule)# exit ASBR1(config-route-map)# exit ASBR1(config)# router bgp 65501 ASBR1(config-bgp)# router-id 10.10.1.2 ASBR1(config-bgp)# neighbor 10.10.1.1 ASBR1(config-bgp-neighbor)# remote-as 65501 ASBR1(config-bgp-neighbor)# update-source 10.10.1.2 ASBR1(config-bgp-neighbor)# address-family vpnv4 unicast ASBR1(config-bgp-neighbor-af)# next-hop-self ASBR1(config-bgp-neighbor-af)# send-community extended ASBR1(config-bgp-neighbor-af)# enable ASBR1(config-bgp-neighbor-af)# exit ASBR1(config-bgp-neighbor)# enable ASBR1(config-bgp-neighbor)# exit ASBR1(config-bgp)# neighbor 10.101.0.1 ASBR1(config-bgp-neighbor)# remote-as 65500 ASBR1(config-bgp-neighbor)# address-family vpnv4 unicast ASBR1(config-bgp-neighbor-af)# route-map VPNv4 out ASBR1(config-bgp-neighbor-af)# send-community extended ASBR1(config-bgp-neighbor-af)# enable ASBR1(config-bgp-neighbor-af)# exit ASBR1(config-bgp-neighbor)# enable ASBR1(config-bgp-neighbor)# exit ASBR1(config-bgp)# enable ASBR1(config-bgp)# exit ASBR1(config)# ASBR1(config)# router ospf 1 ASBR1(config-ospf)# area 0.0.0.0 ASBR1(config-ospf-area)# enable ASBR1(config-ospf-area)# exit ASBR1(config-ospf)# enable ASBR1(config-ospf)# exit ASBR1(config)# ASBR1(config)# interface gigabitethernet 1/0/1 ASBR1(config-if-gi)# description "to ASBR2" ASBR1(config-if-gi)# ip firewall disable ASBR1(config-if-gi)# ip address 10.101.0.2/30 ASBR1(config-if-gi)# exit ASBR1(config)# interface gigabitethernet 1/0/2 ASBR1(config-if-gi)# description "to PE1" ASBR1(config-if-gi)# mtu 1522 ASBR1(config-if-gi)# ip firewall disable ASBR1(config-if-gi)# ip address 10.100.0.2/30 ASBR1(config-if-gi)# ip ospf instance 1 ASBR1(config-if-gi)# ip ospf ASBR1(config-if-gi)# exit ASBR1(config)# interface loopback 1 ASBR1(config-loopback)# ip address 10.10.1.2/32 ASBR1(config-loopback)# ip ospf instance 1 ASBR1(config-loopback)# ip ospf ASBR1(config-loopback)# exit ASBR1(config)# mpls ASBR1(config-mpls)# ldp ASBR1(config-ldp)# router-id 10.10.1.2 ASBR1(config-ldp)# address-family ipv4 ASBR1(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ASBR1(config-ldp-af-ipv4-if)# exit ASBR1(config-ldp-af-ipv4)# exit ASBR1(config-ldp)# enable ASBR1(config-ldp)# exit ASBR1(config-mpls)# forwarding interface gigabitethernet 1/0/1 ASBR1(config-mpls)# forwarding interface gigabitethernet 1/0/2 ASBR1(config-mpls)# exit ASBR1(config)# do com ASBR1(config)# do conf
ASBR2(config)# hostname ASBR2 ASBR2(config)# ASBR2(config)# system jumbo-frames ASBR2(config)# ASBR2(config)# route-map VPNv4 ASBR2(config-route-map)# rule 1 ASBR2(config-route-map-rule)# exit ASBR2(config-route-map)# exit ASBR2(config)# router bgp 65500 ASBR2(config-bgp)# router-id 10.11.1.2 ASBR2(config-bgp)# neighbor 10.101.0.2 ASBR2(config-bgp-neighbor)# remote-as 65501 ASBR2(config-bgp-neighbor)# address-family vpnv4 unicast ASBR2(config-bgp-neighbor-af)# route-map VPNv4 out ASBR2(config-bgp-neighbor-af)# send-community extended ASBR2(config-bgp-neighbor-af)# enable ASBR2(config-bgp-neighbor-af)# exit ASBR2(config-bgp-neighbor)# enable ASBR2(config-bgp-neighbor)# exit ASBR2(config-bgp)# neighbor 10.11.1.1 ASBR2(config-bgp-neighbor)# remote-as 65500 ASBR2(config-bgp-neighbor)# update-source 10.11.1.2 ASBR2(config-bgp-neighbor)# address-family vpnv4 unicast ASBR2(config-bgp-neighbor-af)# next-hop-self ASBR2(config-bgp-neighbor-af)# send-community extended ASBR2(config-bgp-neighbor-af)# enable ASBR2(config-bgp-neighbor-af)# exit ASBR2(config-bgp-neighbor)# enable ASBR2(config-bgp-neighbor)# exit ASBR2(config-bgp)# enable ASBR2(config-bgp)# exit ASBR2(config)# ASBR2(config)# router ospf 1 ASBR2(config-ospf)# router-id 10.11.1.2 ASBR2(config-ospf)# area 0.0.0.0 ASBR2(config-ospf-area)# enable ASBR2(config-ospf-area)# exit ASBR2(config-ospf)# enable ASBR2(config-ospf)# exit ASBR2(config)# ASBR2(config)# interface gigabitethernet 1/0/1 ASBR2(config-if-gi)# description "to ASBR1" ASBR2(config-if-gi)# ip firewall disable ASBR2(config-if-gi)# ip address 10.101.0.1/30 ASBR2(config-if-gi)# exit ASBR2(config)# interface gigabitethernet 1/0/2 ASBR2(config-if-gi)# description "to PE2" ASBR2(config-if-gi)# mtu 1522 ASBR2(config-if-gi)# ip firewall disable ASBR2(config-if-gi)# ip address 10.102.0.2/30 ASBR2(config-if-gi)# ip ospf instance 1 ASBR2(config-if-gi)# ip ospf ASBR2(config-if-gi)# exit ASBR2(config)# interface loopback 1 ASBR2(config-loopback)# ip address 10.11.1.2/32 ASBR2(config-loopback)# ip ospf instance 1 ASBR2(config-loopback)# ip ospf ASBR2(config-loopback)# exit ASBR2(config)# mpls ASBR2(config-mpls)# ldp ASBR2(config-ldp)# router-id 10.11.1.2 ASBR2(config-ldp)# address-family ipv4 ASBR2(config-ldp-af-ipv4)# interface gigabitethernet 1/0/2 ASBR2(config-ldp-af-ipv4-if)# exit ASBR2(config-ldp-af-ipv4)# exit ASBR2(config-ldp)# enable ASBR2(config-ldp)# exit ASBR2(config-mpls)# forwarding interface gigabitethernet 1/0/1 ASBR2(config-mpls)# forwarding interface gigabitethernet 1/0/2 ASBR2(config-mpls)# exit ASBR2(config)# do com ASBR2(config)# do conf
После завершения настройки проверим распространение маршрутной информации и сетевую доступность узлов:
PE1# sh bgp vpnv4 unicast all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher IP Prefix Next hop Metric Label LocPrf Weight Path ----- --------------------- ------------------ --------------- ---------- ------- ---------- ------ ---------------- *>i 65501:2 10.104.0.1/32 10.10.1.2 -- 23 100 0 65500 65513 i *>i 65501:1 10.103.0.1/32 10.10.1.2 -- 19 100 0 65500 65512 i *> 65501:2 10.101.0.1/32 -- -- 29 100 -- 65511 i *> 65501:1 10.100.0.1/32 -- -- 28 100 -- 65510 i ASBR1# sh bgp vpnv4 unicast all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher IP Prefix Next hop Metric Label LocPrf Weight Path ----- --------------------- ------------------ --------------- ---------- ------- ---------- ------ ---------------- *> 65501:2 10.104.0.1/32 10.101.0.1 -- 24 100 0 65500 65513 i *> 65501:1 10.103.0.1/32 10.101.0.1 -- 20 100 0 65500 65512 i *>i 65501:2 10.101.0.1/32 10.10.1.1 -- 29 100 0 65511 i *>i 65501:1 10.100.0.1/32 10.10.1.1 -- 28 100 0 65510 i ASBR2# sh bgp vpnv4 unicast all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher IP Prefix Next hop Metric Label LocPrf Weight Path ----- --------------------- ------------------ --------------- ---------- ------- ---------- ------ ---------------- *>i 65501:2 10.104.0.1/32 10.11.1.1 -- 19 100 0 65513 i *>i 65501:1 10.103.0.1/32 10.11.1.1 -- 18 100 0 65512 i *> 65501:2 10.101.0.1/32 10.101.0.2 -- 30 100 0 65501 65511 i *> 65501:1 10.100.0.1/32 10.101.0.2 -- 31 100 0 65501 65510 i PE2# sh bgp vpnv4 unicast all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher IP Prefix Next hop Metric Label LocPrf Weight Path ----- --------------------- ------------------ --------------- ---------- ------- ---------- ------ ---------------- *> 65501:2 10.104.0.1/32 -- -- 19 100 -- 65513 i *> 65501:1 10.103.0.1/32 -- -- 18 100 -- 65512 i *>i 65501:2 10.101.0.1/32 10.11.1.2 -- 29 100 0 65501 65511 i *>i 65501:1 10.100.0.1/32 10.11.1.2 -- 30 100 0 65501 65510 i CE4# ping 10.104.0.1 source ip 10.101.0.1 detailed PING 10.104.0.1 (10.104.0.1) from 10.101.0.1 : 56 bytes of data. 64 bytes from 10.104.0.1: icmp_seq=1 ttl=0 time=2.25 ms 64 bytes from 10.104.0.1: icmp_seq=2 ttl=0 time=2.08 ms 64 bytes from 10.104.0.1: icmp_seq=3 ttl=0 time=2.15 ms 64 bytes from 10.104.0.1: icmp_seq=4 ttl=0 time=2.12 ms 64 bytes from 10.104.0.1: icmp_seq=5 ttl=0 time=2.09 ms CE1# ping 10.103.0.1 source ip 10.100.0.1 detailed PING 10.103.0.1 (10.103.0.1) from 10.100.0.1 : 56 bytes of data. 64 bytes from 10.103.0.1: icmp_seq=1 ttl=0 time=2.22 ms
Inter-AS Option C
Inter-AS Option C является третьим сценарием для настройки связности различных автономных систем, описанным в RFC 4364. Данный сценарий является наиболее масштабируемым из описанных ранее, однако он имеет свои особенности, которые необходимо учитывать при построении сети.
В данной схеме ASBR-ы не хранят клиентские VPNv4-префиксы, а только распространяют маршрутную информацию и метки для PE-устройств в своей автономной системе.
Для распространения клиентских VPNv4-префиксов между различными автономными системами используется MP-EBGP-сессия между устройствами, выполняющими роль RR (route reflector), либо между PE-устройствами. В случае, если VPNv4-сессия настраивается между RR, то в передаваемых BGP update сообщениях не должен меняться атрибут next-hop.
В рамках EBGP-сессии между ASBR производится обмен маршрутной информацией о транспортных префиксах PE различных автономных систем. Эти маршруты отвечают за доступность next-hop для клиентских VPNv4-префиксов, передаваемых в рамках MP-EBGP-сессии между RR или PE. Данные префиксы также используются для установления MP-EBGP-сесcии между устройствами, выполняющими роль RR либо роль PE в разных автономных системах.
Из плюсов данного решения можно отметить хорошую масштабируемость. ASBR-устройства не хранят данные клиентских префиксов, вся информация хранится на RR, что положительно сказывается на производительности.
Из недостатков можно отметить следующее:
- Безопасность. Передача транспортных префиксов PE из локальной AS во вне несет в себе потенциальные риски. Межу AS должен быть установлен высокий уровень доверия.
- QoS. VPN-контексты отсутствует на ASBR, соответственно нет возможности применить shaping/policing per VPN.
Для организации сквозных настроек QoS требуется согласование настроек на стыке ASBR↔ASBR.
L3VPN
Предварительная конфигурация:
- Внутри AS должен быть настроен IGP для распространения маршрутной информации для связности PE.
- Внутри AS должен быть настроен протокол LDP для распространения меток.
- На PE, к которым подключены абонентские CPE, должны быть настроены соответствующие VRF. Интерфейсы, к которым подключены CPE, должны быть помещены в соответствующий VRF.
Для настройки сервиса VPN приведем пример конфигурации устройств одной из AS (настройки в другой AS будут полностью зеркальные):
ESR(config)# hostname PE1 ESR(config)# ESR(config)# ip vrf vrf1 ESR(config-vrf)# rd 1.1.1.1:1 ESR(config-vrf)# route-target export 100:1 ESR(config-vrf)# route-target import 100:1 ESR(config-vrf)# exit ESR(config)# ESR(config)# router bgp 65000 ESR(config-bgp)# neighbor 2.2.2.2 ESR(config-bgp-neighbor)# remote-as 65000 ESR(config-bgp-neighbor)# update-source loopback 1 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# send-label ESR(config-bgp-neighbor-af)# enable ESR(config-bgp-neighbor-af)# exit ESR(config-bgp-neighbor)# address-family vpnv4 unicast ESR(config-bgp-neighbor-af)# next-hop-self ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# vrf vrf1 ESR(config-bgp-vrf)# address-family ipv4 unicast ESR(config-bgp-vrf-af)# network 100.100.100.1/32 ESR(config-bgp-vrf-af)# exit ESR(config-bgp-vrf)# exit ESR(config-bgp)# exit
В примере конфигурации PE устройства префикс 100.100.100.1 является примером абонентской подсети.
ESR(config)# hostname RR1 ESR(config)# ESR(config)# route-map VPNv4_RM1 ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)# exit ESR(config)# router bgp 65000 ESR(config-bgp)# neighbor 3.3.3.3 ESR(config-bgp-neighbor)# remote-as 65000 ESR(config-bgp-neighbor)# route-reflector-client ESR(config-bgp-neighbor)# update-source loopback 1 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# send-label 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 1.1.1.1 ESR(config-bgp-neighbor)# remote-as 65000 ESR(config-bgp-neighbor)# route-reflector-client ESR(config-bgp-neighbor)# update-source loopback 1 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# send-label ESR(config-bgp-neighbor-af)# enable ESR(config-bgp-neighbor-af)# exit ESR(config-bgp-neighbor)# address-family vpnv4 unicast ESR(config-bgp-neighbor-af)# send-community extended 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 5.5.5.5 ESR(config-bgp-neighbor)# remote-as 65001 ESR(config-bgp-neighbor)# ebgp-multihop 10 ESR(config-bgp-neighbor)# update-source loopback 1 ESR(config-bgp-neighbor)# address-family vpnv4 unicast ESR(config-bgp-neighbor-af)# route-map VPNv4_RM1 out ESR(config-bgp-neighbor-af)# next-hop-unchanged ESR(config-bgp-neighbor-af)# send-community extended 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)# enable ESR(config-bgp)# exit
ESR(config)# hostname ASBR1 ESR(config)# ESR(config)# route-map RM1 ESR(config-route-map)# rule 1 ESR(config-route-map-rule)# exit ESR(config-route-map)#exit ESR(config)# router bgp 65000 ESR(config-bgp)# neighbor 2.2.2.2 ESR(config-bgp-neighbor)# remote-as 65000 ESR(config-bgp-neighbor)# update-source loopback 1 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# next-hop-self ESR(config-bgp-neighbor-af)# send-label 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.168.100.1 ESR(config-bgp-neighbor)# remote-as 65001 ESR(config-bgp-neighbor)# address-family ipv4 unicast ESR(config-bgp-neighbor-af)# route-map RM1 out ESR(config-bgp-neighbor-af)# send-label 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)# address-family ipv4 unicast ESR(config-bgp-af)# network 1.1.1.1/32 ESR(config-bgp-af)# network 2.2.2.2/32 ESR(config-bgp-af)# network 3.3.3.3/32 ESR(config-bgp-af)# exit ESR(config-bgp)# enable ESR(config-bgp)# exit
MPLS over GRE
В этом разделе приведен пример настройки VPN сервисов, построенных через GRE-туннель.
L2VPN
В качестве сервиса l2vpn произведем настройку EoMPLS over GRE. Также возможно построение VPLS over GRE ( BGP или LDP signaling).
При настройке MTU на туннеле необходимо учитывать следующее:
- По крайней мере одна mpls-метка будет присутствовать при передаче через туннель. В учет стоит включать все метки в стеке, например, explicit null или entropy label;
- Необходимо учитывать vlan, q-in-q заголовки (если они имеются);
- При превышении MTU исходящего интерфейса пакет будет отброшен (если не включена безусловная фрагментация GRE-трафика);
- Control world не поддержан;
- DF-бит будет выставлен в единицу.
Ниже представлена примерная структура пакета:
Настройки CE1 и CE2:
hostname CE1 interface gigabitethernet 1/0/2 ip firewall disable ip address 10.100.0.1/24 exit
hostname CE2 interface gigabitethernet 1/0/2 ip firewall disable ip address 10.100.0.2/24 exit
Конфигурация ESR1 и ESR2:
ESR1(config)# hostname ESR1 ESR1(config)# ESR1(config)# system cpu load-balance mpls passenger ip ESR1(config)# system cpu load-balance mpls passenger ipoe-pw-without-cw ESR1(config)# security zone trusted ESR1(config-zone)# exit ESR1(config)# security zone untrusted ESR1(config-zone)# exit ESR1(config)# ESR1(config)# router ospf 1 ESR1(config-ospf)# area 0.0.0.0 ESR1(config-ospf-area)# enable ESR1(config-ospf-area)# exit ESR1(config-ospf)# enable ESR1(config-ospf)# exit ESR1(config)# ESR1(config)# interface gigabitethernet 1/0/1 ESR1(config-if-gi)# security-zone untrusted ESR1(config-if-gi)# ip address 192.0.2.1/30 ESR1(config-if-gi)# exit ESR1(config)# interface gigabitethernet 1/0/2 ESR1(config-if-gi)# description "From CE1" ESR1(config-if-gi)# mode switchport ESR1(config-if-gi)# exit ESR1(config)# interface loopback 1 ESR1(config-loopback)# ip address 10.100.0.1/32 ESR1(config-loopback)# ip ospf instance 1 ESR1(config-loopback)# ip ospf ESR1(config-loopback)# exit ESR1(config)# tunnel gre 1 ESR1(config-gre)# key 60 ESR1(config-gre)# ttl 64 ESR1(config-gre)# mtu 1458 ESR1(config-gre)# ip firewall disable ESR1(config-gre)# local address 192.0.2.1 ESR1(config-gre)# remote address 192.0.2.2 ESR1(config-gre)# ip address 10.0.0.1/30 ESR1(config-gre)# ip ospf instance 1 ESR1(config-gre)# ip ospf network point-to-point ESR1(config-gre)# ip ospf ESR1(config-gre)# enable ESR1(config-gre)# exit ESR1(config)# ESR1(config)# mpls ESR1(config-mpls)# ldp ESR1(config-ldp)# router-id 10.100.0.1 ESR1(config-ldp)# address-family ipv4 ESR1(config-ldp-af-ipv4)# interface gre 1 ESR1(config-ldp-af-ipv4-if)# exit ESR1(config-ldp-af-ipv4)# exit ESR1(config-ldp)# enable ESR1(config-ldp)# exit ESR1(config-mpls)# l2vpn ESR1(config-l2vpn)# pw-class VPWS ESR1(config-l2vpn-pw-class)# exit ESR1(config-l2vpn)# p2p EoMPLS ESR1(config-l2vpn-p2p)# interface gigabitethernet 1/0/2 ESR1(config-l2vpn-p2p)# pw 100 10.100.0.2 ESR1(config-l2vpn-pw)# pw-class VPWS ESR1(config-l2vpn-pw)# enable ESR1(config-l2vpn-pw)# exit ESR1(config-l2vpn-p2p)# enable ESR1(config-l2vpn-p2p)# exit ESR1(config-l2vpn)# exit ESR1(config-mpls)# forwarding interface gre 1 ESR1(config-mpls)# exit ESR1(config)# security zone-pair untrusted self ESR1(config-zone-pair)# rule 1 ESR1(config-zone-pair-rule)# action permit ESR1(config-zone-pair-rule)# match protocol gre ESR1(config-zone-pair-rule)# enable ESR1(config-zone-pair-rule)# exit ESR1(config-zone-pair)# exit ESR1(config)# do com ESR1(config)# do conf
ESR2(config)# hostname ESR2 ESR2(config)# ESR2(config)# system cpu load-balance mpls passenger ip ESR2(config)# system cpu load-balance mpls passenger ipoe-pw-without-cw ESR2(config)# security zone trusted ESR2(config-zone)# exit ESR2(config)# security zone untrusted ESR2(config-zone)# exit ESR2(config)# ESR2(config)# router ospf 1 ESR2(config-ospf)# area 0.0.0.0 ESR2(config-ospf-area)# enable ESR2(config-ospf-area)# exit ESR2(config-ospf)# enable ESR2(config-ospf)# exit ESR2(config)# ESR2(config)# interface gigabitethernet 1/0/1 ESR2(config-if-gi)# security-zone untrusted ESR2(config-if-gi)# ip address 192.0.2.2/30 ESR2(config-if-gi)# exit ESR2(config)# interface gigabitethernet 1/0/2 ESR2(config-if-gi)# description "From CE2" ESR2(config-if-gi)# mode switchport ESR2(config-if-gi)# exit ESR2(config)# interface loopback 1 ESR2(config-loopback)# ip address 10.100.0.2/32 ESR2(config-loopback)# ip ospf instance 1 ESR2(config-loopback)# ip ospf ESR2(config-loopback)# exit ESR2(config)# tunnel gre 1 ESR2(config-gre)# key 60 ESR2(config-gre)# ttl 64 ESR2(config-gre)# mtu 1458 ESR2(config-gre)# ip firewall disable ESR2(config-gre)# local address 192.0.2.2 ESR2(config-gre)# remote address 192.0.2.1 ESR2(config-gre)# ip address 10.0.0.2/30 ESR2(config-gre)# ip ospf instance 1 ESR2(config-gre)# ip ospf network point-to-point ESR2(config-gre)# ip ospf ESR2(config-gre)# enable ESR2(config-gre)# exit ESR2(config)# ESR2(config)# mpls ESR2(config-mpls)# ldp ESR2(config-ldp)# router-id 10.100.0.2 ESR2(config-ldp)# address-family ipv4 ESR2(config-ldp-af-ipv4)# interface gre 1 ESR2(config-ldp-af-ipv4-if)# exit ESR2(config-ldp-af-ipv4)# exit ESR2(config-ldp)# enable ESR2(config-ldp)# exit ESR2(config-mpls)# l2vpn ESR2(config-l2vpn)# pw-class VPWS ESR2(config-l2vpn-pw-class)# exit ESR2(config-l2vpn)# p2p EoMPLS ESR2(config-l2vpn-p2p)# interface gigabitethernet 1/0/2 ESR2(config-l2vpn-p2p)# pw 100 10.100.0.1 ESR2(config-l2vpn-pw)# pw-class VPWS ESR2(config-l2vpn-pw)# enable ESR2(config-l2vpn-pw)# exit ESR2(config-l2vpn-p2p)# enable ESR2(config-l2vpn-p2p)# exit ESR2(config-l2vpn)# exit ESR2(config-mpls)# forwarding interface gre 1 ESR2(config-mpls)# exit ESR2(config)# security zone-pair untrusted self ESR2(config-zone-pair)# rule 1 ESR2(config-zone-pair-rule)# action deny ESR2(config-zone-pair-rule)# match protocol gre ESR2(config-zone-pair-rule)# enable ESR2(config-zone-pair-rule)# exit ESR2(config-zone-pair)# exit ESR2(config)# do com ESR2(config)# do conf
Проверим состояние сервиса и доступность узлов:
* Конфигурация туннеля* ESR2# sh tunnels configuration gre 1 State: Enabled Description: -- Mode: ip Bridge group: -- VRF: -- Local address: 192.0.2.2 Remote address: 192.0.2.1 Calculates checksums for outgoing GRE packets: No Requires that all input GRE packets were checksum: No key: 60 TTL: 64 DSCP: Inherit MTU: 1458 Path MTU discovery: Enabled Don't fragment bit suppression: Disabled Security zone: -- Multipoint mode: Disabled Keepalive: State: Disabled Timeout: 10 Retries: 6 Destination address: -- *Статус cервиса и выделенные метки* sh mpls l2vpn p2p P2P: EoMPLS gigabitethernet 1/0/2: MTU: 1500 Status: Up PW ID 100, Neighbor 10.100.0.1: MTU: 1500 Status TLV: Enable Last change: 00:14:27 Status: Up ESR2# sh mpls forwarding-table Local Outgoing Prefix Outgoing Next Hop label label or tunnel ID Interface -------- -------- ------------------------------------------- ---------------- --------------------------------------- 17 imp-null 10.100.0.1/32 gre 1 10.0.0.1 16 16 PW ID 100 -- 10.100.0.1 *Доступность*CE1# ping 10.100.0.2 detailed PING 10.100.0.2 (10.100.0.2) 56 bytes of data. 64 bytes from 10.100.0.2: icmp_seq=1 ttl=0 time=1.38 ms 64 bytes from 10.100.0.2: icmp_seq=2 ttl=0 time=1.22 ms 64 bytes from 10.100.0.2: icmp_seq=3 ttl=0 time=1.33 ms 64 bytes from 10.100.0.2: icmp_seq=4 ttl=0 time=1.26 ms 64 bytes from 10.100.0.2: icmp_seq=5 ttl=0 time=1.17 ms
L3VPN
При настройке MTU на туннеле необходимо учитывать следующее:
- По крайне мере одна mpls-метка будет присутствовать при передаче через туннель. В учет стоит включать все метки в стеке, например, explicit null и/или entropy label;
- При превышении MTU исходящего интерфейса пакет будет отброшен (если не включена безусловная фрагментация GRE-трафика);
- Control world не поддержан;
- DF-бит будет выставлен в единицу.
Ниже представлена примерная структура пакета:
Настройки CE1 и CE2:
CE1(config)# hostname CE1 CE1(config)# CE1(config)# route-map BGP_OUT CE1(config-route-map)# rule 1 CE1(config-route-map-rule)# exit CE1(config-route-map)# exit CE1(config)# router bgp 65501 CE1(config-bgp)# neighbor 10.10.0.2 CE1(config-bgp-neighbor)# remote-as 65500 CE1(config-bgp-neighbor)# address-family ipv4 unicast CE1(config-bgp-neighbor-af)# route-map BGP_OUT out CE1(config-bgp-neighbor-af)# enable CE1(config-bgp-neighbor-af)# exit CE1(config-bgp-neighbor)# enable CE1(config-bgp-neighbor)# exit CE1(config-bgp)# address-family ipv4 unicast CE1(config-bgp-af)# network 10.100.0.0/24 CE1(config-bgp-af)# exit CE1(config-bgp)# enable CE1(config-bgp)# exit CE1(config)# CE1(config)# CE1(config)# interface gigabitethernet 1/0/2 CE1(config-if-gi)# description "to ESR1" CE1(config-if-gi)# ip firewall disable CE1(config-if-gi)# ip address 10.10.0.1/30 CE1(config-if-gi)# exit CE1(config)# interface loopback 1 CE1(config-loopback)# ip address 10.100.0.1/24 CE1(config-loopback)# exit
CE2(config)# hostname CE2 CE2(config)# CE2(config)# route-map BGP_OUT CE2(config-route-map)# rule 1 CE2(config-route-map-rule)# exit CE2(config-route-map)# exit CE2(config)# router bgp 65502 CE2(config-bgp)# neighbor 10.10.0.5 CE2(config-bgp-neighbor)# remote-as 65500 CE2(config-bgp-neighbor)# address-family ipv4 unicast CE2(config-bgp-neighbor-af)# route-map BGP_OUT out CE2(config-bgp-neighbor-af)# enable CE2(config-bgp-neighbor-af)# exit CE2(config-bgp-neighbor)# enable CE2(config-bgp-neighbor)# exit CE2(config-bgp)# address-family ipv4 unicast CE2(config-bgp-af)# network 10.101.0.0/24 CE2(config-bgp-af)# exit CE2(config-bgp)# enable CE2(config-bgp)# exit CE2(config)# CE2(config)# CE2(config)# interface gigabitethernet 1/0/2 CE2(config-if-gi)# description "to ESR2" CE2(config-if-gi)# ip firewall disable CE2(config-if-gi)# ip address 10.10.0.6/30 CE2(config-if-gi)# exit CE2(config)# interface loopback 1 CE2(config-loopback)# ip address 10.101.0.1/24 CE2(config-loopback)# exit
Конфигурация ESR1 и ESR2:
ESR1(config)# hostname ESR1 ESR1(config)# ESR1(config)# ip vrf l3vpn_service ESR1(config-vrf)# ip protocols bgp max-routes 100 ESR1(config-vrf)# rd 65500:1 ESR1(config-vrf)# route-target export 65500:1 ESR1(config-vrf)# route-target import 65500:1 ESR1(config-vrf)# exit ESR1(config)# ESR1(config)# ESR1(config)# system cpu load-balance mpls passenger ip ESR1(config)# security zone untrusted ESR1(config-zone)# exit ESR1(config)# security zone trusted ESR1(config-zone)# exit ESR1(config)# ESR1(config)# route-map BGP_OUT ESR1(config-route-map)# rule 1 ESR1(config-route-map-rule)# exit ESR1(config-route-map)# exit ESR1(config)# router bgp 65500 ESR1(config-bgp)# router-id 10.12.0.1 ESR1(config-bgp)# neighbor 10.12.0.2 ESR1(config-bgp-neighbor)# remote-as 65500 ESR1(config-bgp-neighbor)# update-source 10.12.0.1 ESR1(config-bgp-neighbor)# address-family vpnv4 unicast ESR1(config-bgp-neighbor-af)# send-community extended ESR1(config-bgp-neighbor-af)# enable ESR1(config-bgp-neighbor-af)# exit ESR1(config-bgp-neighbor)# enable ESR1(config-bgp-neighbor)# exit ESR1(config-bgp)# enable ESR1(config-bgp)# vrf l3vpn_service ESR1(config-bgp-vrf)# neighbor 10.10.0.1 ESR1(config-bgp-vrf-neighbor)# remote-as 65501 ESR1(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR1(config-bgp-neighbor-af-vrf)# route-map BGP_OUT out ESR1(config-bgp-neighbor-af-vrf)# enable ESR1(config-bgp-neighbor-af-vrf)# exit ESR1(config-bgp-vrf-neighbor)# enable ESR1(config-bgp-vrf-neighbor)# exit ESR1(config-bgp-vrf)# address-family ipv4 unicast ESR1(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP_OUT ESR1(config-bgp-vrf-af)# exit ESR1(config-bgp-vrf)# enable ESR1(config-bgp-vrf)# exit ESR1(config-bgp)# exit ESR1(config)# ESR1(config)# router ospf 1 ESR1(config-ospf)# router-id 10.12.0.1 ESR1(config-ospf)# area 0.0.0.0 ESR1(config-ospf-area)# enable ESR1(config-ospf-area)# exit ESR1(config-ospf)# enable ESR1(config-ospf)# exit ESR1(config)# ESR1(config)# interface gigabitethernet 1/0/1 ESR1(config-if-gi)# security-zone untrusted ESR1(config-if-gi)# ip address 192.0.2.1/30 ESR1(config-if-gi)# exit ESR1(config)# interface gigabitethernet 1/0/2 ESR1(config-if-gi)# ip vrf forwarding l3vpn_service ESR1(config-if-gi)# description "from CE1" ESR1(config-if-gi)# ip firewall disable ESR1(config-if-gi)# ip address 10.10.0.2/30 ESR1(config-if-gi)# exit ESR1(config)# interface loopback 1 ESR1(config-loopback)# ip address 10.12.0.1/32 ESR1(config-loopback)# ip ospf instance 1 ESR1(config-loopback)# ip ospf ESR1(config-loopback)# exit ESR1(config)# tunnel gre 1 ESR1(config-gre)# key 60 ESR1(config-gre)# ttl 64 ESR1(config-gre)# mtu 1472 ESR1(config-gre)# ip firewall disable ESR1(config-gre)# local address 192.0.2.1 ESR1(config-gre)# remote address 192.0.2.2 ESR1(config-gre)# ip address 10.11.0.1/30 ESR1(config-gre)# ip ospf instance 1 ESR1(config-gre)# ip ospf ESR1(config-gre)# enable ESR1(config-gre)# exit ESR1(config)# ESR1(config)# mpls ESR1(config-mpls)# ldp ESR1(config-ldp)# router-id 10.12.0.1 ESR1(config-ldp)# address-family ipv4 ESR1(config-ldp-af-ipv4)# interface gre 1 ESR1(config-ldp-af-ipv4-if)# exit ESR1(config-ldp-af-ipv4)# exit ESR1(config-ldp)# enable ESR1(config-ldp)# exit ESR1(config-mpls)# forwarding interface gre 1 ESR1(config-mpls)# exit ESR1(config)# security zone-pair untrusted self ESR1(config-zone-pair)# rule 1 ESR1(config-zone-pair-rule)# action permit ESR1(config-zone-pair-rule)# match protocol gre ESR1(config-zone-pair-rule)# enable ESR1(config-zone-pair-rule)# exit ESR1(config-zone-pair)# exit
ESR2(config)# hostname ESR2 ESR2(config)# ESR2(config)# ip vrf l3vpn_service ESR2(config-vrf)# ip protocols bgp max-routes 100 ESR2(config-vrf)# rd 65500:1 ESR2(config-vrf)# route-target export 65500:1 ESR2(config-vrf)# route-target import 65500:1 ESR2(config-vrf)# exit ESR2(config)# ESR2(config)# ESR2(config)# system cpu load-balance mpls passenger ip ESR2(config)# security zone untrusted ESR2(config-zone)# exit ESR2(config)# security zone trusted ESR2(config-zone)# exit ESR2(config)# ESR2(config)# route-map BGP_OUT ESR2(config-route-map)# rule 1 ESR2(config-route-map-rule)# exit ESR2(config-route-map)# exit ESR2(config)# router bgp 65500 ESR2(config-bgp)# router-id 10.12.0.2 ESR2(config-bgp)# neighbor 10.12.0.1 ESR2(config-bgp-neighbor)# remote-as 65500 ESR2(config-bgp-neighbor)# update-source 10.12.0.2 ESR2(config-bgp-neighbor)# address-family vpnv4 unicast ESR2(config-bgp-neighbor-af)# send-community extended ESR2(config-bgp-neighbor-af)# enable ESR2(config-bgp-neighbor-af)# exit ESR2(config-bgp-neighbor)# enable ESR2(config-bgp-neighbor)# exit ESR2(config-bgp)# enable ESR2(config-bgp)# vrf l3vpn_service ESR2(config-bgp-vrf)# neighbor 10.10.0.6 ESR2(config-bgp-vrf-neighbor)# remote-as 65502 ESR2(config-bgp-vrf-neighbor)# address-family ipv4 unicast ESR2(config-bgp-neighbor-af-vrf)# route-map BGP_OUT out ESR2(config-bgp-neighbor-af-vrf)# enable ESR2(config-bgp-neighbor-af-vrf)# exit ESR2(config-bgp-vrf-neighbor)# enable ESR2(config-bgp-vrf-neighbor)# exit ESR2(config-bgp-vrf)# address-family ipv4 unicast ESR2(config-bgp-vrf-af)# redistribute bgp 65500 route-map BGP_OUT ESR2(config-bgp-vrf-af)# exit ESR2(config-bgp-vrf)# enable ESR2(config-bgp-vrf)# exit ESR2(config-bgp)# exit ESR2(config)# ESR2(config)# router ospf 1 ESR2(config-ospf)# router-id 10.12.0.2 ESR2(config-ospf)# area 0.0.0.0 ESR2(config-ospf-area)# enable ESR2(config-ospf-area)# exit ESR2(config-ospf)# enable ESR2(config-ospf)# exit ESR2(config)# ESR2(config)# interface gigabitethernet 1/0/1 ESR2(config-if-gi)# security-zone untrusted ESR2(config-if-gi)# ip address 192.0.2.2/30 ESR2(config-if-gi)# exit ESR2(config)# interface gigabitethernet 1/0/2 ESR2(config-if-gi)# ip vrf forwarding l3vpn_service ESR2(config-if-gi)# description "from CE2" ESR2(config-if-gi)# ip firewall disable ESR2(config-if-gi)# ip address 10.10.0.5/30 ESR2(config-if-gi)# exit ESR2(config)# interface loopback 1 ESR2(config-loopback)# ip address 10.12.0.2/32 ESR2(config-loopback)# ip ospf instance 1 ESR2(config-loopback)# ip ospf ESR2(config-loopback)# exit ESR2(config)# tunnel gre 1 ESR2(config-gre)# key 60 ESR2(config-gre)# ttl 64 ESR2(config-gre)# mtu 1472 ESR2(config-gre)# ip firewall disable ESR2(config-gre)# local address 192.0.2.2 ESR2(config-gre)# remote address 192.0.2.1 ESR2(config-gre)# ip address 10.11.0.2/30 ESR2(config-gre)# ip ospf instance 1 ESR2(config-gre)# ip ospf ESR2(config-gre)# enable ESR2(config-gre)# exit ESR2(config)# ESR2(config)# mpls ESR2(config-mpls)# ldp ESR2(config-ldp)# router-id 10.12.0.2 ESR2(config-ldp)# address-family ipv4 ESR2(config-ldp-af-ipv4)# interface gre 1 ESR2(config-ldp-af-ipv4-if)# exit ESR2(config-ldp-af-ipv4)# exit ESR2(config-ldp)# enable ESR2(config-ldp)# exit ESR2(config-mpls)# forwarding interface gre 1 ESR2(config-mpls)# exit ESR2(config)# security zone-pair untrusted self ESR2(config-zone-pair)# rule 1 ESR2(config-zone-pair-rule)# action permit ESR2(config-zone-pair-rule)# match protocol gre ESR2(config-zone-pair-rule)# enable ESR2(config-zone-pair-rule)# exit ESR2(config-zone-pair)# exit
После завершения настройки проверим статус сервиса и доступность узлов в сети:
*Конфигурация туннеля GRE* ESR2# sh tunnels configuration Tunnel State Description ---------------- -------- ------------------------------ gre 1 Enabled -- ESR2# sh tunnels configuration gre 1 State: Enabled Description: -- Mode: ip Bridge group: -- VRF: -- Local address: 192.0.2.2 Remote address: 192.0.2.1 Calculates checksums for outgoing GRE packets: No Requires that all input GRE packets were checksum: No key: 60 TTL: 64 DSCP: Inherit MTU: 1472 Path MTU discovery: Enabled Don't fragment bit suppression: Disabled Security zone: -- Multipoint mode: Disabled Keepalive: State: Disabled Timeout: 10 Retries: 6 Destination address: -- *Наличие vpnv4-маршрутов* SR2# sh bgp vpnv4 unicast all Status codes: * - valid, > - best, i - internal, S - stale Origin codes: i - IGP, e - EGP, ? - incomplete Codes Route Distinguisher IP Prefix Next hop Metric Label LocPrf Weight Path ----- --------------------- ------------------ --------------- ---------- ------- ---------- ------ ---------------- *> 65500:1 10.101.0.0/24 -- -- 34 100 -- 65502 i *>i 65500:1 10.100.0.0/24 10.12.0.1 -- 16 100 0 65501 i *Состояние протокола LDP* ESR2# sh mpls ldp neighbor Peer LDP ID: 10.12.0.1; Local LDP ID 10.12.0.2 State: Operational TCP connection: 10.12.0.1:646 - 10.12.0.2:46444 Messages sent/received: 60/60 Uptime: 00:53:59 LDP discovery sources: gre 1 ESR2# sh mpls forwarding-table Local Outgoing Prefix Outgoing Next Hop label label or tunnel ID Interface -------- -------- ------------------------------------------- ---------------- --------------------------------------- 35 imp-null 10.12.0.1/32 gre 1 10.11.0.1 *Доступность узлов в сети* CE2# ping 10.100.0.1 source ip 10.101.0.1 detailed PING 10.100.0.1 (10.100.0.1) from 10.101.0.1 : 56 bytes of data. 64 bytes from 10.100.0.1: icmp_seq=1 ttl=0 time=1.32 ms 64 bytes from 10.100.0.1: icmp_seq=2 ttl=0 time=1.12 ms 64 bytes from 10.100.0.1: icmp_seq=3 ttl=0 time=1.14 ms 64 bytes from 10.100.0.1: icmp_seq=4 ttl=0 time=1.09 ms 64 bytes from 10.100.0.1: icmp_seq=5 ttl=0 time=1.15 ms