что такое vrf сеть

VRF Lite for fun and profit

Технология Virtual Routing and Forwarding (VRF) нашла широкое применение в сетях MPLS. В таких сетях метки MPLS применяются для разграничения трафика различных пользователей, а VRF поддерживает таблицу маршрутизации для каждого из них. Для обмена маршрутной информацией в таких сетях применяется MP-BGP.

Но существует возможность использовать технологию VRF без MPLS — VRF Lite.

VRF Lite

Рассмотрим топологию, изображенную на первом рисунке. Предположим, к маршрутизатору R1 подключены четыре сети. Необходимо разграничить взаимодействие между сетями так, чтобы первая имела связь со второй, третья с четвертой, но между первой и третьей, первой и четвертой, второй и третьей, второй и четвертой связи не было. Одним из возможных решений будет применение списков доступа (ACL). Второй путь — разделить сети с помощью VRF. Ниже приведена конфигурация, позволяющая это сделать.

!включаем маршрутизацию
ip routing

!включаем Cisco Express Forwarding, необходимый для работы VRF
ip cef

!объявляем два VRF с именами ONE и TWO
ip vrf ONE
!указываем route-distinguisher
rd 65000:1

ip vrf TWO
rd 65000:2

interface FastEthernet 0/0
!указываем, что интерфейс относится к тому или иному VRF
!это необходимо сделать до указания IP адреса
!так как команда ip vrf forwarding удаляет адрес с интерфейса
ip vrf forwarding ONE
ip address 10.0.1.1 255.255.255.0
no shutdown

interface FastEthernet 0/1
ip vrf forwarding ONE
ip address 10.0.2.1 255.255.255.0
no shutdown

interface FastEthernet 1/0
ip vrf forwarding TWO
ip address 10.0.3.1 255.255.255.0
no shutdown

interface FastEthernet 1/1
ip vrf forwarding TWO
ip address 10.0.4.1 255.255.255.0
no shutdown

Теперь можно посмотреть, что у нас получилось:

Интерфейсы маршрутизатора и их сопоставление с VRF.

R1#show ip interface brief

Interface IP-Address OK? Method Status Protocol

FastEthernet0/0 10.0.1.1 YES manual up up

FastEthernet0/1 10.0.2.1 YES manual up up

FastEthernet1/0 10.0.3.1 YES manual up up

FastEthernet1/1 10.0.4.1 YES manual up up

Name Default RD Interfaces

Таблицы маршрутизации глобальная и для каждого VRF

Gateway of last resort is not set

R1#show ip route vrf ONE

Gateway of last resort is not set

10.0.0.0/24 is subnetted, 2 subnets

C 10.0.2.0 is directly connected, FastEthernet0/1

C 10.0.1.0 is directly connected, FastEthernet0/0

R1#show ip route vrf TWO

Gateway of last resort is not set

10.0.0.0/24 is subnetted, 2 subnets

C 10.0.3.0 is directly connected, FastEthernet1/0

C 10.0.4.0 is directly connected, FastEthernet1/1

Проверим связь между сетями:

R1#ping vrf ONE 10.0.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.1, timeout is 2 seconds:
.
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms

R1#ping vrf ONE 10.0.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.2.1, timeout is 2 seconds:
.
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms

R1#ping vrf ONE 10.0.3.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.3.1, timeout is 2 seconds:
.
Success rate is 0 percent (0/5)

R1#ping vrf ONE 10.0.4.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.4.1, timeout is 2 seconds:
.
Success rate is 0 percent (0/5)

R1#ping vrf TWO 10.0.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.1, timeout is 2 seconds:
.
Success rate is 0 percent (0/5)

R1#ping vrf TWO 10.0.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.2.1, timeout is 2 seconds:
.
Success rate is 0 percent (0/5)

R1#ping vrf TWO 10.0.3.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.3.1, timeout is 2 seconds:
.
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms

R1#ping vrf TWO 10.0.4.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.4.1, timeout is 2 seconds:
.
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms

