VRF (Virtual Routing and Forwarding) в VyOS

VRF (Virtual Routing and Forwarding) в VyOS

VRF (Virtual Routing and Forwarding) в VyOS позволяет создавать изолированные виртуальные маршрутизаторы внутри одного физического устройства, каждый со своей независимой таблицей маршрутизации.

Концепция VRF

Основные принципы

VRF обеспечивает:

  • Изоляцию маршрутных таблиц между различными клиентами/сервисами
  • Возможность использования перекрывающихся IP-адресов в разных VRF
  • Логическое разделение сетевого трафика на одном устройстве
  • Независимую конфигурацию протоколов маршрутизации для каждого VRF

Ключевые компоненты:

  • VRF Instance: Именованный экземпляр VRF с собственной таблицей маршрутизации
  • Route Distinguisher (RD): Уникальный идентификатор VRF для BGP
  • Route Target (RT): Механизм импорта/экспорта маршрутов между VRF
  • VRF Interface: Сетевой интерфейс, привязанный к определенному VRF

Архитектура VRF

                    Physical VyOS Router
    +--------------------------------------------------+
    |                                                  |
    |  VRF "CUSTOMER-A"          VRF "CUSTOMER-B"     |
    |  ┌──────────────────┐      ┌──────────────────┐ |
    |  │ RT: 10.0.0.0/24  │      │ RT: 10.0.0.0/24  │ |
    |  │ eth1.100         │      │ eth1.200         │ |
    |  │ BGP AS 65001     │      │ BGP AS 65002     │ |
    |  └──────────────────┘      └──────────────────┘ |
    |                                                  |
    |  VRF "MANAGEMENT"          Global Table         |
    |  ┌──────────────────┐      ┌──────────────────┐ |
    |  │ RT: 192.168.1.0/24│      │ Default routing  │ |
    |  │ eth2             │      │ eth0 (WAN)       │ |
    |  └──────────────────┘      └──────────────────┘ |
    +--------------------------------------------------+

Базовая конфигурация VRF

Создание VRF экземпляров

configure

# Создание VRF для клиента A
set vrf name CUSTOMER-A table '100'
set vrf name CUSTOMER-A description 'Customer A isolated network'

# Создание VRF для клиента B
set vrf name CUSTOMER-B table '200'
set vrf name CUSTOMER-B description 'Customer B isolated network'

# Создание VRF для управления
set vrf name MANAGEMENT table '300'
set vrf name MANAGEMENT description 'Management network'

commit
save

Привязка интерфейсов к VRF

# Интерфейс для Customer A
set interfaces ethernet eth1 vif 100 address '10.0.1.1/24'
set interfaces ethernet eth1 vif 100 vrf 'CUSTOMER-A'

# Интерфейс для Customer B
set interfaces ethernet eth1 vif 200 address '10.0.1.1/24'
set interfaces ethernet eth1 vif 200 vrf 'CUSTOMER-B'

# Интерфейс для Management
set interfaces ethernet eth2 address '192.168.1.1/24'
set interfaces ethernet eth2 vrf 'MANAGEMENT'

commit

Статические маршруты в VRF

# Статический маршрут в VRF CUSTOMER-A
set vrf name CUSTOMER-A protocols static route 172.16.0.0/16 next-hop 10.0.1.254

# Статический маршрут в VRF CUSTOMER-B
set vrf name CUSTOMER-B protocols static route 172.16.0.0/16 next-hop 10.0.1.254

# Маршрут по умолчанию в MANAGEMENT VRF
set vrf name MANAGEMENT protocols static route 0.0.0.0/0 next-hop 192.168.1.254

commit

Использование VRF с протоколами маршрутизации

BGP с VRF

configure

# Настройка BGP для VRF CUSTOMER-A
set vrf name CUSTOMER-A protocols bgp system-as '65001'
set vrf name CUSTOMER-A protocols bgp neighbor 10.0.1.2 remote-as '65100'
set vrf name CUSTOMER-A protocols bgp neighbor 10.0.1.2 address-family ipv4-unicast
set vrf name CUSTOMER-A protocols bgp parameters router-id '10.0.1.1'

