Как обычно, для общей теории предлагаю вам обратиться к интернету, я же начну с примера и по ходу повествования буду пояснять непонятные вещи :).
Представим себя, ненадолго, провайдером. У нас имеется в распоряжении группа роутеров расположенных на определенной территории, между которыми настроено сетевое взаимодействие. К нам обратились два клиента и попросили организовать связь между их подразделениями, находящимися на приличном удалении друг от друга. Причем оказалось, что у этих клиентов существует уже настроенная IP – адресация, от которой они не хотят отказываться и, мало того, она пересекается.
Для реализации такой задачи простыми методами не обойтись. Вот тут и появляются нам на помощь технологии VRF и MPLS (конечно же, можно использовать и другие способы, например, IPsec VPN, но это уже темы других постов). По большому счету, технология VRF близка к понятию VPN. Но VPN – это принцип объединения узлов клиента, находящихся под единым административным подчинением, через публичную сеть оператора, а VRF – это больше описание VPN в приделах одного устройства, которое включает в себя атрибуты и правила распространения маршрутной информации, отдельную таблицу маршрутизации и так далее. Другими словами, VRF-ы делят один физический роутер, на определенное количество виртуальных роутеров, которые работают независимо друг от друга. Таким образом получается, что сколько у нас будет запланировано VPN-ов, столько VRF-ов нам необходимо будет создать на устройстве.
Собравшись с мыслями, обдумав, как решить такую задачу, появилось вот такое решение, которое я и предлагаю вам сегодня реализовать:
Для организации сетевой доступности внутри MPLS домена используется протокол маршрутизации OSPF. Для обмена маршрутной информацией VRF-ов между ELSR-ми используется протокол MP-BGP.
Зачем же нужен MPLS, спросите вы? А он нам понадобится для того, чтобы перенести данные протокола BGP, работающего между ELSR-ми.
Рассмотрим следующую ситуацию. Нам нужно добраться из сети 192.168.1.0/24 в сеть 172.16.1.0/24 (сети клиента №1, VRF_A). Согласно статическому маршруту на Router_1 пакет долетит до Router_2, который, в свою очередь, согласно информации от протокола BGP, отправит его в сторону Router_4. По внутреннему протоколу маршрутизации (OSPF) Router_2 знает, что его сосед по BGP Router_4 находится за роутером Router_3. И тут произойдет следующее, Router_3, приняв пакет, просто отбросит его, так как он не знает о сети 172.16.1.0/24. Почему так произойдет? А потому, что Router_3 не участвует в процессе BGP. Чтобы этого не случилось, на нем тоже надо включать этот протокол (об этом можно посмотреть в моем посте по настройке протокола BGP, я затрагивал там эту тему в общих чертах). Это в наши планы не входит (это только тут у нас один роутер, а в реальной сети их может быть очень много и включать на каждом роутере BGP как то не хочется).
Вот тут то и приходит нам на помощь MPLS. Именно организовав MPLS домен, мы сможем обеспечить быстрый проброс информации BGP между нужными нам точками без включения самого протокола на всех роутерах.
Как будет работать пример выше после того, как мы настроим MPLS? Теперь, приняв пакет, Router_2 (ELSR) поймет, что он относится к VRF_A, пометит его 2-мя метками и отправит дальше. Первая метка будет использоваться для коммутации этого пакета при прохождении его по MPLS домену. Вторая метка, будет использоваться либо для идентификации нужного VRF, либо для идентификации интерфейса, куда надо будет послать пакет дальше на конечном ELSR (Router_4). При настроенном PHP (Penultimate Hop Popping) первая метка будет снята с пакета на последнем роутере, стоящем перед ELSR (в нашем случае на Router_3). Таким образом, Router_4 примет пакет уже с одной меткой, которая поможет ему определить, куда отправить пакет. В итоге, пакет благополучно дойдет до адресата.
Надеюсь, немного разобрались. Перейдем непосредственно к настройкам. Как всегда, начнем с организации обычной сетевой доступности.
Настроим сначала CE роутеры Router_1 и Router_5.
Router_1:
Router_5:
Теперь перейдем к роутерам, которые, впоследствии, будут подключены к MPLS домену.
Router_2:
Router_3:
Router_4:
Остановимся и посмотрим, что мы имеем на данный момент. Зайдем на Router_2:
Видим, что OSPF работает. Сетевая доступность присутствует. Сеть 172.16.1.0/24 пока не доступна.
Посмотрим, куда может «достучаться» Host_1:
Шлюз доступен (1), доступен IP – адрес, смотрящий в сторону Router_3, сеть 172.16.1.0/24 так же пока не доступна (3).
Двигаемся дальше. Так как VRF-ы настраиваются локально на устройстве, то их надо настроить только на роутерах Router_2 и Router_4. Возвращаемся на Router_2:
Теперь Router_4:
Итак, VRF-ы настроены. Теперь, для того чтобы выполнить команду ping с этих роутеров, нужно добавлять параметр VRF. Выглядит это так: ping vrf VRF_A 192.168.1.1.
Двигаемся дальше. Теперь настроим BGP соседство между этими роутерами и определим сети, которыми они должны обмениваться (определим политику редистрибуции). Если со статическими маршрутами все понятно, то для сетей 192.168.2.0/24 (Router_2) и 17216.1.0/24 VRF_A (Router_4), которые являются directly connected, следует создать route-map, согласно которому в BGP будут попадать только они (так как помимо них есть еще и другие directly connected сети). Так же в этом блоке настроим связку BGP и VRF.
Снова возвращаемся на Router_2:
Теперь Router_4:
Проверим, что у нас есть на данный момент. Зайдем на Router_2:
Как видно из рисунка, на роутере присутствуют две разные таблицы маршрутизации для соответствующих VRF-ов. «Сосед» по BGP тот, который нужен. Но помимо этих двух таблиц, существует и третья общая таблица (не относящаяся ни к одному из VRF). Она сформирована с использованием протокола OSPF, и по ней видно, как добраться до роутера Router_4 (40.40.40.40):
Видно, что путь к Router_4 лежит через Router_3. По идее, должно все работать, но если вы попробуете сделать команду ping с Host_1 на адрес удаленной сети 172.16.1.1/24:
то у вас ничего не получиться (2). Напомню, это происходит из-за того, что Router_2 не знает о сети 172.16.1.0/24 (да и о других сетях тоже). Из рисунка также можно проследить работу VRF. Ping на IP-адрес Router_2 (1), находящийся в VRF_A, проходит, а вот на IP-адрес, находящийся в VRF_B (3), роутер возвращает ответ, что он не знает о такой сети («Заданный узел недоступен»).
Теперь перейдем к окончательной настройке нашей сети. Настроим MPLS на роутерах провайдера. Начнем с Router_2:
Теперь Router_3:
И Router_4:
Ну вот, вроде и все :). Теперь давайте все проверим. Сделаем ping с конечных хостов, посмотрим, что твориться на роутерах и отловим парочку пакетов :).
Host_1 и Host_2:
Видно, что Host_2 успешно ping-ует удаленную сеть (1) (192168.2.0/24), которая относится, как и он сам, к VRF_B. Ping на IP-адрес из другого VRF_A не проходит (2). Host_1 успешно «достукивается» до сети 172.16.1.0/24 (3) и не может попасть в сеть, где находится Host_2 (4), так как это уже другой VRF (хоть IP - адресация в этой сети такая же).
Что есть на Router_2 и Router_4:
Как видно из рисунка, все работает. MPLS пометила нужные маршруты (в графе «Outgoing» видны сети, которые относятся к VFR-ам, помеченные символом «V»; параметр «Untaged» означает, что данная сеть доступна через НЕ MPLS интерфейс и пакет, адресованный ей, после снятия метки будет отправлен основываясь на обычной таблице маршрутизации (FIB), «Aggregate» означает, что сеть появилась через редистрибуцию directly connected сетей), видны таблицы маршрутизации BGP для каждого VRF-а. Так же, обычные таблицы маршрутизации VRF_A и VRF_B содержат нужные маршруты.
Теперь посмотрим на содержимое пакетов. Отловим пакет ICMP request от Host_1 в сторону 172.16.1.1 на интерфейсе Router_2 (Int Fa 1/0), смотрящем в сторону Router_3:
Присутствуют две метки. №17 (1) – метка, используемая для доставки пакета по MPLS домену. №21 (1) – метка, используемая для идентификации VRF-а (или интерфейса, через который далее отправлять пакет). Если вы посмотрите на предыдущий рисунок, то в таблице LFIB роутера Router_4 заметите, что метке №21 соответствует directly connected сеть 172.16.1.0/24.
Посмотрим на тот же пакет уже на входе в роутер Router_4 (Int Fa 0/0):
Видно, что метка №17 уже снята и осталась только метка с №21. Согласно таблице LFIB у нее стоит параметр «Aggregate», это означает, что данная сеть попала через редистрибуцию directly connected сетей в BGP. Router_4 снимет эту метку, определит, что она относится к VRF_A и отправит пакет по месту назначения.
ICMP reply обрабатывается таким же образом, только в другую сторону. На Router_4 навешиваются две метки (одна для продвижения пакета по MPLS домену, вторая для идентификации VRF-а на другой стороне и так далее).
Для сравнения, давайте еще посмотрим на пакет ICMP reply от Router_2, идущий обратно на ICMP request от Host_2 на роутере Router_4 (Int Fa 0/0):
Видно, что метка уже имеет значение №22. Теперь Router_4, согласно своей таблице LFIB видит, что пакет соответствует VRF_B и, после снятия метки, его следует отправить через интерфейс Int Fa 1/0 (next hop 4.4.4.2).
Ну что же, осилили :). Поздравляю вас!!! Все работает.
На этом, я хочу закончить этот пост. Как всегда надеюсь, что он был для вас познавательным, не скучным и информативным.
Источник: go-to-easyit.com/2012/04/mpls-cisco-2.html
Представим себя, ненадолго, провайдером. У нас имеется в распоряжении группа роутеров расположенных на определенной территории, между которыми настроено сетевое взаимодействие. К нам обратились два клиента и попросили организовать связь между их подразделениями, находящимися на приличном удалении друг от друга. Причем оказалось, что у этих клиентов существует уже настроенная IP – адресация, от которой они не хотят отказываться и, мало того, она пересекается.
Для реализации такой задачи простыми методами не обойтись. Вот тут и появляются нам на помощь технологии VRF и MPLS (конечно же, можно использовать и другие способы, например, IPsec VPN, но это уже темы других постов). По большому счету, технология VRF близка к понятию VPN. Но VPN – это принцип объединения узлов клиента, находящихся под единым административным подчинением, через публичную сеть оператора, а VRF – это больше описание VPN в приделах одного устройства, которое включает в себя атрибуты и правила распространения маршрутной информации, отдельную таблицу маршрутизации и так далее. Другими словами, VRF-ы делят один физический роутер, на определенное количество виртуальных роутеров, которые работают независимо друг от друга. Таким образом получается, что сколько у нас будет запланировано VPN-ов, столько VRF-ов нам необходимо будет создать на устройстве.
Собравшись с мыслями, обдумав, как решить такую задачу, появилось вот такое решение, которое я и предлагаю вам сегодня реализовать:
- Что мы имеем:
- Router_1 и Router_5 – Customer Edge (CE) роутеры, к которым подключены клиентские сети.
- Router_2 и Router_4 – роутеры на границе MPLS домена (ELSR – Edge Label Switch Router или PE – Provider Edge router).
- Router_3 – роутер, находящийся внутри домена MPLS (LSR – Label Switch Router или P – Provider router).
- Host_1 – пользователь для проверки от клиента №1 (IP – 192.168.1.10/24).
- Host_2 – пользователь для проверки от клиента №2 (IP – 172.16.1.10/24).
Для организации сетевой доступности внутри MPLS домена используется протокол маршрутизации OSPF. Для обмена маршрутной информацией VRF-ов между ELSR-ми используется протокол MP-BGP.
Зачем же нужен MPLS, спросите вы? А он нам понадобится для того, чтобы перенести данные протокола BGP, работающего между ELSR-ми.
Рассмотрим следующую ситуацию. Нам нужно добраться из сети 192.168.1.0/24 в сеть 172.16.1.0/24 (сети клиента №1, VRF_A). Согласно статическому маршруту на Router_1 пакет долетит до Router_2, который, в свою очередь, согласно информации от протокола BGP, отправит его в сторону Router_4. По внутреннему протоколу маршрутизации (OSPF) Router_2 знает, что его сосед по BGP Router_4 находится за роутером Router_3. И тут произойдет следующее, Router_3, приняв пакет, просто отбросит его, так как он не знает о сети 172.16.1.0/24. Почему так произойдет? А потому, что Router_3 не участвует в процессе BGP. Чтобы этого не случилось, на нем тоже надо включать этот протокол (об этом можно посмотреть в моем посте по настройке протокола BGP, я затрагивал там эту тему в общих чертах). Это в наши планы не входит (это только тут у нас один роутер, а в реальной сети их может быть очень много и включать на каждом роутере BGP как то не хочется).
Вот тут то и приходит нам на помощь MPLS. Именно организовав MPLS домен, мы сможем обеспечить быстрый проброс информации BGP между нужными нам точками без включения самого протокола на всех роутерах.
Как будет работать пример выше после того, как мы настроим MPLS? Теперь, приняв пакет, Router_2 (ELSR) поймет, что он относится к VRF_A, пометит его 2-мя метками и отправит дальше. Первая метка будет использоваться для коммутации этого пакета при прохождении его по MPLS домену. Вторая метка, будет использоваться либо для идентификации нужного VRF, либо для идентификации интерфейса, куда надо будет послать пакет дальше на конечном ELSR (Router_4). При настроенном PHP (Penultimate Hop Popping) первая метка будет снята с пакета на последнем роутере, стоящем перед ELSR (в нашем случае на Router_3). Таким образом, Router_4 примет пакет уже с одной меткой, которая поможет ему определить, куда отправить пакет. В итоге, пакет благополучно дойдет до адресата.
Надеюсь, немного разобрались. Перейдем непосредственно к настройкам. Как всегда, начнем с организации обычной сетевой доступности.
Настроим сначала CE роутеры Router_1 и Router_5.
Router_1:
R1>en
R1#conf t
R1(config)#hostname Router_1
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 0/0.3
Router_1(config-subif)#encapsulation dot1Q 3 – создаем sub-интерфейс;
Router_1(config-subif)#ip address 192.168.1.1 255.255.255.0
Router_1(config-subif)#exit
Router_1(config)#int fa 0/0
Router_1(config-if)#no sh
Router_1(config-if)#no shutdown
Router_1(config-if)#exit
Router_1(config)#int fa 1/0
Router_1(config-if)#ip address 1.1.1.2 255.255.255.252
Router_1(config-if)#exit
Router_1(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.1 – прописываем маршрут по умолчанию;
Router_1(config)#exit
Router_1#wr
Router_1#
Router_5:
R5>en
R5#conf t
R5(config)#hostname Router_5
Router_5(config)#int loopback 0
Router_5(config-if)#ip address 50.50.50.50 255.255.255.255
Router_5(config-if)#exit
Router_5(config)#int fa 0/0.4
Router_5(config-subif)#encapsulation dot1Q 4
Router_5(config-subif)#ip address 172.16.1.1 255.255.255.0
Router_5(config-subif)#exit
Router_5(config)#int fa 0/0
Router_5(config-if)#no shutdown
Router_5(config-if)#exit
Router_5(config)#int fa 1/0
Router_5(config-if)#ip address 4.4.4.2 255.255.255.252
Router_5(config-if)#no shutdown
Router_5(config-if)#exit
Router_5(config)#ip route 0.0.0.0 0.0.0.0 4.4.4.1
Router_5(config)#exit
Router_5#wr
Router_5#
Теперь перейдем к роутерам, которые, впоследствии, будут подключены к MPLS домену.
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.1 255.255.255.252
Router_2(config-if)#no shutdown
Router_2(config-if)#exit
Router_2(config)#int fa 1/0
Router_2(config-if)#ip address 2.2.2.1 255.255.255.252
Router_2(config-if)#no shutdown
Router_2(config-if)#exit
Router_2(config)#int fa 2/0
Router_2(config-if)#ip address 192.168.2.1 255.255.255.0
Router_2(config-if)#no shutdown
Router_2(config-if)#exit
Router_2(config)#router ospf 1 – настраиваем внутренний протокол маршрутизации (OSPF);
Router_2(config-router)#passive-interface default
Router_2(config-router)#no passive-interface fa 1/0
Router_2(config-router)#network 20.20.20.20 0.0.0.0 area 0
Router_2(config-router)#network 2.2.2.0 0.0.0.3 area 0
Router_2(config-router)#exit
Router_2(config)#ip route 192.168.1.0 255.255.255.0 1.1.1.2
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 shutdown
Router_3(config-if)#exit
Router_3(config)#int fa 1/0
Router_3(config-if)#ip address 3.3.3.2 255.255.255.252
Router_3(config-if)#no shutdown
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 3.3.3.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)#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 shutdown
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 shutdown
Router_4(config-if)#exit
Router_4(config)#int fa 2/0
Router_4(config-if)#ip address 172.16.1.1 255.255.255.0
Router_4(config-if)#no shutdown
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 fa 0/0
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)#exit
Router_4(config)#ip route 172.16.1.0 255.255.255.0 4.4.4.2 – не волнуйтесь насчет этого маршрута, он немного будет немного переделан при настройке VFR-ов, сейчас он нужен чисто для вида;
Router_4(config)#exit
Router_4#wr
Router_4#
Остановимся и посмотрим, что мы имеем на данный момент. Зайдем на Router_2:
Видим, что OSPF работает. Сетевая доступность присутствует. Сеть 172.16.1.0/24 пока не доступна.
Посмотрим, куда может «достучаться» Host_1:
Шлюз доступен (1), доступен IP – адрес, смотрящий в сторону Router_3, сеть 172.16.1.0/24 так же пока не доступна (3).
Двигаемся дальше. Так как VRF-ы настраиваются локально на устройстве, то их надо настроить только на роутерах Router_2 и Router_4. Возвращаемся на Router_2:
Router_2#conf t
Router_2(config)#ip vrf VRF_A – создаем первый VRF;
Router_2(config-vrf)#rd 1:1 – задаем уникальный идентификатор, который будет использоваться для определения принадлежности маршрутной информации тому или иному VPN-у. Он может задаваться двумя способами: 16-bit номер: 32-bit номер (пример, 1:3) или 32-bit IP адрес: 16-bit номер (пример, 172.16.1.1:1);
Router_2(config-vrf)#route-target export 1:1 – определяем идентификатор, описывающий правила экспорта маршрутов (сети, которые будут выходить из данного VRF (можно настроить передачу сетей между VRF-ми));
Router_2(config-vrf)#route-target import 1:1 – определяем идентификатор, описывающий правила импорта маршрутов (сети, которые будут входить в данный VRF (можно настроить передачу сетей между VRF-ми));
Router_2(config-vrf)#exit
Router_2(config)#ip vrf VRF_B
Router_2(config-vrf)#rd 2:1
Router_2(config-vrf)#route-target export 2:1
Router_2(config-vrf)#route-target import 2:1
Router_2(config-vrf)#exit
Router_2(config)#int fa 0/0
Router_2(config-if)#ip vrf forwarding VRF_A – назначаем принадлежность интерфейса нужному VRF-у;
% Interface FastEthernet0/0 IP address 1.1.1.1 removed due to enabling VRF VRF_A – при назначении интерфейса в VRF с него снимается IP-адрес (если он был настроен);
Router_2(config-if)#ip address 1.1.1.1 255.255.255.252 – заново назначаем IP-адрес на интерфейсе;
Router_2(config-if)#exit
Router_2(config)#int fa 2/0
Router_2(config-if)#ip vrf forwarding VRF_B
% Interface FastEthernet2/0 IP address 192.168.2.1 removed due to enabling VRF VRF_B
Router_2(config-if)#ip address 192.168.2.1 255.255.255.0
Router_2(config-if)#exit
Router_2(config)#no ip route 192.168.1.0 255.255.255.0 1.1.1.2 –убираем статический маршрут из общей конфигурации;
Router_2(config)#ip route vrf VRF_A 192.168.1.0 255.255.255.0 1.1.1.2 –добавляем этот маршрут в нужный VRF;
Router_2(config)#exit
Router_2#wr
Router_2#
Теперь Router_4:
Router_4>en
Router_4#conf t
Router_4(config)#ip vrf VRF_A
Router_4(config-vrf)#rd 1:1
Router_4(config-vrf)#route-target both 1:1 – вместо двух команд (смотри выше), можно использовать одну. Результат один и тот же;
Router_4(config-vrf)#exit
Router_4(config)#ip vrf VRF_B
Router_4(config-vrf)#rd 2:1
Router_4(config-vrf)#route-target both 2:1
Router_4(config-vrf)#exit
Router_4(config)#int fa 1/0
Router_4(config-if)#ip vrf forwarding VRF_B
Router_4(config-if)#ip address 4.4.4.1 255.255.255.252
Router_4(config-if)#exit
Router_4(config)#int fa 2/0
Router_4(config-if)#ip vrf forwarding VRF_A
Router_4(config-if)#ip address 172.16.1.1 255.255.255.0
Router_4(config-if)#exit
Router_4(config)#no ip route 172.16.1.0 255.255.255.0 4.4.4.2
Router_4(config)#ip route vrf VRF_B 172.16.1.0 255.255.255.0 4.4.4.2
Router_4(config)#exit
Router_4#wr
Router_4#
Итак, VRF-ы настроены. Теперь, для того чтобы выполнить команду ping с этих роутеров, нужно добавлять параметр VRF. Выглядит это так: ping vrf VRF_A 192.168.1.1.
Двигаемся дальше. Теперь настроим BGP соседство между этими роутерами и определим сети, которыми они должны обмениваться (определим политику редистрибуции). Если со статическими маршрутами все понятно, то для сетей 192.168.2.0/24 (Router_2) и 17216.1.0/24 VRF_A (Router_4), которые являются directly connected, следует создать route-map, согласно которому в BGP будут попадать только они (так как помимо них есть еще и другие directly connected сети). Так же в этом блоке настроим связку BGP и VRF.
Снова возвращаемся на Router_2:
Router_2#conf t
Router_2(config)#ip access-list extended FOR_BGP – создаем список доступа, согласно которому пропускаться будет только нужная нам сеть;
Router_2(config-ext-nacl)#permit ip 192.168.1.0 0.0.0.255 any –определяем эту сеть;
Router_2(config-ext-nacl)#deny ip any any – запрещаем все остальное;
Router_2(config-ext-nacl)#exit
Router_2(config)#route-map PERMIT_CONNECTED permit 10 – создаем «пропускающую» route-map;
Router_2(config-route-map)#match ip address FOR_BGP – привязываем к ней список доступа;
Router_2(config-route-map)#exit
Router_2(config)#router bgp 6500 – включаем процесс BGP и определяем номер AS;
Router_2(config-router)#no auto-summary – выключаем автоматическое суммирование маршрутов (если включено);
Router_2(config-router)#no synchronization – выключаем синхронизацию (если включена);
Router_2(config-router)#neighbor 40.40.40.40 remote-as 6500 –прописываем IP-адрес соседа, находящегося в этой же AS;
Router_2(config-router)#neighbor 40.40.40.40 update-source loopback 0 –указываем, что в качестве источника обновлений информации будет выступать IP-адрес loopback 0 интерфейса;
Router_2(config-router)#bgp router-id 20.20.20.20 – определяем ID роутера в процессе BGP;
Router_2(config-router)#address-family vpnv4 – переходим в режим конфигурирования VPN;
Router_2(config-router-af)#neighbor 40.40.40.40 activate – активируем ранее указанного «соседа» (разрешаем обмен информацией);
Router_2(config-router-af)#neighbor 40.40.40.40 send-community extended – включаем рассылку расширенных атрибутов BGP;
Router_2(config-router-af)#exit-address-family – выходим из этого режима;
Router_2(config-router)#address-family ipv4 vrf VRF_A – определяем семейство адресов для данного VRF-а;
Router_2(config-router-af)#redistribute static – указываем, что для данного VRF-а для объявления использовать адреса сетей, полученные через редистрибуцию статических маршрутов;
Router_2(config-router-af)#exit-address-family
Router_2(config-router)#address-family ipv4 vrf VRF_B
Router_2(config-router-af)#redistribute connected route-map PERMIT_CONNECTED – указываем, что для данного VRF-а для объявления использовать адреса сетей, полученные через редистрибуцию connected маршрутов, соответствующих ранее настроенной route-map;
Router_2(config-router-af)#exit-address-family
Router_2(config-router)#exit
Router_2(config)#exit
Router_2#wr
Router_2#
Теперь Router_4:
Router_4#conf t
Router_4(config)#ip access-list extended FOR_BGP
Router_4(config-ext-nacl)#permit ip 172.16.1.0 0.0.0.255 any
Router_4(config-ext-nacl)#deny ip any any
Router_4(config-ext-nacl)#exit
Router_4(config)#route-map PERMIT_CONNECTED permit 10
Router_4(config-route-map)#match ip address FOR_BGP
Router_4(config-route-map)#exit
Router_4(config)#router bgp 6500
Router_4(config-router)#no auto-summary
Router_4(config-router)#no synchronization
Router_4(config-router)#neighbor 20.20.20.20 remote-as 6500
Router_4(config-router)#neighbor 20.20.20.20 update-source loopback 0
Router_4(config-router)#bgp router-id 40.40.40.40
*Mar 1 05:29:56.526: %BGP-5-ADJCHANGE: neighbor 20.20.20.20 Up
Router_4(config-router)#address-family vpnv4
Router_4(config-router-af)#neighbor 20.20.20.20 activate
*Mar 1 05:31:24.206: %BGP-5-ADJCHANGE: neighbor 20.20.20.20 Down Address family activated
*Mar 1 05:31:26.342: %BGP-5-ADJCHANGE: neighbor 20.20.20.20 Up –соседство установилось;
Router_4(config-router-af)#neighbor 20.20.20.20 send-community extended
Router_4(config-router-af)#exit-address-family
Router_4(config-router)#address-family ipv4 vrf VRF_A
Router_4(config-router-af)#redistribute connected route-map PERMIT_CONNECTED
Router_4(config-router-af)#exit-address-family
Router_4(config-router)#address-family ipv4 vrf VRF_B
Router_4(config-router-af)#redistribute static
Router_4(config-router-af)#exit-address-family
Router_4(config-router)#exit
Router_4(config)#exit
Router_4#wr
Router_4#
Проверим, что у нас есть на данный момент. Зайдем на Router_2:
Как видно из рисунка, на роутере присутствуют две разные таблицы маршрутизации для соответствующих VRF-ов. «Сосед» по BGP тот, который нужен. Но помимо этих двух таблиц, существует и третья общая таблица (не относящаяся ни к одному из VRF). Она сформирована с использованием протокола OSPF, и по ней видно, как добраться до роутера Router_4 (40.40.40.40):
Видно, что путь к Router_4 лежит через Router_3. По идее, должно все работать, но если вы попробуете сделать команду ping с Host_1 на адрес удаленной сети 172.16.1.1/24:
то у вас ничего не получиться (2). Напомню, это происходит из-за того, что Router_2 не знает о сети 172.16.1.0/24 (да и о других сетях тоже). Из рисунка также можно проследить работу VRF. Ping на IP-адрес Router_2 (1), находящийся в VRF_A, проходит, а вот на IP-адрес, находящийся в VRF_B (3), роутер возвращает ответ, что он не знает о такой сети («Заданный узел недоступен»).
Теперь перейдем к окончательной настройке нашей сети. Настроим MPLS на роутерах провайдера. Начнем с Router_2:
Router_2#conf t
Router_2(config)#mpls ip – глобально включаем MPLS;
Router_2(config)#mpls label protocol ldp – определяем протокол для обмена метками;
Router_2(config)#mpls ldp router-id loopback 0 – указываем ID роутера для использования в MPLS домене;
Router_2(config)#int fa 1/0
Router_2(config-if)#mpls ip – включаем MPLS на интерфейсе;
Router_2(config-if)#mpls mtu 1512 – увеличиваем размер mtu для MPLS;
Router_2(config-if)#exit
Router_2(config)#exit
Router_2#wr
Router_2#
Теперь Router_3:
Router_3#conf t
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
*Mar 1 02:35:28.639: %LDP-5-NBRCHG: LDP Neighbor 20.20.20.20:0 (1) is UP – соседство по протоколу LDP установилось;
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_3#
И Router_4:
Router_4#conf t
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
*Mar 1 02:37:52.559: %LDP-5-NBRCHG: LDP Neighbor 30.30.30.30:0 (1) is UP
Router_4(config-if)#mpls mtu 1512
Router_4(config-if)#exit
Router_4(config)#exit
Router_4#wr
Router_4#
Ну вот, вроде и все :). Теперь давайте все проверим. Сделаем ping с конечных хостов, посмотрим, что твориться на роутерах и отловим парочку пакетов :).
Host_1 и Host_2:
Видно, что Host_2 успешно ping-ует удаленную сеть (1) (192168.2.0/24), которая относится, как и он сам, к VRF_B. Ping на IP-адрес из другого VRF_A не проходит (2). Host_1 успешно «достукивается» до сети 172.16.1.0/24 (3) и не может попасть в сеть, где находится Host_2 (4), так как это уже другой VRF (хоть IP - адресация в этой сети такая же).
Что есть на Router_2 и Router_4:
Как видно из рисунка, все работает. MPLS пометила нужные маршруты (в графе «Outgoing» видны сети, которые относятся к VFR-ам, помеченные символом «V»; параметр «Untaged» означает, что данная сеть доступна через НЕ MPLS интерфейс и пакет, адресованный ей, после снятия метки будет отправлен основываясь на обычной таблице маршрутизации (FIB), «Aggregate» означает, что сеть появилась через редистрибуцию directly connected сетей), видны таблицы маршрутизации BGP для каждого VRF-а. Так же, обычные таблицы маршрутизации VRF_A и VRF_B содержат нужные маршруты.
Теперь посмотрим на содержимое пакетов. Отловим пакет ICMP request от Host_1 в сторону 172.16.1.1 на интерфейсе Router_2 (Int Fa 1/0), смотрящем в сторону Router_3:
Присутствуют две метки. №17 (1) – метка, используемая для доставки пакета по MPLS домену. №21 (1) – метка, используемая для идентификации VRF-а (или интерфейса, через который далее отправлять пакет). Если вы посмотрите на предыдущий рисунок, то в таблице LFIB роутера Router_4 заметите, что метке №21 соответствует directly connected сеть 172.16.1.0/24.
Посмотрим на тот же пакет уже на входе в роутер Router_4 (Int Fa 0/0):
Видно, что метка №17 уже снята и осталась только метка с №21. Согласно таблице LFIB у нее стоит параметр «Aggregate», это означает, что данная сеть попала через редистрибуцию directly connected сетей в BGP. Router_4 снимет эту метку, определит, что она относится к VRF_A и отправит пакет по месту назначения.
ICMP reply обрабатывается таким же образом, только в другую сторону. На Router_4 навешиваются две метки (одна для продвижения пакета по MPLS домену, вторая для идентификации VRF-а на другой стороне и так далее).
Для сравнения, давайте еще посмотрим на пакет ICMP reply от Router_2, идущий обратно на ICMP request от Host_2 на роутере Router_4 (Int Fa 0/0):
Видно, что метка уже имеет значение №22. Теперь Router_4, согласно своей таблице LFIB видит, что пакет соответствует VRF_B и, после снятия метки, его следует отправить через интерфейс Int Fa 1/0 (next hop 4.4.4.2).
Ну что же, осилили :). Поздравляю вас!!! Все работает.
На этом, я хочу закончить этот пост. Как всегда надеюсь, что он был для вас познавательным, не скучным и информативным.
Источник: go-to-easyit.com/2012/04/mpls-cisco-2.html
Комментариев нет:
Отправить комментарий