Для того, чтобы посмотреть arp таблицу отдельного VRF используйте команду

show ip arp vrf NAME

Кроме того, чтобы установить telnet подключение из определенного VRF необходимо выполнить следующую команду:

telnet HOST /vrf NAME

где HOST — узел, к которому устанавливается подключение, NAME — имя VRF.

Как видно, цель достигнута и сети связаны именно так, как надо.

Динамическая маршрутизация в рамках VRF

Рассмотрим топологию на рисунке 2. Задача сводится к организации динамической маршрутизации в каждом из VRF. Пусть в первом это будет протокол OSPF, во втором — EIGRP. Конфигурация маршрутизатора R1 тогда будет выглядеть следующим образом:

router ospf 1 vrf ONE
network 10.0.1.0 0.0.0.255 area 0
network 10.0.2.0 0.0.0.255 area 0

Видно, что достаточно указать, в каком VRF должен работать процесс OSPF, чтобы все заработало.

router eigrp 100
no auto-summary
address-family ipv4 vrf TWO
network 10.0.3.0 0.0.0.255
network 10.0.4.0 0.0.0.255
no auto-summary
autonomous-system 100
exit-address-family

С EIGRP все немного сложнее, но тоже интуитивно понятно.

Для маршрутизаторов R1 и R2 конфигурации выглядят следующим образом:

router ospf 1
log-adjacency-changes
network 10.0.1.0 0.0.0.255 area 0
network 172.16.1.0 0.0.0.255 area 2
!network 172.16.2.0 0.0.0.255 area 1 для R2

Для маршрутизаторов R3 и R4:

router eigrp 100
network 10.0.3.0 0.0.0.255
network 172.16.3.0 0.0.0.255
!network 172.16.4.0 0.0.0.255 для R4
no auto-summary

Для того, чтобы убедиться, что все работает, достаточно посмотреть на таблицы маршрутизации.

R1#show ip route vrf ONE

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

O IA 172.16.1.0 [110/2] via 10.0.1.2, 00:38:58, FastEthernet0/0

O IA 172.16.2.0 [110/2] via 10.0.2.2, 00:39:00, FastEthernet0/1

10.0.0.0/24 is subnetted, 2 subnets

C 10.0.2.0 is directly connected, FastEthernet0/1

C 10.0.1.0 is directly connected, FastEthernet0/0

R1#show ip route vrf TWO

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

D 172.16.4.0 [90/30720] via 10.0.4.2, 00:17:37, FastEthernet1/1

D 172.16.3.0 [90/30720] via 10.0.3.2, 00:17:50, FastEthernet1/0

10.0.0.0/24 is subnetted, 2 subnets

C 10.0.3.0 is directly connected, FastEthernet1/0

C 10.0.4.0 is directly connected, FastEthernet1/1

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

C 172.16.1.0 is directly connected, FastEthernet0/1

O IA 172.16.2.0 [110/3] via 10.0.1.1, 00:39:37, FastEthernet0/0

10.0.0.0/24 is subnetted, 2 subnets

O 10.0.2.0 [110/2] via 10.0.1.1, 00:39:37, FastEthernet0/0

C 10.0.1.0 is directly connected, FastEthernet0/0

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

D 172.16.4.0 [90/33280] via 10.0.3.1, 00:18:40, FastEthernet0/0

C 172.16.3.0 is directly connected, FastEthernet0/1

10.0.0.0/24 is subnetted, 2 subnets

C 10.0.3.0 is directly connected, FastEthernet0/0

D 10.0.4.0 [90/30720] via 10.0.3.1, 00:18:52, FastEthernet0/0

Заключение

В статье приведены команды, необходимые для функционирования маршрутизатора с несколькими таблицами маршрутизации. Кроме того, описана настройка основных IGP протоколов маршрутизации в рамках одного VRF.

Источник

Описание, настройка и пример использования VRF на cisco

VRF – технология, позволяющая реализовывать на базе одного физического маршрутизатора иметь несколько виртуальных – каждого со своей независимой таблицей маршрутизации.