# Анонсирование сетей в BGP
set vrf name CUSTOMER-A protocols bgp address-family ipv4-unicast network 10.0.1.0/24

# Настройка BGP для VRF CUSTOMER-B
set vrf name CUSTOMER-B protocols bgp system-as '65002'
set vrf name CUSTOMER-B protocols bgp neighbor 10.0.1.2 remote-as '65200'
set vrf name CUSTOMER-B protocols bgp neighbor 10.0.1.2 address-family ipv4-unicast
set vrf name CUSTOMER-B protocols bgp parameters router-id '10.0.1.1'

commit
save

OSPF с VRF

# Настройка OSPF для VRF CUSTOMER-A
set vrf name CUSTOMER-A protocols ospf area 0 network '10.0.1.0/24'
set vrf name CUSTOMER-A protocols ospf parameters router-id '10.0.1.1'

# Настройка OSPF для VRF CUSTOMER-B
set vrf name CUSTOMER-B protocols ospf area 0 network '10.0.1.0/24'
set vrf name CUSTOMER-B protocols ospf parameters router-id '10.0.1.1'

commit

RIP с VRF

# Настройка RIP для VRF
set vrf name CUSTOMER-A protocols rip interface eth1.100
set vrf name CUSTOMER-A protocols rip network '10.0.1.0/24'

commit

Расширенная конфигурация VRF

Route Leaking между VRF

Route leaking позволяет выборочно делиться маршрутами между VRF:

# Импорт маршрутов из CUSTOMER-A в CUSTOMER-B
set vrf name CUSTOMER-B protocols static route 10.100.0.0/16 next-hop-vrf 'CUSTOMER-A'

# Создание route-map для фильтрации
set policy route-map VRF-LEAK rule 10 action 'permit'
set policy route-map VRF-LEAK rule 10 match ip address prefix-list 'ALLOWED-PREFIXES'

VRF с NAT

# NAT для VRF CUSTOMER-A
set nat source rule 100 source address '10.0.1.0/24'
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 translation address 'masquerade'

# Привязка NAT к VRF через интерфейс
set interfaces ethernet eth1 vif 100 vrf 'CUSTOMER-A'

Firewall для VRF

# Firewall для трафика в VRF CUSTOMER-A
set firewall ipv4 name VRF-CUSTOMER-A-IN default-action 'drop'
set firewall ipv4 name VRF-CUSTOMER-A-IN rule 10 action 'accept'
set firewall ipv4 name VRF-CUSTOMER-A-IN rule 10 state established
set firewall ipv4 name VRF-CUSTOMER-A-IN rule 10 state related

set firewall ipv4 name VRF-CUSTOMER-A-IN rule 20 action 'accept'
set firewall ipv4 name VRF-CUSTOMER-A-IN rule 20 source address '10.0.1.0/24'

# Применение к интерфейсу VRF
set interfaces ethernet eth1 vif 100 firewall in name 'VRF-CUSTOMER-A-IN'

DHCP Server в VRF

# DHCP сервер для VRF CUSTOMER-A
set service dhcp-server shared-network-name CUSTOMER-A-NETWORK subnet 10.0.1.0/24 range 0 start '10.0.1.10'
set service dhcp-server shared-network-name CUSTOMER-A-NETWORK subnet 10.0.1.0/24 range 0 stop '10.0.1.200'
set service dhcp-server shared-network-name CUSTOMER-A-NETWORK subnet 10.0.1.0/24 default-router '10.0.1.1'
set service dhcp-server shared-network-name CUSTOMER-A-NETWORK subnet 10.0.1.0/24 name-server '8.8.8.8'
set service dhcp-server shared-network-name CUSTOMER-A-NETWORK vrf 'CUSTOMER-A'

Сценарии использования VRF

1. Multi-tenancy для облачных сервисов

Изоляция клиентов в облачной среде:

configure

