Немного теории (в определениях и моём понимании этой технологии :)).
MPLS — (англ. Multiprotocol Label Switching) — мультипротокольная коммутация по меткам. Если рассматривать модель OSI, то данную технологию теоретически можно расположить между вторым и третьим уровнями.
Технология MPLS должна «подниматься» на уже существующей и нормально функционирующей IP сети, так как она использует таблицу маршрутизации (FIB - Forwarding Information Base).
Принцип работы заключается в том, что после организации IP связности, на роутерах включается MPLS. Каждому маршруту присваивается метка. Происходит формирование таблицы меток (LIB - MPLS Label Information Base), которая содержит информацию обо всех существующих метках (даже о метках, которые могут и не использоваться). После этого, каждый роутер формирует для себя другую таблицу (LFIB - MPLS Label Forwarding Information Base), согласно которой он уже и будет осуществлять передачу трафика. Другими словами, роутеру не надо более просматривать свою таблицу маршрутизации (FIB), выбирать маршрут и так далее (если конечно этот маршрут есть в LFIB). Практически получается, что роутер осуществляет коммутацию, а не маршрутизацию, что в свою очередь очень ускоряет работу по доставке трафика в место назначения.
Прелесть еще заключается и в том, что поверх MPLS могут работать различные протоколы 2-го и 3-го уровней.
Но, много погружаться в теорию не будем, так как сетевых решений (Network Solutions) существует много. Остальное можно найти в интернете.
Рассмотрение технологии начнем с общей настройки на обычной Ethernet сети (Задача №1) (так называемый Frame-Mode MPLS, когда метка вставляется внутрь фрейма), затем создадим схему с Layer 2 VPN с инкапсуляцией MPLS (Задача №2), потом погрузимся немного глубже и настроим схему с использованием технологии VRF и MPLS (Задача №3).
Итак, первая схема, которую мы реализуем, будет следующая:
На схеме представлены 4 роутера. Router_1 и Router_4 являются пограничными ELSR - Edge Label Switch Router (иногда их еще называют PE – Provider Edge Router). Они занимаются, с одной стороны, для «навешивания» (pushing) меток при входе пакета в домен MPLS и, с другой стороны, для «снятия» (popping) меток при выходе из домена MPLS. Роутеры Router_2 и Router_3 являются внутренними роутерами домена MPLS и называются LSR - Label Switch Router (второе название P – Provider Router). Они занимаются только передачей пакетов от одного MPLS роутера другому.
Итак, приступим. Для организации сетевой доступности (IP) будем использовать протокол динамической маршрутизации OSPF (почитать про его настройку можно вот в этих постах:№1 и №2). Хосты для проверки расположены в разных сетях.
Начнем с настройки стандартной сетевой доступности. Заходим на роутер Router_1:
Роутер Router_2:
Роутер Router_3:
И роутер Router_4:
Проверим сетевую доступность. Сделаем ping и tracert с Host_1 на Host_2:
Как видно, сетевая доступность присутствует.
Приступим к настройке MPLS. Снова возвращаемся на роутер Router_1 и добавляем следующие команды:
Router_2:
Router_3:
Router_4:
Итак, вот результат нашей работы над задачей №1 настройки MPLS:
Из отловленных пакетов возьмем ICMP. И, как видно из рисунка, у нас появилась закладка MultiProtocol Label Switching Header. В ней показаны различные параметры, которые вставляются во фрейм (значение метки, время жизни (ttl) и так далее). Если еще посмотреть на отловленные пакеты на рисунке, то можно заметить и LDP пакеты (hello messages). Эти пакеты рассылаются роутерами на мультикаст адрес 224.0.0.2.
Ну что же, первая задача успешно завершена, базовая конфигурация MPLS работает. Оказалось, не все так страшно :).
Приступаем к реализации задачи №2, а именно к настройке L2 VPN over MPLS.
Первую схему я создавал и настраивал, используя cisco 3640. Но, начиная делать вторую схему, обнаружил, что cisco 3640 не поддерживает инкапсуляцию mpls на интерфейсах. Так что, пришлось заменить их на cisco серии 7200. Вот, для ориентировки, slot-ы, которые я использовал на роутерах Router_1 и Router_4:
И на Router_2 и Router_3:
Помимо этого, немного преобразовалась и сама схема. Теперь она будет выглядеть следующим образом (напоминаю, на данный момент мы будем настраивать Layer 2 VPN через MPLS (EoMPLS в нашем случае)):
Осталось те же 4 роутера, но на пограничных роутерах у нас появились sub-интерфейсы, которые соответствуют некоторым vlan-ам (10 и 20 соответственно). И теперь, конечные станции находятся в одной сети 192.168.1.0/24. Задача состоит в том, чтобы Host_1 и Host_2 видели друг друга так, как будто они находятся в одном vlan-е. Выполнить эту задачу можно и через IP сеть (технология l2tpv3), но мы будем использовать L2 VPN с инкапсуляцией MPLS (l2mpls).
Приступим. Заходим на роутер Router_1 и делаем следующие настройки (настройки IP маршрутизации, базовые настройки MPLS будут такие же, как и в задаче №1):
Переходим к Router_2:
Router_3:
Router_4:
Ну что, переходим к проверкам. Для начала, посмотрим, что у нас имеется на роутерах. Router_1:
На Router_4:
Из рисунков видно, что l2 канал установлен, тип у него Ethernet, сопоставлен он с нужным интерфейсом (Int fa 0/0.10 с одной стороны и Int fa 0/0.20 с другой стороны), показаны IP – адреса «соседей», ID виртуального канала (vc) и самое главное, его статус UP. Так же, можно увидеть, какие локальные метки навесил каждый роутер.
Далее, сделаем ping с Host_2 на Host_1:
Все работает. Замечу лишь то, что при таких l2 тоннелях следует следить, чтобы не было одинаковых IP – адресов. Помните, что пользователи находятся в одной сети :).
Теперь, для полноты картины, отловим несколько пакетов и посмотрим, что у них внутри. Первая точка – Int fa 1/1 на Router_4 (этот интерфейс смотрит на Router_2):
Вторая точка - Int fa 1/0 на Router_2 (этот интерфейс смотрит на Router_1):
Третья точка – Int fa 0/0 на Router_1 (этот интерфейс смотрит в сторону Host_1):
Теперь посмотрим, как все происходит. Router_4, приняв пакет ICMP (Request) от Host_2 на интерфейс Int fa 0/0.20, понимает, что он относится к l2vpn mpls каналу и должен быть передан через сеть MPLS. Для этого он навешивает на него 2 метки. Первая метка используется для коммутации пакета в сети MPLS, а вторая метка используется для дальнейшей идентификации канала vc. Обе метки имеют ttl, равный 255. Пакет отправляется дальше. Router_2 принимает пакет и начинает обработку. Он видит, что пакет адресован сети, которая находится сразу за Router_1 и, чтобы упростить задачу «соседу» (технология снятия метки на предпоследнем LSR (PHP - Penultimate Hop Popping), снимает одну из меток, которая используется для коммутации. У второй метки всего лишь уменьшается ttl на единицу. Пакет летит дальше. Конечный роутер Router_1, принимая пакет, видит, что транспортная метка отсутствует, но есть метка, которая соответствует имеющемуся у него виртуальному каналу vc. Он снимает эту метку и, согласно уже своей внутренней таблице, отправляет его на интерфейс Int fa 0/0.10.
Объяснял так, как понимаю сам :). Надеюсь, мне удалось.
Ну что же, на этом можно завершить и задачу №2. Все получилось. В следующем посте я постараюсь немного углубиться и реализовать задачу №3, а именно совместное применение технологии MPLS и VRF.
А на этом я заканчиваю этот пост. Как всегда надеюсь, что он был вам интересен и познавателен.
Источник: go-to-easyit.com/2012/03/mpls-cisco-1.html
MPLS — (англ. Multiprotocol Label Switching) — мультипротокольная коммутация по меткам. Если рассматривать модель OSI, то данную технологию теоретически можно расположить между вторым и третьим уровнями.
Технология MPLS должна «подниматься» на уже существующей и нормально функционирующей IP сети, так как она использует таблицу маршрутизации (FIB - Forwarding Information Base).
Принцип работы заключается в том, что после организации IP связности, на роутерах включается MPLS. Каждому маршруту присваивается метка. Происходит формирование таблицы меток (LIB - MPLS Label Information Base), которая содержит информацию обо всех существующих метках (даже о метках, которые могут и не использоваться). После этого, каждый роутер формирует для себя другую таблицу (LFIB - MPLS Label Forwarding Information Base), согласно которой он уже и будет осуществлять передачу трафика. Другими словами, роутеру не надо более просматривать свою таблицу маршрутизации (FIB), выбирать маршрут и так далее (если конечно этот маршрут есть в LFIB). Практически получается, что роутер осуществляет коммутацию, а не маршрутизацию, что в свою очередь очень ускоряет работу по доставке трафика в место назначения.
Прелесть еще заключается и в том, что поверх MPLS могут работать различные протоколы 2-го и 3-го уровней.
Но, много погружаться в теорию не будем, так как сетевых решений (Network Solutions) существует много. Остальное можно найти в интернете.
Рассмотрение технологии начнем с общей настройки на обычной Ethernet сети (Задача №1) (так называемый Frame-Mode MPLS, когда метка вставляется внутрь фрейма), затем создадим схему с Layer 2 VPN с инкапсуляцией MPLS (Задача №2), потом погрузимся немного глубже и настроим схему с использованием технологии VRF и MPLS (Задача №3).
Итак, первая схема, которую мы реализуем, будет следующая:
На схеме представлены 4 роутера. Router_1 и Router_4 являются пограничными ELSR - Edge Label Switch Router (иногда их еще называют PE – Provider Edge Router). Они занимаются, с одной стороны, для «навешивания» (pushing) меток при входе пакета в домен MPLS и, с другой стороны, для «снятия» (popping) меток при выходе из домена MPLS. Роутеры Router_2 и Router_3 являются внутренними роутерами домена MPLS и называются LSR - Label Switch Router (второе название P – Provider Router). Они занимаются только передачей пакетов от одного MPLS роутера другому.
Итак, приступим. Для организации сетевой доступности (IP) будем использовать протокол динамической маршрутизации OSPF (почитать про его настройку можно вот в этих постах:№1 и №2). Хосты для проверки расположены в разных сетях.
Начнем с настройки стандартной сетевой доступности. Заходим на роутер Router_1:
R1>en
R1#conf t
R1(config)#hostname Router_1
R1(config)#int loopback 0 – создаем loopback интерфейс;
Router_1(config-if)#ip address 10.10.10.10 255.255.255.255
Router_1(config-if)#exit
Router_1(config)#int fa 0/0
Router_1(config-if)#ip address 192.168.1.1 255.255.255.0
Router_1(config-if)#no sh
Router_1(config-if)#exit
Router_1(config)#int fa 1/0
Router_1(config-if)#ip address 1.1.1.1 255.255.255.252
Router_1(config-if)#no sh
Router_1(config-if)#exit
Router_1(config)#int fa 2/0
Router_1(config-if)#ip address 2.2.2.1 255.255.255.252
Router_1(config-if)#no sh
Router_1(config-if)#exit
Router_1(config)#router ospf 1 – настраиваем протокол динамической маршрутизации OSPF;
Router_1(config-router)#passive-interface default – выберем, на какие интерфейсы отправлять дежурные пакеты OSPF;
Router_1(config-router)#no passive-interface fastEthernet 1/0
Router_1(config-router)#no passive-interface fastEthernet 2/0
Router_1(config-router)#network 192.168.1.0 0.0.0.255 area 1 –определяем сети для объявления;
Router_1(config-router)#network 1.1.1.0 0.0.0.3 area 0
Router_1(config-router)#network 2.2.2.0 0.0.0.3 area 0
Router_1(config-router)#network 10.10.10.10 0.0.0.0 area 0
Router_1(config-router)#exit
Router_1(config)#exit
Router_1#wr
Router_1#
Роутер Router_2:
R2>en
R2#conf t
R2(config)#hostname Router_2
Router_2(config)#int loopback 0
Router_2(config-if)#ip address 20.20.20.20 255.255.255.255
Router_2(config-if)#exit
Router_2(config)#int fa 0/0
Router_2(config-if)#ip address 1.1.1.2 255.255.255.252
Router_2(config-if)#no sh
Router_2(config-if)#exit
Router_2(config)#int fa 1/0
Router_2(config-if)#ip address 3.3.3.2 255.255.255.252
Router_2(config-if)#no sh
Router_2(config-if)#exit
Router_2(config)#router ospf 1
Router_2(config-router)#network 1.1.1.0 0.0.0.3 area 0
Router_2(config-router)#network 3.3.3.0 0.0.0.3 area 0
Router_2(config-router)#network 20.20.20.20 0.0.0.0 area 0
Router_2(config-router)#exit
Router_2(config)#exit
Router_2#wr
Router_2#
Роутер Router_3:
R3>en
R3#conf t
R3(config)#hostname Router_3
Router_3(config)#int loopback 0
Router_3(config-if)#ip address 30.30.30.30 255.255.255.255
Router_3(config-if)#exit
Router_3(config)#int fa 0/0
Router_3(config-if)#ip address 2.2.2.2 255.255.255.252
Router_3(config-if)#no sh
Router_3(config-if)#exit
Router_3(config)#int fa 1/0
Router_3(config-if)#ip address 4.4.4.2 255.255.255.252
Router_3(config-if)#no sh
Router_3(config-if)#exit
Router_3(config)#router ospf 1
Router_3(config-router)#network 2.2.2.0 0.0.0.3 area 0
Router_3(config-router)#network 4.4.4.0 0.0.0.3 area 0
Router_3(config-router)#network 30.30.30.30 0.0.0.0 area 0
Router_3(config-router)#exit
Router_3(config)#exit
Router_3#wr
Router_3#
И роутер Router_4:
R4>en
R4#conf t
R4(config)#hostname Router_4
Router_4(config)#int loopback 0
Router_4(config-if)#ip address 40.40.40.40 255.255.255.255
Router_4(config-if)#exit
Router_4(config)#int fa 0/0
Router_4(config-if)#ip address 3.3.3.1 255.255.255.252
Router_4(config-if)#no sh
Router_4(config-if)#exit
Router_4(config)#int fa 1/0
Router_4(config-if)#ip address 4.4.4.1 255.255.255.252
Router_4(config-if)#no sh
Router_4(config-if)#exit
Router_4(config)#int fa 2/0
Router_4(config-if)#ip address 192.168.2.1 255.255.255.0
Router_4(config-if)#no sh
Router_4(config-if)#exit
Router_4(config)#router ospf 1
Router_4(config-router)#passive-interface default
Router_4(config-router)#no passive-interface fastEthernet 0/0
Router_4(config-router)#no passive-interface fastEthernet 1/0
Router_4(config-router)#network 192.168.2.0 0.0.0.255 area 2
Router_4(config-router)#network 3.3.3.0 0.0.0.3 area 0
Router_4(config-router)#network 4.4.4.0 0.0.0.3 area 0
Router_4(config-router)#network 40.40.40.40 0.0.0.0 area 0
Router_4(config-router)#exit
Router_4(config)#exit
Router_4#wr
Router_4#
Проверим сетевую доступность. Сделаем ping и tracert с Host_1 на Host_2:
Как видно, сетевая доступность присутствует.
Приступим к настройке MPLS. Снова возвращаемся на роутер Router_1 и добавляем следующие команды:
Router_1#conf t
Router_1(config)#ip cef – включаем Cisco Express Forwarding, технология быстрой коммутации пакетов на 3-ем уровне компании cisco (если не включено);
Router_1(config)#mpls ip – включаем глобально процесс коммутации по меткам (MPLS);
Router_1(config)#mpls label protocol ldp – выбираем протокол, по которому будут обмениваться метками LSR (ELSR) между собой (есть еще TDP, он является проприетарным);
Router_1(config)#mpls ldp router-id loopback 0 – определяем, какой интерфейс (IP-адрес) берется в качестве ID роутера в процессе MPLS;
Router_1(config)#int fa 1/0
Router_1(config-if)#mpls ip – включаем MPLS на интерфейсе;
Router_1(config-if)#mpls mtu 1512 – увеличиваем размер mtu для избегания фрагментации (разбивки) фреймов (стандартный размер 1500);
Router_1(config-if)#exit
Router_1(config)#int fa 2/0
Router_1(config-if)#mpls ip
Router_1(config-if)#mpls mtu 1512
Router_1(config-if)#exit
Router_1(config)#exit
Router_1#wr
Router_1#
Router_2:
Router_2#conf t
Router_2(config)#ip cef
Router_2(config)#mpls ip
Router_2(config)#mpls label protocol ldp
Router_2(config)#mpls ldp router-id loopback 0
Router_2(config)#int fa 0/0
Router_2(config-if)#mpls ip
Router_2(config-if)#mpls mtu 1512
Router_2(config-if)#exit
Router_2(config)#int fa 1/0
Router_2(config-if)#mpls ip
Router_2(config-if)#mpls mtu 1512
Router_2(config-if)#exit
Router_2(config)#exit
Router_2#wr
Router_2#
Router_3:
Router_3#conf t
Router_3(config)#ip cef
Router_3(config)#mpls ip
Router_3(config)#mpls label protocol ldp
Router_3(config)#mpls ldp router-id loopback 0
Router_3(config)#int fa 0/0
Router_3(config-if)#mpls ip
Router_3(config-if)#mpls mtu 1512
Router_3(config-if)#exit
Router_3(config)#int fa 1/0
Router_3(config-if)#mpls ip
Router_3(config-if)#mpls mtu 1512
Router_3(config-if)#exit
Router_3(config)#exit
Router_3#wr
Router_4:
Router_4#conf t
Router_4(config)#ip cef
Router_4(config)#mpls ip
Router_4(config)#mpls label protocol ldp
Router_4(config)#mpls ldp router-id loopback 0
Router_4(config)#int fa 0/0
Router_4(config-if)#mpls ip
Router_4(config-if)#mpls mtu 1512
Router_4(config-if)#exit
Router_4(config)#int fa 1/0
Router_4(config-if)#mpls ip
Router_4(config-if)#mpls mtu 1512
Router_4(config-if)#exit
Router_4(config)#exit
Router_4#wr
Router_4#
Надеюсь, у вас получилось. Теперь вопрос, как проверить нашу работу :). А проверим мы командами группы show на одном из роутеров (например, Router_1) и посмотрим отловленные пакеты (при прохождении ping) на интерфейсе FastEthernet 1/0 роутера Router_2 (смотрящий в сторону Router_4).Итак, вот результат нашей работы над задачей №1 настройки MPLS:
- где:
- 1 – таблица LFIB (видно, что все маршруты помечены метками);
- 2 – таблица «соседей» по протоколу ldp (как и надо, присутствуют два «соседа»).
- где:
- 1 – таблица соответствия меток и маршрутов (с информацией, какой LSR ее предоставил).
Ну что же, первая задача успешно завершена, базовая конфигурация MPLS работает. Оказалось, не все так страшно :).
Приступаем к реализации задачи №2, а именно к настройке L2 VPN over MPLS.
Первую схему я создавал и настраивал, используя cisco 3640. Но, начиная делать вторую схему, обнаружил, что cisco 3640 не поддерживает инкапсуляцию mpls на интерфейсах. Так что, пришлось заменить их на cisco серии 7200. Вот, для ориентировки, slot-ы, которые я использовал на роутерах Router_1 и Router_4:
И на Router_2 и Router_3:
Помимо этого, немного преобразовалась и сама схема. Теперь она будет выглядеть следующим образом (напоминаю, на данный момент мы будем настраивать Layer 2 VPN через MPLS (EoMPLS в нашем случае)):
Осталось те же 4 роутера, но на пограничных роутерах у нас появились sub-интерфейсы, которые соответствуют некоторым vlan-ам (10 и 20 соответственно). И теперь, конечные станции находятся в одной сети 192.168.1.0/24. Задача состоит в том, чтобы Host_1 и Host_2 видели друг друга так, как будто они находятся в одном vlan-е. Выполнить эту задачу можно и через IP сеть (технология l2tpv3), но мы будем использовать L2 VPN с инкапсуляцией MPLS (l2mpls).
Приступим. Заходим на роутер Router_1 и делаем следующие настройки (настройки IP маршрутизации, базовые настройки MPLS будут такие же, как и в задаче №1):
R1>en
R1#conf t
R1(config)#hostname Router_1
Router_1(config)#ip cef
Router_1(config)#mpls ip
Router_1(config)#mpls label protocol ldp
Router_1(config)#mpls ldp router-id loopback 0
Router_1(config)#int loopback 0
Router_1(config-if)#ip address 10.10.10.10 255.255.255.255
Router_1(config-if)#exit
Router_1(config)#int fa 1/0
Router_1(config-if)#ip address 1.1.1.1 255.255.255.252
Router_1(config-if)#no sh
Router_1(config-if)#mtu 1512
Router_1(config-if)#mpls ip
Router_1(config-if)#mpls mtu 1512
Router_1(config-if)#exit
Router_1(config)#int fa 1/1
Router_1(config-if)#ip address 2.2.2.1 255.255.255.252
Router_1(config-if)#no sh
Router_1(config-if)#mtu 1512
Router_1(config-if)#mpls ip
Router_1(config-if)#mpls mtu 1512
Router_1(config-if)#exit
Router_1(config)#router ospf 1
Router_1(config-router)#passive-interface default
Router_1(config-router)#no passive-interface fastEthernet 1/0
Router_1(config-router)#no passive-interface fastEthernet 1/1
Router_1(config-router)#network 10.10.10.10 0.0.0.0 area 0
Router_1(config-router)#network 1.1.1.0 0.0.0.3 area 0
Router_1(config-router)#network 2.2.2.0 0.0.0.3 area 0
Router_1(config-router)#exit
Router_1(config)#int fa 0/0
Router_1(config-if)#no sh
Router_1(config-if)#exit
Router_1(config)#int fa 0/0.10 – создаем sub-интерфейс для vlan 10;
Router_1(config-subif)#encapsulation dot1Q 10 – прописываем инкапсуляцию dot1q с тегом 10 (№ vlan). На другом роутере (Router_4) тег может быть другим;
Router_1(config-subif)#xconnect 40.40.40.40 9999 encapsulation mpls –создаем специальное подключение до второго роутера. Указываем метод инкапсуляции mpls. 9999 – это номер виртуального канала VC (Virtual Circuit). Он должен быть одинаковым с двух сторон и идентифицирует сам канал;
Router_1(config-subif-xconn)#exit
Router_1(config-subif)#no sh
Router_1(config-subif)#exit
Router_1(config)#exit
Router_1#wr
Router_1#
Переходим к Router_2:
R2>en
R2#conf t
R2(config)#hostname Router_2
Router_2(config)#ip cef
Router_2(config)#mpls ip
Router_2(config)#mpls label protocol ldp
Router_2(config)#mpls ldp router-id loopback 0
Router_2(config)#int loopback 0
Router_2(config-if)#ip address 20.20.20.20 255.255.255.255
Router_2(config-if)#exit
Router_2(config)#int fa 1/0
Router_2(config-if)#ip address 1.1.1.2 255.255.255.252
Router_2(config-if)#no sh
Router_2(config-if)#mtu 1512
Router_2(config-if)#mpls ip
Router_2(config-if)#mpls mtu 1512
Router_2(config-if)#exit
Router_2(config)#int fa 1/1
Router_2(config-if)#ip address 3.3.3.2 255.255.255.252
Router_2(config-if)#no sh
Router_2(config-if)#mpls ip
Router_2(config-if)#mtu 1512
Router_2(config-if)#mpls ip
Router_2(config-if)#mpls mtu 1512
Router_2(config-if)#exit
Router_2(config)#router ospf 1
Router_2(config-router)#network 20.20.20.20 0.0.0.0 area 0
Router_2(config-router)#network 1.1.1.0 0.0.0.3 area 0
Router_2(config-router)#network 1.1.1.0 0.0.0.3 area 0
Router_2(config-router)#network 3.3.3.0 0.0.0.3 area 0
Router_2(config-router)#exit
Router_2(config)#exit
Router_2#wr
Router_2#
Router_3:
R3>en
R3#conf t
R3(config)#hostname Router_3
Router_3(config)#ip cef
Router_3(config)#mpls ip
Router_3(config)#mpls label protocol ldp
Router_3(config)#mpls ldp router-id loopback 0
Router_3(config)#int loopback 0
Router_3(config-if)#ip address 30.30.30.30 255.255.255.255
Router_3(config-if)#exit
Router_3(config)#int fa 1/0
Router_3(config-if)#ip address 2.2.2.2 255.255.255.252
Router_3(config-if)#no sh
Router_3(config-if)#mtu 1512
Router_3(config-if)#mpls ip
Router_3(config-if)#mpls mtu 1512
Router_3(config-if)#exit
Router_3(config)#int fa 1/1
Router_3(config-if)#ip address 4.4.4.2 255.255.255.252
Router_3(config-if)#no sh
Router_3(config-if)#mtu 1512
Router_3(config-if)#mpls ip
Router_3(config-if)#mpls mtu 1512
Router_3(config-if)#exit
Router_3(config)#router ospf 1
Router_3(config-router)#network 30.30.30.30 0.0.0.0 area 0
Router_3(config-router)#network 2.2.2.0 0.0.0.3 area 0
Router_3(config-router)#network 4.4.4.0 0.0.0.3 area 0
Router_3(config-router)#exit
Router_3(config)#exit
Router_3#wr
Router_3#
Router_4:
R4>en
R4#conf t
R4(config)#hostname Router_4
Router_4(config)#ip cef
Router_4(config)#mpls ip
Router_4(config)#mpls label protocol ldp
Router_4(config)#mpls ldp router-id loopback 0
Router_4(config)#int loopback 0
Router_4(config-if)#ip address 40.40.40.40 255.255.255.255
Router_4(config-if)#exit
Router_4(config)#int fa 1/0
Router_4(config-if)#ip address 4.4.4.1 255.255.255.252
Router_4(config-if)#no sh
Router_4(config-if)#mtu 1512
Router_4(config-if)#mpls ip
Router_4(config-if)#mpls mtu 1512
Router_4(config-if)#exit
Router_4(config)#int fa 1/1
Router_4(config-if)#ip address 3.3.3.1 255.255.255.252
Router_4(config-if)#no sh
Router_4(config-if)#mtu 1512
Router_4(config-if)#mpls ip
Router_4(config-if)#mpls mtu 1512
Router_4(config-if)#exit
Router_4(config)#router ospf 1
Router_4(config-router)#passive-interface default
Router_4(config-router)#no passive-interface fastEthernet 1/0
Router_4(config-router)#no passive-interface fastEthernet 1/1
Router_4(config-router)#network 40.40.40.40 0.0.0.0 area 0
Router_4(config-router)#network 3.3.3.0 0.0.0.3 area 0
Router_4(config-router)#network 4.4.4.0 0.0.0.3 area 0
Router_4(config-router)#exit
Router_4(config)#int fa 0/0
Router_4(config-if)#no sh
Router_4(config-if)#exit
Router_4(config)#int fa 0/0.20
Router_4(config-subif)#encapsulation dot1Q 20
Router_4(config-subif)#xconnect 10.10.10.10 9999 encapsulation mpls
Router_4(config-subif-xconn)#exit
*Mar 22 15:05:48.439: %LDP-5-NBRCHG: LDP Neighbor 10.10.10.10:0 (3) is UP – это сообщение должно появиться, если вы все правильно настроили;
Router_4(config-subif)#exit
Router_4(config)#exit
Router_4#wr
Router_4#
Ну что, переходим к проверкам. Для начала, посмотрим, что у нас имеется на роутерах. Router_1:
На Router_4:
Из рисунков видно, что l2 канал установлен, тип у него Ethernet, сопоставлен он с нужным интерфейсом (Int fa 0/0.10 с одной стороны и Int fa 0/0.20 с другой стороны), показаны IP – адреса «соседей», ID виртуального канала (vc) и самое главное, его статус UP. Так же, можно увидеть, какие локальные метки навесил каждый роутер.
Далее, сделаем ping с Host_2 на Host_1:
Все работает. Замечу лишь то, что при таких l2 тоннелях следует следить, чтобы не было одинаковых IP – адресов. Помните, что пользователи находятся в одной сети :).
Теперь, для полноты картины, отловим несколько пакетов и посмотрим, что у них внутри. Первая точка – Int fa 1/1 на Router_4 (этот интерфейс смотрит на Router_2):
Вторая точка - Int fa 1/0 на Router_2 (этот интерфейс смотрит на Router_1):
Третья точка – Int fa 0/0 на Router_1 (этот интерфейс смотрит в сторону Host_1):
Теперь посмотрим, как все происходит. Router_4, приняв пакет ICMP (Request) от Host_2 на интерфейс Int fa 0/0.20, понимает, что он относится к l2vpn mpls каналу и должен быть передан через сеть MPLS. Для этого он навешивает на него 2 метки. Первая метка используется для коммутации пакета в сети MPLS, а вторая метка используется для дальнейшей идентификации канала vc. Обе метки имеют ttl, равный 255. Пакет отправляется дальше. Router_2 принимает пакет и начинает обработку. Он видит, что пакет адресован сети, которая находится сразу за Router_1 и, чтобы упростить задачу «соседу» (технология снятия метки на предпоследнем LSR (PHP - Penultimate Hop Popping), снимает одну из меток, которая используется для коммутации. У второй метки всего лишь уменьшается ttl на единицу. Пакет летит дальше. Конечный роутер Router_1, принимая пакет, видит, что транспортная метка отсутствует, но есть метка, которая соответствует имеющемуся у него виртуальному каналу vc. Он снимает эту метку и, согласно уже своей внутренней таблице, отправляет его на интерфейс Int fa 0/0.10.
Объяснял так, как понимаю сам :). Надеюсь, мне удалось.
Ну что же, на этом можно завершить и задачу №2. Все получилось. В следующем посте я постараюсь немного углубиться и реализовать задачу №3, а именно совместное применение технологии MPLS и VRF.
А на этом я заканчиваю этот пост. Как всегда надеюсь, что он был вам интересен и познавателен.
Источник: go-to-easyit.com/2012/03/mpls-cisco-1.html
Комментариев нет:
Отправить комментарий