Читайте также:  что значит 700с на велосипеде

Преимуществом виртуальной маршрутизации является полная изоляция маршрутов как между двумя виртуальными маршрутизаторами, так и между виртуальным и реальным.

Чтобы было понятнее, приступим сразу к примеру.

Допустим, у нас есть большая сеть, где работает, скажем, EIGRP, и в этой сети есть маршрутизатор R1. Если мы зайдём на R1 и выполним там команду show ip route, то увидим большое количество маршрутов, пришедших со всех концов нашей сети. Теперь, предположим, что появился клиент, для которого надо сделать какие-то специфичные настройки. В первую очередь особую маршрутизацию, например, особый шлюз по умолчанию или ещё что-то, отдельный DHCP или отдельный NAT – тут то нам и приходит на помощь vrf.

Необходимо создать виртуальный маршрутизатор, выделить из всех интерфейсов те, которые будут к нему относиться и задать все необходимые настройки для него. Что характерно: никакие параметры, заданные для виртуального маршрутизатора не отразятся на работе реального.

Давайте перейдём к практике.

Посмотрим таблицу на нашем реальном маршрутизаторе:

Много записей и нам совсем не хочется, чтобы наши действия повлияли на основную маршрутизацию.

Создаём виртуальный маршрутизатор:

Везде где можно написать description лучше его всегда писать.

Далее, выбираем, какие интерфейсы мы хотим отнести к этому vrf. В нашем примере у нас будет стоять задача брать трафик с интерфейса fa0/0.10 (ip 10.0.0.1), натить его и маршрутизировать через интерфейс fa0/0.55 (ip 55.55.55.55) так, чтобы это не влияло на остальные функции маршрутизатора.

Интерфейсы созданы (в данном случае это сабинтерфейсы для работы с VLAN, но это не важно – можно использовать и обычные физические интерфейсы). Для каждого интерфейса мы указали, что трафик должен обрабатываться не по общим правилам а в соответствии с правилами MyRouter. Интерфейсы выходят из сферы влияния основной маршрутизации. Так, например, если мы сейчас напишем команду show ip route, то среди непосредственно подключенных сетей (те что с буковкой «C» в таблице маршрутизации) мы не увидим сетей 10.0.0.0/24 и 55.55.55.0/24. Зато теперь мы можем посмотреть, как выглядит таблица маршрутизации нашего виртуального роутера, для этого набираем команду:

То есть, перед нами простая чистая таблица маршрутизации. Весь трафик, пришедший на fa0/0.10 и fa0/0.55 будет обрабатываться исходя только из одной этой таблицы – то есть общая таблица маршрутизации с кучей маршрутов приниматься во внимание не будет. Теперь вспомним CCNA и добавим статический маршрут по умолчанию, чтобы всё уходило в сеть через fa0/0.55, который у нас в примере будет внешним. При добавлении маршрута нам следует указать, что его надо добавить не в общую таблицу, а в vrf MyRouter:

где 55.55.55.56 – адрес следующего хопа. Подобным образом мы можем добавлять в эту таблицу произвольные статические и динамические маршруты.

Давайте добавим на наш виртуальный маршрутизатор DHCP и NAT. Пусть клиенты из внутренней сети получают адреса по DHCP а на выходе эти адреса транслируются в 55.55.55.55:

На этом настройка завершена. Обратите внимание, что как в DHCP пуле, так и в NAT-е мы указываем, что всё это относится не к основному, а к виртуальному маршрутизатору (vrf MyRouter).

Источник

Сети Для Самых Маленьких. Микровыпуск №6. MPLS L3VPN и доступ в Интернет

Статья про L3VPN получилась большой — ни много ни мало 130 000 символов.
Учитывая, что и её ещё не все дочитали, эту часть про доступ в Интернет мы вынесли в отдельную публикацию.
Это особенно важно, потому что в рунете, да и вообще в интернетах, нет доступного разбора этой темы.
Вполне вероятно, что вы сейчас читаете эксклюзивный материал.