# VRF для каждого клиента
set vrf name TENANT-001 table '1001'
set vrf name TENANT-002 table '1002'
set vrf name TENANT-003 table '1003'

# Привязка VLAN к VRF
set interfaces ethernet eth1 vif 1001 address '10.1.0.1/24'
set interfaces ethernet eth1 vif 1001 vrf 'TENANT-001'

set interfaces ethernet eth1 vif 1002 address '10.1.0.1/24'
set interfaces ethernet eth1 vif 1002 vrf 'TENANT-002'

set interfaces ethernet eth1 vif 1003 address '10.1.0.1/24'
set interfaces ethernet eth1 vif 1003 vrf 'TENANT-003'

# BGP для каждого tenant
set vrf name TENANT-001 protocols bgp system-as '65001'
set vrf name TENANT-002 protocols bgp system-as '65002'
set vrf name TENANT-003 protocols bgp system-as '65003'

commit

2. Разделение сервисов (Management, Production, Development)

# Production VRF
set vrf name PRODUCTION table '100'
set interfaces ethernet eth1 vif 100 address '10.10.0.1/24'
set interfaces ethernet eth1 vif 100 vrf 'PRODUCTION'

# Development VRF
set vrf name DEVELOPMENT table '200'
set interfaces ethernet eth1 vif 200 address '10.20.0.1/24'
set interfaces ethernet eth1 vif 200 vrf 'DEVELOPMENT'

# Management VRF (доступ к обоим)
set vrf name MANAGEMENT table '300'
set interfaces ethernet eth2 address '192.168.0.1/24'
set interfaces ethernet eth2 vrf 'MANAGEMENT'

# Route leaking для management доступа
set vrf name MANAGEMENT protocols static route 10.10.0.0/24 next-hop-vrf 'PRODUCTION'
set vrf name MANAGEMENT protocols static route 10.20.0.0/24 next-hop-vrf 'DEVELOPMENT'

3. Internet Service Provider (ISP) архитектура

# ISP Customer VRFs с BGP
set vrf name CUSTOMER-A table '100'
set vrf name CUSTOMER-A protocols bgp system-as '65000'
set vrf name CUSTOMER-A protocols bgp neighbor 10.1.1.2 remote-as '65001'

set vrf name CUSTOMER-B table '200'
set vrf name CUSTOMER-B protocols bgp system-as '65000'
set vrf name CUSTOMER-B protocols bgp neighbor 10.2.1.2 remote-as '65002'

# Separate routing policies per customer
set vrf name CUSTOMER-A protocols bgp neighbor 10.1.1.2 address-family ipv4-unicast route-map import 'CUSTOMER-A-IN'
set vrf name CUSTOMER-A protocols bgp neighbor 10.1.1.2 address-family ipv4-unicast route-map export 'CUSTOMER-A-OUT'

4. Тестовая среда с продакшеном

# Production VRF
set vrf name PROD table '100'
set interfaces ethernet eth1 vif 100 vrf 'PROD'
set vrf name PROD protocols bgp system-as '65100'

# Test VRF (изолированная копия production)
set vrf name TEST table '200'
set interfaces ethernet eth1 vif 200 vrf 'TEST'
set vrf name TEST protocols bgp system-as '65200'

# Одинаковые IP ranges, но изолированные
set interfaces ethernet eth1 vif 100 address '10.0.0.1/24'
set interfaces ethernet eth1 vif 200 address '10.0.0.1/24'

Интеграция VRF с облачными платформами

Yandex Cloud

Типовые сценарии:

  • VRF для разделения окружений (production, staging, development)
  • Изоляция клиентских сетей в multi-tenant решениях
  • Отдельный VRF для управления с доступом через Yandex Cloud VPC
configure

# Production VRF для Yandex Cloud сети
set vrf name YC-PROD table '100'
set interfaces ethernet eth1 vif 100 address '10.128.0.1/24'
set interfaces ethernet eth1 vif 100 vrf 'YC-PROD'
set interfaces ethernet eth1 vif 100 description 'Yandex Cloud Production'

