L3 VRF: почему у роутера много таблиц
Один физический маршрутизатор оператора обслуживает десятки клиентов сразу. И у клиентов адреса
пересекаются — у всех любимый 192.168.1.0/24. Как не смешать их в кашу?
Ответ — VRF. Это одна из главных идей во всей операторской сети — и одна из
первых вещей, о которые спотыкается каждый новичок в CLI.
- Что такое таблица маршрутизации вообще — короткий ликбез, без которого VRF не понять
- Какую проблему решает VRF (и почему без неё оператору нельзя)
- Что такое VRF простыми словами: «роутер внутри роутера»
- Как один порт «привязывается» к конкретному клиенту — и какая классическая ловушка тебя там ждёт
- Чем VRF-lite отличается от «полного» MPLS L3VPN
- Что такое RD и RT — без страшной математики, но с конкретными числами
- Полный путь маршрута между офисами клиента — «кино» по кадрам, где видно работу RD и RT
- Route leaking — как нарочно продырявить изоляцию (общие сервисы, интернет для VRF)
- Management VRF — почему «управление железкой» тоже живёт в отдельном мире
- Как смотреть и диагностировать VRF в CLI: show, ping, traceroute — всё с «vrf», на трёх вендорах
- Полный конфиг подключения нового клиента — «собери сам» с чек-листом сдачи
- Два плейбука: «офис не видит офис» и «новый стык не заработал»
Урок 1: приватные адреса (192.168.x.x, 10.x.x.x) повторяются в миллионах
сетей — это нормально. Урок 2: роутер, получив кадр, вскрывает его и смотрит на IP получателя,
чтобы решить «куда дальше». Сегодня разберёмся, где именно он ищет этот ответ — и что
будет, если таких «где» несколько.
1. Ликбез: что такое таблица маршрутизации
Прежде чем говорить «у роутера много таблиц», нужно понять, что такое одна таблица. Таблица маршрутизации — это список правил вида «сеть такая-то → отправлять туда-то». Роутер сверяет IP получателя каждого пакета с этим списком и пересылает пакет в указанную сторону.
Читаем построчно, это важнее, чем кажется:
- Буква слева — откуда роутер узнал маршрут:
C(connected) — сеть прямо на его порту;S(static) — инженер прописал руками;B— рассказал протокол BGP. Источник маршрута — первое, что ты смотришь при разборе. - Сеть/маска — «улица», для которой правило действует.
- via … — сосед (next-hop), которому отдать пакет для этой сети.
0.0.0.0/0— маршрут по умолчанию (default route): совпадает с любым адресом. Это «шлюз по умолчанию» из урока 1, только на языке роутера.
Если под адрес подходит несколько строк, побеждает самая точная (с самой длинной
маской). Пакет на 192.168.5.7 подходит и под 192.168.5.0/24, и под
0.0.0.0/0 — выиграет /24, потому что он конкретнее. Это правило называется
longest prefix match и работает вообще везде в сетях.
Таблица маршрутизации = указатели на перекрёстке
Роутер — перекрёсток с указателями: «в центр — налево», «в аэропорт — прямо», «все остальные направления — направо». Конкретный указатель («аэропорт») всегда важнее общего («все остальные») — это и есть longest prefix match. А default route — тот самый указатель «все остальные».
2. Проблема: один роутер — много клиентов
Теперь рабочая ситуация. Представь маршрутизатор оператора на районе (его называют PE — Provider Edge, «край сети провайдера»). К нему подключены три разных клиента:
- Банк — использует у себя сеть
192.168.1.0/24 - Аптека — использует у себя ту же сеть
192.168.1.0/24 - Школа — и она тоже
192.168.1.0/24
Вспомни урок 1: все трое взяли приватные адреса, и никто ни с кем это не согласовывал — они имеют
полное право. Но если у роутера одна таблица маршрутизации, случится катастрофа:
три записи про один и тот же 192.168.1.0/24 с тремя разными «via». Роутер не может
держать их одновременно — и пакеты банка поедут в аптеку. Для оператора это недопустимо:
клиенты должны быть полностью изолированы и при этом иметь право на любые адреса.
Клиентам нельзя запретить использовать одинаковые (приватные) адреса — они об этом даже не знают. Значит, изоляцию должен обеспечить оператор на своём железе. Инструмент для этого — VRF.
3. Что такое VRF — «роутер внутри роутера»
VRF = Virtual Routing and Forwarding, «виртуальная маршрутизация». Идея гениально простая: разрешим одному физическому роутеру держать несколько независимых таблиц маршрутизации — по одной на каждого клиента. Каждая такая таблица и есть VRF.
Каждый порт (или подынтерфейс), к которому подключён клиент, «приписывается» к его VRF. Пакет, пришедший от банка, ищет маршрут только в таблице банка и физически не видит таблицы аптеки. Три клиента — три отдельных мирка на одном железе.
VRF = отдельные почтовые ящики в одном подъезде
Один подъезд (роутер), но у каждой квартиры (клиента) — свой закрытый почтовый ящик (VRF). В доме может быть три «квартиры №1» на разных этажах — письма не путаются, потому что у каждой свой ящик со своим ключом. Почтальон кладёт письмо только в «ящик того клиента, от кого пришёл человек». Соседний ящик он даже не открывает.
Два уточнения, которые часто упускают новички — а они важные:
- Есть и «нулевой» мир — глобальная таблица (global routing table, GRT). Всё, что не привязано к VRF, живёт в ней: служебные стыки оператора, loopback'и, менеджмент. Когда говорят «маршрут в глобалке» — это про неё.
- VRF изолирует не только маршруты, но и всё вокруг них: у каждой VRF своя ARP-таблица (да, та самая из урока 2!), свои соседи, свой пинг. Поэтому и команды диагностики все имеют вариант «с vrf» — увидишь ниже.
4. Как порт «привязывается» к клиенту — и ловушка №1
Магия в том, что инженер явно говорит роутеру: «этот порт — клиента Банк, значит он в VRF BANK». На Cisco это выглядит так:
Всё. Теперь адрес 192.168.1.254 существует только внутри VRF BANK. В другой
VRF можно назначить точно такой же адрес — и они не столкнутся.
Команда vrf forwarding BANK стирает IP-адрес с интерфейса. Это
защита от «переезда» адреса между мирами, но джун о ней не знает: добавил порт в VRF — и связь
пропала, а адрес молча исчез из конфига. Правильный порядок: сначала привязка к VRF,
потом настройка IP. Если делаешь на живом клиенте — заранее скопируй строку
ip address …, чтобы вернуть её сразу после привязки. IOS даже предупредит:
% Interface GigabitEthernet0/1 IPv4 disabled and address(es) removed due to enabling VRF BANK —
научись замечать такие сообщения.
5. VRF-lite и MPLS L3VPN — два масштаба одной идеи
То, что мы настроили выше, работает внутри одного роутера. Такой режим называют VRF-lite: таблицы разделены локально, а если надо протянуть изоляцию до соседнего роутера — придётся тащить до него отдельный линк или VLAN на каждого клиента. Для пары железок — нормально; для сети оператора из сотен роутеров — кошмар.
🧩 VRF-lite
- Изоляция внутри одной железки
- Между роутерами — отдельный VLAN/линк на каждую VRF
- Просто, но не масштабируется
- Типично: корпоративные сети, стыки, лаборатории
🏗️ MPLS L3VPN (полная схема)
- Изоляция через всю сеть оператора
- Маршруты клиентов едут в общем «транспорте» (BGP + MPLS), помеченные ярлыками
- Масштабируется на тысячи клиентов
- Это и есть услуга IPVPN — урок 7
Чтобы «полная схема» работала, маршрутам клиентов нужны те самые ярлыки — RD и RT. Разберём их прямо сейчас на конкретных числах, а как они ездят по сети — увидишь в уроках про BGP и IPVPN.
6. RD и RT — что это, без страха
Когда клиент один — VRF достаточно. Но у клиента обычно много офисов в разных городах, и их надо соединить через сеть оператора, не смешав с другими клиентами. Здесь появляются два «ярлыка»: RD и RT.
192.168.1.0/24 банка становится
65000:1:192.168.1.0/24, а аптеки — 65000:2:192.168.1.0/24. Теперь это
разные записи — не путаются.Как это выглядит в конфиге VRF (тот же BANK, теперь полностью):
- export — какой ярлык клеить на маршруты, уезжающие из этой VRF в сеть оператора.
- import — маршруты с каким ярлыком впускать в эту VRF.
- В простейшей (и самой частой) схеме «все офисы клиента видят всех» import и export совпадают на всех PE. Более хитрые схемы (например, «все офисы видят центр, но не друг друга») делаются именно игрой с разными RT — это высший пилотаж, пока просто знай, что он существует.
RD — «сделать уникальным» (чтобы одинаковые адреса не слиплись). RT — «кому раздать» (какие офисы одного клиента должны увидеть маршрут). RD — про имя, RT — про членство. Детально свяжем всё в уроке про IPVPN, ведь именно там RD/RT и работают в полную силу вместе с BGP.
Кино по кадрам: как маршрут офиса A доезжает до офиса B
Сведём RD и RT воедино. Банк: офис A (сеть 192.168.1.0/24) подключён к PE1
в Новосибирске, офис B — к PE2 в Омске. Проследим путь маршрута (не пакета!) офиса A:
C 192.168.1.0/24. Пока это обычная запись, никаких ярлыков.65000:1:192.168.1.0/24 — теперь он не
спутается с аптечным 65000:2:192.168.1.0/24. И вешается ярлык
RT export 65000:1 — «этот маршрут для тех, кто состоит в клубе банка».192.168.1.0/24 в свою таблицу VRF BANK с пометкой B (пришёл по BGP).
VRF PHARMACY на том же PE2 маршрут не увидит: её import 65000:2 не совпадает.B 10.20.0.0/24 via 10.255.0.7 из show ip route vrf —
след этого кино.
Маршрут выбирается по RT, а не по RD. RD только делает запись уникальной
(и поэтому RD на разных PE может даже отличаться — работать будет). А вот если на двух PE
не совпали RT import/export — офисы друг друга не увидят. 90% проблем «офис не видит
офис» при живом BGP — именно расхождение RT. Проверка: show vrf detail BANK | include
Export|Import на обоих PE.
Route leaking — дырка в изоляции по проекту
Изоляция VRF — благо, но иногда её надо нарочно продырявить. Классические случаи:
- Общий сервис: у оператора есть сервер мониторинга/DNS, который должны видеть все клиенты — но клиенты по-прежнему не должны видеть друг друга.
- Интернет для VRF: клиент купил IPVPN + выход в интернет через того же оператора.
- Центр–филиалы (hub-and-spoke): филиалы видят только центральный офис, но не друг друга (например, банкоматы не должны общаться между собой).
Всё это делается игрой с RT: маршрут можно экспортировать с несколькими ярлыками и импортировать чужие. Пример «общего сервиса»:
Заметь: банк импортирует SHARED, аптека импортирует SHARED, но банк не импортирует 65000:2 — клиенты по-прежнему не видят друг друга. Изоляция — это не стена, а правила клуба: кого впускать, решает список import.
Leaking — инструмент с обратной стороной: одна лишняя строка route-target import —
и клиент внезапно видит чужие сети (привет, инцидент безопасности). Правило профи: каждая
«дырка» — задокументирована (зачем, кто согласовал), а адреса общих сервисов — из отдельного,
ни с кем не пересекающегося блока.
Management VRF — отдельный мир для управления
Последний штрих к картине «у роутера много миров». Почти на любой современной железке порт управления (out-of-band management, обычно подписан MGMT/MEth) заводится в отдельную VRF управления. Зачем: чтобы доступ инженеров к железке жил отдельно от клиентского и транзитного трафика — даже если в основной сети шторм или ошибка маршрутизации, ты всё ещё можешь зайти на устройство. Практическое следствие, о которое спотыкаются все:
7. Как смотреть VRF в CLI
Список всех VRF на роутере и какие порты к ним привязаны:
А вот ключевой приём: обычная show ip route покажет только глобальную
таблицу и не покажет клиентские маршруты. Чтобы увидеть маршруты конкретного клиента,
добавь vrf ИМЯ:
И это правило распространяется на все команды диагностики. Выучи этот набор — он твой хлеб:
| Обычная команда | Вариант для клиента в VRF | Что делает |
|---|---|---|
show ip route | show ip route vrf BANK | таблица маршрутов клиента |
ping 192.168.1.1 | ping vrf BANK 192.168.1.1 | пинг «изнутри мира» клиента |
traceroute 10.20.0.5 | traceroute vrf BANK 10.20.0.5 | путь пакета в VRF клиента |
show ip arp | show ip arp vrf BANK | ARP-таблица клиента (у каждой VRF — своя!) |
telnet 192.168.1.10 | telnet 192.168.1.10 /vrf BANK | подключение через мир клиента |
На других вендорах меняются только слова — идея «каждая команда с именем мира клиента» железная. У Juniper VRF называется routing-instance, у Huawei — vpn-instance:
| Задача | Cisco IOS | Juniper Junos | Huawei VRP |
|---|---|---|---|
| список VRF | show vrf | show route instance | display ip vpn-instance |
| маршруты клиента | show ip route vrf BANK | show route table BANK.inet.0 | display ip routing-table vpn-instance BANK |
| ARP клиента | show ip arp vrf BANK | show arp … routing-instance BANK | display arp vpn-instance BANK |
| пинг из мира клиента | ping vrf BANK 192.168.1.1 | ping 192.168.1.1 routing-instance BANK | ping -vpn-instance BANK 192.168.1.1 |
«Маршрута нет, всё пропало!» — а ты просто смотрел show ip route без vrf.
Или: «пинга нет!» — а ты пинговал из глобальной таблицы, где клиентского адреса и быть не должно.
Работаешь с клиентом — каждая команда с vrf ИМЯ. Совет: первым делом
всегда show vrf — узнай, как называется VRF клиента и какие порты в ней, и дальше
подставляй это имя везде.
8. Собери сам: полное подключение нового клиента
Соберём всё в одну рабочую последовательность — так выглядит типовая заявка «подключить клиенту ООО Ромашка услугу IPVPN, стык 10.77.1.0/30, их AS 65001». Это конфиг, который ты будешь вводить (или проверять за автоматикой) десятки раз:
И чек-лист сдачи — прогоняется за минуту, экономит часы разборов потом:
show vrf ROMASHKA — интерфейс Gig0/2.105 в списке.ping vrf ROMASHKA 10.77.1.2 — CE отвечает; show ip arp vrf ROMASHKA — MAC соседа есть.show ip bgp vpnv4 vrf ROMASHKA summary — состояние = число принятых префиксов.show ip route vrf ROMASHKA — сети клиента с буквой B; на втором PE клиента — та же картина навстречу.ping vrf ROMASHKA <адрес LAN дальнего офиса> source Gig0/2.105 — и только после этого закрываем заявку.9. Плейбук №1: «офис клиента не видит второй офис»
Типовая заявка: «у банка офис на Ленина не видит офис на Мира». Оба подключены к нашим PE. Порядок действий:
show vrf | include BANK — имя VRF, RD и список интерфейсов.
Сверь с документацией/биллингом, что порт тот.ping vrf BANK 192.168.1.1 (адрес CE клиента). Нет пинга —
проблема на местном стыке: порт, линк, ARP (show ip arp vrf BANK — есть ли MAC соседа?).
Дальше — по плейбуку из урока 2.show ip route vrf BANK 10.20.0.0. Маршрут есть (буква B, via
адрес удалённого PE) — транспорт знает дорогу, иди дальше. Маршрута нет — дальний офис не
объявился: проблема на удалённом PE или в BGP между PE (урок 4), или RT не совпадают.ping vrf BANK 10.20.0.1 source Gig0/1 — пинг до дальнего офиса
«от имени» ближнего. Проходит — сеть оператора в порядке, проблема внутри офиса клиента
(их локальный файрвол/маршруты). Не проходит — смотри тот же путь с удалённого PE навстречу.10. Плейбук №2: «новый стык не заработал»
Вторая по частоте ситуация: подключение сделали, а связи нет. Проверяй в порядке «снизу вверх» — от порта к маршрутам:
show ip interface brief | include Gig0/2. down/down — кабель/кросс;
up/down — линк есть, протокол нет (VLAN? encapsulation?).show run interface Gig0/2.105 — есть ли vrf forwarding
и ip address (вспомни: привязка к VRF стирает адрес — может, его забыли вернуть?).
Сверь VLAN в encapsulation dot1q с тем, что настроено на стороне доступа.show ip arp vrf ROMASHKA. Записи нет / Incomplete — L2-проблема:
не тот VLAN по пути, CE выключен, у CE другой адрес. Запись есть — иди на L3.show ip bgp vpnv4 vrf ROMASHKA summary. Не Established — проверь,
что сосед прописан в address-family ipv4 vrf (а не в глобальном BGP — типичная ошибка!),
совпадает ли remote-as с данными заявки. Established, но 0 префиксов — CE ничего не анонсирует:
вопрос на сторону клиента, но сформулируй фактами.show ip route vrf ROMASHKA | include 10.77.
Пусто при живом BGP — сверь route-target export/import на обоих PE:
опечатка в одной цифре RT — и «клуб» не собрался.11. Мини-лаба: VRF есть даже в твоём Linux
Не удивляйся: VRF — не эксклюзив дорогих железок. Ядро Linux умеет VRF «из коробки», и это отличный способ пощупать концепцию (а заодно — мостик в DevOps, где такими вещами управляют контейнеры). Если есть под рукой любой Linux (WSL, виртуалка, сервер):
Смотри, как один в один повторяется логика Cisco: создать VRF → привязать интерфейс → все команды с указанием VRF. Понял концепцию один раз — узнаешь её на любом вендоре и в любом облаке.
12. Словарик урока
| Термин | По-английски | Смысл в одну строку |
|---|---|---|
| Таблица маршрутизации | routing table | список правил «сеть → куда слать» |
| Точнейшее совпадение | longest prefix match | из подходящих маршрутов побеждает самый конкретный |
| Маршрут по умолчанию | default route, 0.0.0.0/0 | «всё остальное — туда» |
| Next-hop | next-hop | сосед, которому отдаётся пакет на пути к цели |
| VRF | Virtual Routing and Forwarding | изолированная таблица маршрутизации внутри роутера |
| Глобальная таблица | GRT, global table | «нулевая» таблица вне всех VRF — служебный мир оператора |
| VRF-lite | VRF-lite | VRF без MPLS-транспорта, изоляция локально на железке |
| PE / CE | Provider/Customer Edge | пограничный роутер оператора / роутер клиента |
| RD | Route Distinguisher | ярлык уникальности: делает одинаковые сети разных клиентов разными |
| RT | Route Target | ярлык членства: в какие VRF импортировать маршрут |
| Перетекание маршрутов | route leaking | намеренный обмен маршрутами между VRF через игру с RT (общие сервисы, hub-and-spoke) |
| VRF управления | management VRF | отдельный мир для доступа инженеров к железке — живёт, даже когда основная сеть болеет |
| Routing-instance / vpn-instance | — | то же, что VRF, на языке Juniper / Huawei |
| Сабинтерфейс | subinterface | логический интерфейс на VLAN внутри физического порта: один порт — много клиентов |
vrf forwarding ИМЯ
(осторожно: она стирает IP с порта!). Все команды диагностики — с vrf ИМЯ.
RD делает адреса уникальными, RT — раздаёт их «своим» (импорт решается по RT, не по RD!).
Route leaking — намеренная игра с RT для общих сервисов и hub-and-spoke. Управление железкой
живёт в отдельной management VRF. VRF-lite — локально; с MPLS/BGP — это услуга IPVPN.
13. Задачи — реши сам
Задача 1. На PE три VRF: BANK, PHARMACY, SCHOOL — у всех сеть 192.168.1.0/24. Инженер дал ping 192.168.1.1 и получил тишину. Клиент банка ругается. Что сделал инженер не так?
Пинговал из глобальной таблицы, где этой сети нет вообще. Надо:
ping vrf BANK 192.168.1.1. Без vrf — команды работают в «нулевом мире».
Задача 2. Джун добавил на рабочий порт клиента команду vrf forwarding BANK. Клиент сразу упал. Порт «up/up». Что произошло?
Команда привязки к VRF стёрла IP-адрес с интерфейса. Физика в порядке (up/up),
но L3 больше нет. Вернуть ip address … — и связь восстановится.
Задача 3. Зачем нужен RD, если уже есть VRF?
VRF изолирует локально, на одном роутере. Но когда маршруты клиента едут через сеть оператора к другим офисам, RD делает одинаковые адреса разных клиентов уникальными, чтобы они не слиплись в общем транспорте (BGP).
Задача 4. Офис A банка видит офис B, а офис B офис A — нет. На PE офиса B в VRF BANK маршрута до сети офиса A нет. Куда смотреть?
Маршрут офиса A не доехал до PE офиса B. Проверить: объявил ли CE офиса A свои сети (BGP-сессия с PE), совпадают ли RT import/export на обоих PE (маршрут с «чужим» ярлыком не импортируется), жива ли BGP-связность между PE. Детали — в следующих уроках.
Задача 5. В чём разница VRF-lite и MPLS L3VPN — одним предложением?
VRF-lite изолирует таблицы внутри одной железки (между роутерами — отдельные линки/VLAN на клиента), а MPLS L3VPN переносит изоляцию через всю сеть оператора в общем транспорте с ярлыками RD/RT — это масштабируется на тысячи клиентов.
Задача 6. На PE1 у банка RD 65000:1, на PE2 кто-то настроил RD 65000:11, но RT везде 65000:1. Офисы увидят друг друга?
Да. Импорт решается по RT, а они совпадают. RD лишь делает записи уникальными в транспорте — он может отличаться между PE (хотя по стандарту оператора обычно совпадает, чтобы не путать людей). А вот если бы разошлись RT — связи бы не было.
Задача 7. Клиентам А и Б нужно дать доступ к серверу мониторинга оператора 10.99.0.5, не открывая их друг другу. Опиши схему RT.
Заводим VRF SHARED (например, RT export 65000:999), где живёт сервер. В VRF обоих клиентов
добавляем route-target import 65000:999, а в SHARED — import RT обоих клиентов
(65000:1 и 65000:2), чтобы ответы находили дорогу. Клиенты друг друга не импортируют — изоляция
между ними сохраняется.
Задача 8. Ты завёл BGP-соседа клиента командой neighbor 10.77.1.2 remote-as 65001 прямо в router bgp 65000 (не в address-family vrf). Что будет?
Роутер будет пытаться поднять сессию в глобальной таблице, где стыковой сети нет
(она в VRF) — сессия повиснет в Active. Соседей клиентских стыков объявляют внутри
address-family ipv4 vrf ИМЯ. Это одна из самых частых ошибок при подключении.
Задача 9. С железки не копируется образ с TFTP-сервера 10.100.0.9, хотя «пинг с ноутбука до него есть». В чём, скорее всего, дело?
Сервер доступен через management VRF, а copy/tftp по умолчанию идёт из
глобальной таблицы. Проверить: ping vrf Mgmt-vrf 10.100.0.9, и указать VRF в команде
копирования (или настроить source-interface из mgmt VRF).
Три клиента используют сеть 192.168.1.0/24 на одном роутере. Почему нет конфликта?
Потому что каждый клиент — в своей VRF, а значит в отдельной таблице маршрутизации. Одинаковые адреса физически не встречаются в одной таблице.
Ты ввёл show ip route и не видишь клиентскую сеть. Что не так?
Клиентские маршруты в VRF. Нужно show ip route vrf ИМЯ_КЛИЕНТА.
У каждой VRF своя ARP-таблица — почему это логично?
Потому что в разных VRF могут жить одинаковые IP с разными MAC. Общая ARP-таблица смешала бы их. Изоляция полная: маршруты, ARP, пинги — всё «в мире клиента».
В плейбуке выше маршрут другого офиса появился в VRF с буквой B — его принёс протокол BGP. Как роутеры вообще «рассказывают» друг другу о сетях, что такое автономная система и почему BGP держит на себе весь интернет — следующий урок. Он же — самый частый вопрос на собеседовании инженера СПД.