Итак, есть оператор связи, который предоставляет своему клиенту L3VPN. Ни с того ни с сего, с бухты да барахты понадобился ему ещё и Интернет.
Самое очевидное решение — прокинуть ещё один кабель — в одном VPN, в другом Интернет.
Допустим, это сложно. Тогда можно поднять сабинтерфейс и передавать фотки вконтактике в отдельном VLAN’е.
Допустим, там сложный арендованный канал, где можно прокинуть только 1 VLAN или оборудование клиента не умеет VLAN (стоит обычный компьютер), что тогда?

Об этом следующие 36 000 букв вашей жизни.

NAT на CE

Провайдер выдаёт клиенту пул публичных адресов, в который тот транслирует свои внутренние. Всё, что остаётся сделать провайдеру — настроить маршрутизацию между VRF и глобальной таблицей.
Учитывая, что трансляция будет на CE, нужно выбрать только один филиал, пусть это будет TARS_2 — там как раз у нас линковая сеть публичная — 100.0.1.0/30.

Как видите, для этого теста нам нужно что-то в качестве Интернета и компьютер, которому доступ туда нужен.
В GNS есть такой чудесный объект, как VPCS, который прекрасно подходит на эту роль.
На TARS_2 нужно настроить NAT, ниже его конфигурация:
TARS_2(config)#interface Loopback0
TARS_2(config-if)#ip address 172.16.255.2 255.255.255.255

TARS_2(config)#interface FastEthernet0/0
TARS_2(config-if)#description To Linkmeup
TARS_2(config-if)#ip address 100.0.1.2 255.255.255.252
TARS_2(config-if)#ip nat outside

TARS_2(config)#interface FastEthernet0/1
TARS_2(config-if)#description To LAN
TARS_2(config-if)#ip address 172.16.1.1 255.255.255.0
TARS_2(config-if)#ip nat inside

TARS_2(config)#router bgp 64502
TARS_2(config-router)#network 172.16.1.0 mask 255.255.255.0
TARS_2(config-router)#network 172.16.255.2 mask 255.255.255.255
TARS_2(config-router)#neighbor 100.0.1.1 remote-as 64500

TARS_2(config)#ip nat inside source list 100 interface FastEthernet0/0 overload

TARS_2(config)#access-list 100 deny ip 172.16.0.0 0.0.255.255 172.16.0.0 0.0.255.255
TARS_2(config)#access-list 100 permit ip 172.16.0.0 0.0.255.255 any

access-list 100 состоит из двух строк — первая запрещает трансляцию адресов для пакетов, которые идут из своей сети в свою же сеть, находящуюся на другом конце провайдера.
Вторая строка разрешает трансляцию только для адресов своей сети. Если вдруг вы пропишите permit ip any any, то сразу же упадёт BGP-сессия с Linkmeup_R3.
Подробности по настройке NAT были освещены в пятой части СДСМ.

Конфигурация Интернета:
Internet(config)#interface Loopback0
Internet(config-if)#ip address 101.0.0.101 255.255.255.255

Internet(config)#interface FastEthernet0/0
Internet(config-if)#description To linkmeup
Internet(config-if)#ip address 101.0.0.1 255.255.255.252

Internet(config)#router bgp 64501
Internet(config-router)#network 101.0.0.0 mask 255.255.240.0
Internet(config-router)#neighbor 101.0.0.2 remote-as 64500

Internet(config)#ip route 101.0.0.0 255.255.240.0 Null0

Настройки BGP на Internet точно такие же, как были в Балаган-Телекоме в восьмом выпуске, мы только позволили себе некоторые вольности с IP-адресами.
Интерфейс Loopback 0 на узле с именем Internet олицетворяет собой весь интернет. Пинг до него и будем проверять.
Соответствующим образом настроен и Linkmeup_R1 для связи с Internet:
Internet(config)#interface FastEthernet1/1
Internet(config-if)#description To Balagan-Telecom
Internet(config-if)#ip address 101.0.0.2 255.255.255.252