# Development VRF
set vrf name YC-DEV table '200'
set interfaces ethernet eth1 vif 200 address '10.129.0.1/24'
set interfaces ethernet eth1 vif 200 vrf 'YC-DEV'
set interfaces ethernet eth1 vif 200 description 'Yandex Cloud Development'

# Статические маршруты в Yandex Cloud
set vrf name YC-PROD protocols static route 0.0.0.0/0 next-hop 10.128.0.2

# BGP пиринг с Yandex Cloud
set vrf name YC-PROD protocols bgp system-as '65000'
set vrf name YC-PROD protocols bgp neighbor 10.128.0.2 remote-as '65001'

commit

Интеграция с Yandex Cloud Services:

# VRF для доступа к Object Storage
set vrf name YC-STORAGE table '300'
set vrf name YC-STORAGE protocols static route 213.180.193.0/24 next-hop 10.128.0.2
set vrf name YC-STORAGE protocols static route 213.180.204.0/24 next-hop 10.128.0.2

VK Cloud

Типовые сценарии:

  • Разделение клиентских проектов
  • Изоляция DMZ от внутренних сетей
  • Separate VRF для Kubernetes кластеров
# VK Cloud Production
set vrf name VK-PROD table '100'
set interfaces ethernet eth1 vif 100 address '10.0.10.1/24'
set interfaces ethernet eth1 vif 100 vrf 'VK-PROD'

# VK Cloud Kubernetes
set vrf name VK-K8S table '200'
set interfaces ethernet eth1 vif 200 address '10.0.20.1/24'
set interfaces ethernet eth1 vif 200 vrf 'VK-K8S'

# DMZ VRF
set vrf name VK-DMZ table '300'
set interfaces ethernet eth1 vif 300 address '10.0.30.1/24'
set interfaces ethernet eth1 vif 300 vrf 'VK-DMZ'

# Route leaking: DMZ может общаться с PROD, но не наоборот
set vrf name VK-DMZ protocols static route 10.0.10.0/24 next-hop-vrf 'VK-PROD'

Мониторинг и диагностика VRF

Команды просмотра VRF

# Список всех VRF
show vrf

# Детальная информация о VRF
show vrf detail

# Маршрутная таблица конкретного VRF
show ip route vrf CUSTOMER-A

# BGP состояние в VRF
show bgp vrf CUSTOMER-A summary

# OSPF в VRF
show ospf vrf CUSTOMER-A neighbor

# Интерфейсы в VRF
show interfaces vrf CUSTOMER-A

Диагностические команды

# Ping из VRF
ping 8.8.8.8 vrf CUSTOMER-A

# Traceroute из VRF
traceroute 8.8.8.8 vrf CUSTOMER-A

# TCP dump на VRF интерфейсе
monitor traffic interface eth1.100

# Просмотр соединений в VRF
show conntrack vrf CUSTOMER-A

Логирование VRF

# Включить детальное логирование для VRF
set system syslog global facility local7 level 'info'

# Просмотр логов
show log | match vrf
show log | match CUSTOMER-A

Лучшие практики проектирования VRF

Планирование VRF архитектуры

  1. Naming Convention: Используйте понятные имена VRF

    • CUSTOMER-{NAME} для клиентских VRF
    • {ENV}-{SERVICE} для внутренних сервисов (PROD-APP, DEV-DB)
    • MGMT или MANAGEMENT для управления
  2. Table ID Assignment: Резервируйте диапазоны table ID

    • 100-199: Production VRF
    • 200-299: Development/Staging VRF
    • 300-399: Management VRF
    • 1000+: Customer VRF
  3. IP Address Planning: Документируйте использование IP для каждого VRF

    • Можно использовать одинаковые приватные диапазоны в разных VRF
    • Планируйте route leaking заранее
  4. Route Distinguisher: Используйте уникальные RD для BGP VRF

    • Формат: ASN:NN (65000:100, 65000:200)
    • Или IP:NN (10.0.0.1:100)

