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
saveOSPF с 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'
commitRIP с 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'
commit2. Разделение сервисов (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.2VK 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 архитектуры
Naming Convention: Используйте понятные имена VRF
- CUSTOMER-{NAME} для клиентских VRF
- {ENV}-{SERVICE} для внутренних сервисов (PROD-APP, DEV-DB)
- MGMT или MANAGEMENT для управления
Table ID Assignment: Резервируйте диапазоны table ID
- 100-199: Production VRF
- 200-299: Development/Staging VRF
- 300-399: Management VRF
- 1000+: Customer VRF
IP Address Planning: Документируйте использование IP для каждого VRF
- Можно использовать одинаковые приватные диапазоны в разных VRF
- Планируйте route leaking заранее
Route Distinguisher: Используйте уникальные RD для BGP VRF
- Формат: ASN:NN (65000:100, 65000:200)
- Или IP:NN (10.0.0.1:100)
Безопасность VRF
- 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'- Изоляция Management: Отдельный VRF для управления
- Access Control: Ограничение доступа между VRF
- Audit Logging: Логирование всех межVRF коммуникаций
Производительность
- Hardware Forwarding: VRF использует kernel routing, проверьте производительность
- Table Size: Мониторьте размер routing tables в каждом VRF
- BGP Scaling: Ограничивайте количество префиксов на VRF
- Connection Tracking: Мониторьте conntrack entries для каждого VRF
Управление и мониторинг
- Документация: Документируйте назначение каждого VRF
- Monitoring: Настройте мониторинг маршрутов и состояния VRF
- Alerting: Оповещения при изменении количества маршрутов
- 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Дополнительные ресурсы
- VyOS VRF Documentation
- RFC 4364 - BGP/MPLS IP Virtual Private Networks (VPNs)
- Linux VRF Documentation
- FRRouting VRF Configuration
Примечание: VRF является мощным инструментом для сегментации сети. Тщательно планируйте архитектуру VRF перед внедрением в production среде. Детальные примеры конфигурации для специфичных облачных сценариев будут добавлены в следующих обновлениях.