Internet(config)#router bgp 64500
Internet(config-router)#network 100.0.0.0 mask 255.255.254.0
Internet(config-router)#network 101.0.0.0 mask 255.255.255.252
Internet(config-router)#neighbor 101.0.0.1 remote-as 64501

Internet(config)#ip route 100.0.0.0 255.255.254.0 Null0

Что же касается доступа в Интернет из VPN, то в данном случае конфигурацию нужно менять только на ближайшем к CE PE — в нашем случае Linkmeup_R3.

Читайте также:  что такое cent app

1. Создадим маршрут по умолчанию для VRF TARS. Это для того, чтобы пакеты, пришедшие от TARS_2 не были отброшены и знали куда двигаться.

Linkmeup_R3(config)#ip route vrf TARS 0.0.0.0 0.0.0.0 101.0.0.2 global

Обратить внимание здесь нужно на две вещи:
Ключевое слово global. Оно говорит о том, что Next Hop (101.0.0.2) нужно искать в глобальной таблице маршрутизации.
В качестве адрес Next-Hop выбран линковый адрес Linkmeup_R1 в сторону Интернета. Почему не Loopback, как мы любим? Это позволяет избежать так называемого blackholing’a. Дело в том, что loopback всегда доступен, а в случае падения канала между нашим шлюзом (Linkmeup_R1) и Интернетом TARS_2 этого никак не заметит и продолжит слать трафик на Linkmeup_R3, а тот, тоже ничего не подозревая, на Linkmeup_R1. Если же мы укажем линковый адрес, то он пропадёт из таблиц маршрутизации сразу, как упадёт линия.

В результате предыдущей операции на Linkmeup_3 появляется маршрут по умолчанию:

2. Теперь его нужно сообщить клиенту, чтобы у того тоже появился маршрут по умолчанию (хотя он мог бы настроить его и самостоятельно).

address-family ipv4 vrf TARS
neighbor 100.0.1.2 default-originate

Результат:

Итак, маршруты туда, то есть в Интернет, у нас уже есть, теперь что касается обратно.

3. На Linkmeup_R3 настроим статический маршрут для сети 100.0.1.0/30:
ip route 100.0.1.0 255.255.255.252 FastEthernet1/0

Зачем нам это нужно? Чтобы был маршрут, логично ведь. Если из Интернета пакет прилетит на Linkmeup_R3, а на нём не будет маршрута к 100.0.1.0/30 в глобальной таблице маршрутизации (в VRF-то он, конечно, будет), пакет будет отброшен.
Было:

Маршрут-то есть, да только не туда. Пакет не будет отброшен, но и до адресата не дойдёт.

Стало:

4. Далее об этой сети нужно сообщить BGP-соседям — о ней должны узнать все. В частности нас интересует Linkmeup_R1.
router bgp 64500
network 100.0.1.0 mask 255.255.255.252

Результат:

BGP в принципе и прежде знал об этой сети, но только в address-family ipv4 vrf TARS, куда она попадала с помощью команды redistribute connected. В глобальной же таблице маршрутизации её не было.

Итак, всё готово, проверяем:

Это говорит о том, что заработал Route Leaking, то есть доступ из VRF в глобальную таблицу маршрутизации и наоборот работает.

Проверка доступности Интернета с компьютера — это формальность, которая покажет, что мы правильно настроили NAT. Фактически вся магия происходит на Linkmeup_R3, а знакомая нам трансляция на TARS_2, то есть вещи это по большому счёту не связанные, и, если Интернет доступен с TARS_2, он будет доступен и с PC1.
Однако мы проверим:

Интернет доступен. Ура!

1) Обычным образом пакет попадает на шлюз по умолчанию — TARS_2

2) TARS_2 видит, что адрес назначения подпадает только под маршрут по умолчанию, передаёт пакет в интерфейс FE0/0 на Linkmeup_R3.

В последний момент он замечает, что заголовок пакета полностью удовлетворяет списку доступа (access-list 100) и транслирует локальный адрес 172.16.1.2 в 100.0.1.2