Безопасность VRF

  1. Firewall между VRF: Всегда применяйте firewall при route leaking
set firewall ipv4 name VRF-TO-VRF default-action 'drop'
set firewall ipv4 name VRF-TO-VRF rule 10 action 'accept'
set firewall ipv4 name VRF-TO-VRF rule 10 source address '10.1.0.0/24'
  1. Изоляция Management: Отдельный VRF для управления
  2. Access Control: Ограничение доступа между VRF
  3. Audit Logging: Логирование всех межVRF коммуникаций

Производительность

  1. Hardware Forwarding: VRF использует kernel routing, проверьте производительность
  2. Table Size: Мониторьте размер routing tables в каждом VRF
  3. BGP Scaling: Ограничивайте количество префиксов на VRF
  4. Connection Tracking: Мониторьте conntrack entries для каждого VRF

Управление и мониторинг

  1. Документация: Документируйте назначение каждого VRF
  2. Monitoring: Настройте мониторинг маршрутов и состояния VRF
  3. Alerting: Оповещения при изменении количества маршрутов
  4. Backup: Регулярное резервное копирование конфигурации

Troubleshooting VRF

Проблема: Трафик не проходит через VRF

Симптомы:

  • Пакеты отправляются, но не достигают назначения
  • Нет connectivity в VRF

Решение:

# Проверить что интерфейс в правильном VRF
show interfaces

# Проверить routing table VRF
show ip route vrf CUSTOMER-A

# Проверить что есть маршрут по умолчанию
show ip route vrf CUSTOMER-A 0.0.0.0/0

# Проверить firewall правила
show firewall

# Debug routing
set vrf name CUSTOMER-A protocols static route 0.0.0.0/0 next-hop 10.0.1.254

Проблема: Route leaking не работает

Симптомы:

  • Маршруты не появляются в целевом VRF
  • Нет connectivity между VRF

Решение:

# Проверить конфигурацию route leaking
show vrf name CUSTOMER-A protocols static

# Проверить что исходный маршрут существует
show ip route vrf SOURCE-VRF

# Проверить next-hop-vrf
set vrf name DEST-VRF protocols static route 10.0.0.0/24 next-hop-vrf 'SOURCE-VRF'

# Проверить firewall между VRF
show firewall

Проблема: BGP не устанавливает сессию в VRF

Симптомы:

  • BGP neighbor в состоянии Idle или Active
  • Нет BGP routes в VRF

Решение:

# Проверить BGP конфигурацию
show bgp vrf CUSTOMER-A summary

# Проверить что neighbor доступен
ping <neighbor-ip> vrf CUSTOMER-A

# Проверить router-id
show bgp vrf CUSTOMER-A

# Debug BGP
set vrf name CUSTOMER-A protocols bgp parameters log-neighbor-changes

# Проверить firewall для BGP (TCP 179)
show firewall

Проблема: Перекрывающиеся IP адреса конфликтуют

Симптомы:

  • Routing loops
  • Неправильная маршрутизация между VRF

Решение:

# Убедиться что интерфейсы в правильных VRF
show interfaces detail

# Проверить что нет случайного route leaking
show vrf name CUSTOMER-A protocols static

# Проверить NAT конфигурацию
show nat source rules

Проблема: DHCP не работает в VRF

Симптомы:

  • Клиенты не получают IP адреса
  • DHCP server не отвечает

Решение:

# Проверить что DHCP сервер привязан к VRF
show service dhcp-server

# Проверить что слушает на правильном интерфейсе
show service dhcp-server shared-network-name

# Убедиться что VRF указан
set service dhcp-server shared-network-name CUSTOMER-A-NET vrf 'CUSTOMER-A'

# Проверить DHCP lease
show dhcp server leases

Дополнительные ресурсы


Примечание: VRF является мощным инструментом для сегментации сети. Тщательно планируйте архитектуру VRF перед внедрением в production среде. Детальные примеры конфигурации для специфичных облачных сценариев будут добавлены в следующих обновлениях.