3) Пакет приходит в VRF TARS на Linkmeup_R3, где снова подпадает под маршрут по умолчанию, который указывает на адрес 101.0.0.2 из глобальной таблицы маршрутизации. Уже из глобальной ТМ Linkmeup_R3 знает, что 101.0.0.2 доступен через 1.1.1.1 и рекурсивно через 10.0.23.2. Причём пакету выдаётся метка 16. То есть после Linkmeup_R3 пакет уже пойдёт по MPLS LSP.


Пакет между Linkmeup_R3 и Provier_R2

Заметьте, что метки VPN здесь нет — пакет перекочевал из VPN в публичную сеть.

4) На Linkmeup_R2 с пакета снимается транспортная метка MPLS (происходит PHP) и на Linkmeup_R1 уже передаётся чистый IP-пакет.

5) Этот чистый IP-пакет уходит с Linkmeup_R1 в Internet (BGP сообщил маршрут до сети 101.0.0.0/20)

6) Internet знает маршрут до 100.0.0.0/23 так же по BGP и передаёт пакет обратно.

7) Linkmeup_R1 знает, что адресат находится за 3.3.3.3 — помните, мы объявляли эту сеть в BGP?
Соответственно, по MPLS он доходит до Linkmeup_R3.

8) Сеть 100.0.1.0/30 находится в VRF TARS, но мы ведь прописывали её статически в интерфейс FE1/0. Так что пакет передаётся благополучно на интерфейс.

9) Ну а дальше обратная трансляция на TARS_2 и последняя миля до родного дома.

Тут мы опустим сценарий с NAT на крайнем PE, потому что он неинтересный.

VRF-Aware NAT

Более правильный и чуть более масштабируемый вариант — настройка трансляции на Egress PE — на выходе в Интернет. В этом случае у нас есть центральный узел, где выполняются все операции, а клиенту не нужно делать ничего.

Единственное неудобство: несмотря на то, что, возможно, ни один клиент не подключен к Egress PE непосредственно, этому маршрутизатору придётся поддерживать все VRF, из которых нужно получать доступ в Интернет. Собственно, поэтому он и VRF-Aware.

Egress PE в нашем случае — Linkmeup_R1, который является шлюзом в интернет для всей сети linkmeup — никаких абсолютно дополнительных настроек на других узлах.
Пусть PC2 из сети C3PO Electronic (C3PO_2) хочет получить доступ в Интернет.
PC1 из TARS’ Robotics не трогаем и оставляем без изменений — они со своими белыми адресами — отдельная история, хотя их тоже вполне можно натить таким же образом.

1) Итак, во-первых на Linkmeup_R1 должен быть VRF C3PO. Он уже есть, но если бы не было, нужно было бы, чтобы было бы.
Конфигурация VRF типичная и она не поменялась:
Linkmeup_R1(config)#ip vrf C3PO
Linkmeup_R1(config-vrf)#rd 64500:100
Linkmeup_R1(config-vrf)#route-target export 64500:100
Linkmeup_R1(config-vrf)#route-target import 64500:100

2) Настраиваем NAT
Включаем ip nat inside в ту сторону, откуда получаем пакеты для трансляции, то есть в сторону P-маршрутизатора Linkmeup_R2:
Linkmeup_R1(config)#interface FastEthernet 0/1
Linkmeup_R1(config-if)#ip nat inside

В сторону Интернета включаем ip nat outside:
Linkmeup_R1(config)#interface FastEthernet 1/1
Linkmeup_R1(config-if)#ip nat outside

Создаём ACL, где разрешаем доступ из сети C3PO в интернет:
Linkmeup_R1(config)#access-list 100 permit ip 192.168.0.0 0.0.255.255 any

И собственно сам NAT:
Linkmeup_R1(config)#$ip nat inside source list 100 interface FastEthernet 1/1 overload

3) В BGP, как и в прошлый раз, прописываем отправку маршрута по умолчанию в данный VRF:
Linkmeup_R1(config)#router bgp 64500
Linkmeup_R1(config-router)#address-family ipv4 vrf C3PO
Linkmeup_R1(config-router-af)#redistribute static
Linkmeup_R1(config-router-af)#default-information originate

Поосторожней с редистрибьюцией в продакшне. Используй только вместе с фильтрацией.

Заметьте, что здесь недостаточно одной только команды redistribute static, чтобы забрать и анонсировать маршрут по умолчанию. Для этого дополнительно придётся выполнить явно команду default-information originate.
Чтобы этот маршрут анонсировался BGP, нужно, чтобы он был в таблице маршрутизации:
Linkmeup_R1(config)#ip route vrf C3PO 0.0.0.0 0.0.0.0 101.0.0.1 global

Читайте также:  какой витамин в красной смородине содержится

Сейчас сразу не заработает, потому что я слегка слукавил, говоря, что никакие настройки нигде кроме интернет-шлюза не понадобятся.
Дело в том, что мы сгенерировали маршрут по умолчанию для VRF C3PO на Linkmeup_R1 и по BGP передали его на Linkmeup_R3, но тут он и застрял, не дойдя до C3PO_2 — нужно заставить OSPF анонсировать маршрут по умолчанию. Как и в предыдущий раз без явной команды default-information originate он этого делать не будет:
Linkmeup_R3(config)#router ospf 2 vrf C3PO
Linkmeup_R3(config-router)# default-information originate

Проверяем:

Было бы странно, если бы не заработало.

1) От PC2 до Linkmeup_R3 он доходит без видимых изменений (только заголовок MAC меняется). На PC2 маршрут по умолчанию настроен вручную. На C3PO_2 он изучен по OSPF от Linkmeup_R3.

2) На интерфейсе FE0/1 пакет входит в VRF C3PO и приобретает сервисную метку.

3) Маршрут по умолчанию в VRF импортирован из BGP и он ведёт к 1.1.1.1 через 10.0.23.2:

4) От Linkmeup_R3 до Linkmeup_R2 пакет идёт по MPLS с двумя метками: внутренней сервисной — 27 и внешней транспортной — 18. Это видно из скриншота выше.

Не забывайте делать поправку на PHP — от Penultimate Router (Linkmeup_R2) — к Egress PE (Linkmeup_R1) — пакет пойдёт с одной сервисной меткой, потому что транспортная была снята в результате PHP.


5) На Linkmeup_R1 происходит Route leaking из VRF C3PO в глобальную таблицу — так пакет покидает VRF.
Также здесь происходит трансляция. Linkmeup_R1 записывает информацию об этом факте в свою таблицу трансляций для VRF C3PO:

6) В Интернет пакет уходит уже, конечно, без меток MPLS и с публичным адресом отправителя — 101.0.0.2 в заголовке

7) Ответный пакет на Linkmeup_R1 попадает по глобальной таблице маршрутизации — Интернету известен адрес 101.0.0.2. На этом узле происходит обратная трансляция. Адрес назначения меняется на 192.168.2.2 и искать его нужно уже в VRF C3PO — так сказала таблица NAT.

8) А дальше процесс вам уже известен — две метки, долгий путь до Linkmeup_R3 и далее до PC2.

Common Services

До сих пор мы обсуждали задачу передачи трафика из VPN в публичные сети и обратно.
Ещё один подход к предоставлению доступа в Интернет — вывести его в отдельный VRF.
Строго говоря — он наиболее масштабируемый, потому что нет необходимости настраивать что-то индивидуально для каждого клиентского VRF.
Важное условие — NAT происходит в сети клиента и в VRF Internet импортируются только маршруты к публичным префиксам клиента.

Common Services, который часто называют Shared Services — это продолжение вопроса о взаимодействии между VRF, который мы рассмотрели ранее. Основная идея в том, что экспорт/импорт совершается засчёт особой настройки route-target. Только на этот раз нужно ограничить список передаваемых префиксов, чтобы избежать пересечения адресных пространств и разрешить только публичные маршруты.

Рассмотрим задачу снова на примере TARS, потому что у них уже есть публичные сети.

Почему так? Почему нельзя просто дать route-target both 64500:1, например, на всех VRF?
Основная идея концепции Common Service — предоставить доступ к нужному VRF клиентам, но не позволить им общаться друг с другом напрямую, чтобы обеспечить изоляцию, как того требует определение VPN.
Если настроить одинаковый RT на всех VRF, то маршруты будут спокойно ходить между ними.
При указанной же выше конфигурации у всех клиентских VRF есть RT 64500:22 на импорт (все будут получать маршруты Internet), и также у них есть RT 64500:11 на экспорт, но только у VRF Internet есть такой RT 64500:11 на импорт — только VRF Internet будет получать маршруты клиентов. Друг с другом они обмениваться не смогут. Главное, чтобы Internet не занялся филантропией и не начал маршрутизировать клиентский трафик.

Итак, в результате наших операций мы можем видеть следующее:

На TARS_2 всё в порядке.

На Linkmeup_R1 есть маршрут до сети 100.0.0.0/30, но есть и лишние маршруты до частных сетей:

И в этом случае у нас даже будет интимная связность:

Но что делать с этими лишними маршрутами в VRF Internet? Ведь если мы подключим ещё один VRF так же, у нас и от него появятся ненужные серые подсети.

Тут как обычно поможет фильтрация. А если конкретно, то воспользуемся prefix-list + route-map:
Linkmeup_R1(config)#ip prefix-list 1 deny 172.16.0.0/12 le 32
Linkmeup_R1(config)#ip prefix-list 1 deny 192.168.0.0/16 le 32
Linkmeup_R1(config)#ip prefix-list 1 deny 10.0.0.0/8 le 32
Linkmeup_R1(config)#ip prefix-list 1 permit 0.0.0.0/0 le 32

Первые три строки запрещают анонсы всех частных сетей. Четвёртая разрешает все остальные.
В нашем случае вполне можно было бы обойтись одной строкой: ip prefix-list 1 permit 100.0.0.0/23 le 32 — вся подсеть Linkmeup, но приведённый нами пример более универсальный — он допускает существование других публичных сетей и соответственно один prefix-list может быть применён для всех VRF.
Следующая конструкция применяет расширенное community к тем префиксам, что попали в prefix-list 1, иными словами устанавливает RT:
Linkmeup_R1(config-map)#route-map To_Internet permit 10
Linkmeup_R1(config-map)#match ip address prefix-list 1
Linkmeup_R1(config-map)#set extcommunity rt 64500:11

Осталось дело за малым — применить route-map к VRF:
Linkmeup_R1(config)#ip vrf TARS
Linkmeup_R1(config-vrf)#export map To_Internet

После обновления маршрутов BGP (можно форсировать командой clear ip bgp all 64500) видим, что в VRF Internet остался только публичный маршрут:

И, собственно, проверка доступности Интернета с PC1 (NAT уже настроен на TARS_2):

Уважаемые читатели, вы только что ознакомились с другим подходом к Route Leaking‘у.

Полная конфигурация всех узлов для Common Services.

Наиболее доступно тема Common Services описана Jeremy Stretch. Но у него нет указания на то, что префиксы нужно фильтровать.
Вообще, у них там в ихних америках, все друг друга знают и уважают. Поэтому Джереми охотно ссылается на Ивана Пепельняка, а точнее его заметку о Common Services, а Иван в свою очередь на Джереми. Статьи их дополняют друг друга, но опять же до конца тему не раскрывают.
А вот и третья ссылка, которая в купе с первыми двумя позволяет сложить какое-то представление о том, как работает Common Services.

Все виды доступа в Интернет из VRF описаны в данной статье. Но она настолько запутанная, что именно поэтому я и решил посвятить отдельный микровыпуск СДСМ вопросу настройки этого функционала.

В целом же про MPLS и его приложения, в том числе L3VPN, можно глубоко почитать у Ina Minei, Julian Lucek. MPLS-Enabled Applications.
Из списка лучших книг для связиста.

В этом году ждите СДСМ12. MPLS L2VPN.

Источник

Строительный портал