Виртуальная маршрутизация#
Описание#
VRF – технология, позволяющая реализовывать на базе одного физического маршрутизатора несколько виртуальных – каждого со своей независимой таблицей маршрутизации. Преимуществом виртуальной маршрутизации является полная изоляция маршрутов как между двумя виртуальными маршрутизаторами, так и между виртуальным и реальным. Устройства VRF совместно с правилами обработки трафика на уровне IP (IP Rules) позволяют создать виртуальные маршрутизаторы. При создании устройства VRF создается ассоциированная с ним таблица маршрутизации. После создания устройства VRF его необходимо привязать к определенному сетевому интерфейсу.
Настройка#
Пример настройки#
Пример топологии с использованием экземпляров VRF.
Рабочая станция PC1 располагается в зоне VRF default и выполняет роль файлового сервера.
Рабочая станция PC2 располагается в зоне VRF blue которая соответствует отделу разработки.
Рабочие станции PC3 и PC4 подключены к мосту (bridge) на маршрутизаторе R1, который располагается в зоне VRF red, соответствующей отделу кадров.
Маршрутизатор R1 управляется через выделенную сеть, которая располагается в зоне VRF mgmt.
Применение настроек на маршрутизаторе:
set interfaces bridge br10 address '10.30.0.254/24'
set interfaces bridge br10 member interface eth3
set interfaces bridge br10 member interface eth4
set interfaces bridge br10 vrf 'red'
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 vrf 'mgmt'
set interfaces ethernet eth1 address '10.0.0.254/24'
set interfaces ethernet eth2 address '10.20.0.254/24'
set interfaces ethernet eth2 vrf 'blue'
set protocols static interface-route 10.20.0.0/24 next-hop-interface eth2 next-hop-vrf 'blue'
set protocols static interface-route 10.30.0.0/24 next-hop-interface br10 next-hop-vrf 'red'
set protocols vrf blue static interface-route 10.0.0.0/24 next-hop-interface eth1 next-hop-vrf 'default'
set protocols vrf red static interface-route 10.0.0.0/24 next-hop-interface eth1 next-hop-vrf 'default'
set service ssh disable-host-validation
set service ssh vrf 'mgmt'
set system domain-name 'fakel.net'
set system host-name 'R1'
set system name-server 'eth0'
set vrf name blue table '3000'
set vrf name mgmt table '1000'
set vrf name red table '2000'
После применения настрое на физическом маршрутизаторе для каждого экземпляра VRF появится своя таблица маршрутизации:
Таблица маршрутизации по умолчанию:
admin@R1:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
C>* 10.0.0.0/24 is directly connected, eth1, 00:07:44
S>* 10.20.0.0/24 [1/0] is directly connected, eth2 (vrf blue), weight 1, 00:07:38
S>* 10.30.0.0/24 [1/0] is directly connected, br10 (vrf red), weight 1, 00:07:38
Таблица маршрутизации Red:
admin@R1:~$ show ip route vrf red
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
VRF red:
K>* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 00:07:57
S>* 10.0.0.0/24 [1/0] is directly connected, eth1 (vrf default), weight 1, 00:07:40
C>* 10.30.0.0/24 is directly connected, br10, 00:07:54
Таблица маршрутизации Blue:
admin@R1:~$ show ip route vrf blue
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
VRF blue:
K>* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 00:08:00
S>* 10.0.0.0/24 [1/0] is directly connected, eth1 (vrf default), weight 1, 00:07:44
C>* 10.20.0.0/24 is directly connected, eth2, 00:07:53
Список команд#
Основные настройки#
- • set vrf name <name>#
Создает новый экземпляр VRF с именем указанным в параметре <name>. Заданное имя используется в дальнейшем при организации привязки сетевых интерфейсов к созданному экземпляру VRF.
- • set vrf name <name> table <id>#
Связывает таблицу маршрутизации определенного идентификатора <id> с экземпляром VRF <name>.
Примечание
Заданный идентификатор таблицы маршрутизации не может быть изменен после того, как он был привязан к экземпляру VRF. Это возможно только при удалении экземпляра VRF и созданию нового экземпляра VRF.
- • set vrf bind-to-all#
Активирует работу сервисов TCP и UDP, запущенных в контексте экземпляра VRF по умолчанию, также в контекстах всех остальных экземпляров VRF, не смотря на отсутствие фактической привязки к данным экземплярам VRF.
Примечание
По умолчанию при назначении портов все свободные сокеты связываются с экземпляром VRF по умолчанию. Такая конфигурация будет игнорироваться сетевыми пакетами, поступающими на сетевой интерфейс, связанный с другим экземпляром VRF.
- • set interfaces <dummy | ethernet | bonding | bridge | pppoe> <interface> vrf <name>#
Связывает сетевой интерфейс <interface> с экземпляром VRF <name>.
Настройка маршрутизации#
Примечание
ПО Факел поддерживает использование устройств VRF только совместно со статической маршрутизацией. Использование совместно с динамической маршрутизацией не поддерживается.
Статические маршруты#
- • set protocols vrf <name> static route <subnet> next-hop <address>#
Задает адрес <address> следующего маршрутизатора для статического маршрута IPv4 <subnet> в экземпляре VRF <name>. Для экземпляра VRF можно создавать несколько статических маршрутов IPv4.
- • set protocols vrf <name> static route <subnet> next-hop <address> disable#
Отключает использование записи со статическим маршрутом IPv4 <subnet> в экземпляре VRF <name>.
- • set protocols vrf <name> static route <subnet> next-hop <address> distance <distance>#
Задает административную дистанцию <distance> до следующего маршрутизатора <address> для маршрута IPv4 <subnet> в экземпляре VRF <name>. Маршруты с наименьшей административной дистанцией - в приоритете перед маршрутами с наибольшей административной дистанцией. Административную дистанцию можно определить в диапазоне от 1 до 255. Значение административной дистанции по умолчанию - 1.
- • set protocols vrf <name> static route6 <subnet> next-hop <address>#
Задает адрес <address> следующего маршрутизатора для статического маршрута IPv6 <subnet> в экземпляре VRF <name>. Для устройства VRF можно создавать несколько статических маршрутов IPv6.
- • set protocols vrf <name> static route6 <subnet> next-hop <address> disable#
Отключает использование записи со статическим маршрутом IPv6 <subnet> в экземпляре VRF <name>.
- • set protocols vrf <name> static route6 <subnet> next-hop <address> distance <distance>#
Задает административную дистанцию <distance> до следующего маршрутизатора <address> для маршрута IPv6 <subnet> в экземпляре VRF <name>. Маршруты с наименьшей административной дистанцией - в приоритете перед маршрутами с наибольшей административной дистанцией. Административную дистанцию можно определить в диапазоне от 1 до 255. Значение административной дистанции по умолчанию - 1.
Примечание
Маршруты с административной дистанцией 255 фактически отключены и не заносятся в ядро ПО Факел.
Утечка маршрутов#
- • set protocols vrf <name> static route <subnet> next-hop <address> next-hop-vrf <default | vrf-name>#
Добавляет статический маршрут IPv4 в таблицу маршрутизации экземпляра VRF <name> для доступа к подсети <subnet> через следующий маршрутизатор <address> c адресом, принадлежащим другому экземпляру VRF <default | vrf-name>. Используется в случае, если есть общие сервисы или маршруты, которые должны быть общими для нескольких экземпляров VRF.
- • set protocols vrf <name> static route6 <subnet> next-hop <address> next-hop-vrf <default | vrf-name>#
Добавляет статический маршрут IPv6 в таблицу маршрутизации экземпляра VRF <name> для доступа к подсети <subnet> через следующий маршрутизатор <address> c адресом, принадлежащим другому экземпляру VRF <default | vrf-name>. Используется в случае, если есть общие сервисы или маршруты, которые должны быть общими для нескольких экземпляров VRF.
Маршруты для интерфейсов#
- • set protocols vrf <name> static interface-route <subnet> next-hop-interface <interface>#
Определяет интерфейс <interface> следующего маршрутизатора для статического маршрута IPv4 <subnet> на основе интерфейса для экземпляра VRF <name>. Интерфейс <interface> будет являться интерфейсом следующего узла, через который будет направляться трафик для заданной подсети <subnet>.
- • set protocols vrf <name> static interface-route <subnet> next-hop-interface <interface> disable#
Отключает использование статического маршрута IPv4 <subnet> на основе интерфейса <interface> для экземпляра VRF <name>.
- • set protocols vrf <name> static interface-route <subnet> next-hop-interface <interface> distance <distance>#
Задает административную дистанцию <distance> до следующего маршрутизатора на основе интерфейса <interface> для маршрута IPv4 <subnet> в экземпляре VRF <name>. Маршруты с наименьшей административной дистанцией - в приоритете перед маршрутами с наибольшей административной дистанцией. Административную дистанцию можно определить в диапазоне от 1 до 255. Значение административной дистанции по умолчанию - 1.
- • set protocols vrf <name> static interface-route6 <subnet> next-hop-interface <interface>#
Определяет интерфейс <interface> следующего маршрутизатора для статического маршрута IPv6 <subnet> на основе интерфейса для экземпляра VRF <name>. Интерфейс <interface> будет являться интерфейсом следующего узла, через который будет направляться трафик для заданной подсети <subnet>.
- • set protocols vrf <name> static interface-route6 <subnet> next-hop-interface <interface> disable#
Отключает использование статического маршрута IPv6 <subnet> на основе интерфейса <interface> для экземпляра VRF <name>.
- • set protocols vrf <name> static interface-route6 <subnet> next-hop-interface <interface> distance <distance>#
Задает административную дистанцию <distance> до следующего маршрутизатора на основе интерфейса <interface> для маршрута IPv6 <subnet> в экземпляре VRF <name>. Маршруты с наименьшей административной дистанцией - в приоритете перед маршрутами с наибольшей административной дистанцией. Административную дистанцию можно определить в диапазоне от 1 до 255. Значение административной дистанции по умолчанию - 1.
Нулевой маршрут#
Примечание
Нулевой маршрут - это маршрут, для которого система отбрасывает подходящие пакеты без ответа. Использование нулевого маршрута позволяет предотвратить утечку данных о топологии сети через публичные интерфейсы, но не мешает использовать ее в качестве более специфического маршрута внутри сети.
- • set protocols vrf <name> static route <subnet> blackhole#
Создает нулевой маршрут IPv4 <subnet> в экземпляре VRF <name>.
- • set protocols vrf <name> static route <subnet> blackhole distance <distance>#
Задает административную дистанцию <distance> для нулевого маршрута IPv4 <subnet> в экземпляре VRF <name>. Маршруты с наименьшей административной дистанцией - в приоритете перед маршрутами с наибольшей административной дистанцией.
- • set protocols vrf <name> static route6 <subnet> blackhole#
Создает нулевой маршрут IPv6 <subnet> в экземпляре VRF <name>.
- • set protocols vrf <name> static route6 <subnet> blackhole distance <distance>#
Задает административную дистанцию <distance> для нулевого маршрута IPv6 <subnet> в экземпляре VRF <name>. Маршруты с наименьшей административной дистанцией - в приоритете перед маршрутами с наибольшей административной дистанцией.
Мониторинг#
- • show vrf#
Выводит на экран список созданных экземпляров VRF.
Пример работы команды show vrf:
admin@fakel:~$ show vrf
VRF name state mac address flags interfaces
-------- ----- ----------- ----- ----------
blue up 00:53:12:d8:74:24 noarp,master,up,lower_up dum200,eth0.302
red up 00:53:de:02:df:aa noarp,master,up,lower_up dum100,eth0.300,bond0.100,peth0
- • show vrf <name>#
Выводит на экран информацию об определенном <name> экземпляре VRF с именем.
Пример работы команды show vrf <name>:
admin@fakel:~$ show vrf name blue
VRF name state mac address flags interfaces
-------- ----- ----------- ----- ----------
blue up 00:53:12:d8:74:24 noarp,master,up,lower_up dum200,eth0.302
- • show ip route vrf <name>#
Выводит на экран содержимое таблицы маршрутизации IPv4 для определенного <name> экземпляра VRF.
Пример работы команды show ip route vrf <name>:
admin@fakel:~$ show ip route vrf blue
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued route, r - rejected route
VRF blue:
K 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 00:00:50
S>* 172.16.0.0/16 [1/0] via 192.0.2.1, dum1, 00:00:02
C>* 192.0.2.0/24 is directly connected, dum1, 00:00:06
- • show ipv6 route vrf <name>#
Выводит на экран содержимое таблицы маршрутизации IPv6 для определенного <name> экземпляра VRF.
Пример работы команды show ipv6 route vrf <name>:
admin@fakel:~$ show ipv6 route vrf red
Codes: K - kernel route, C - connected, S - static, R - RIPng,
O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued route, r - rejected route
VRF red:
K ::/0 [255/8192] unreachable (ICMP unreachable), 00:43:20
C>* 2001:db8::/64 is directly connected, dum1, 00:02:19
C>* fe80::/64 is directly connected, dum1, 00:43:19
K>* ff00::/8 [0/256] is directly connected, dum1, 00:43:19
- • ping <host> vrf <name>#
Проверяет доступности или недоступности сетевого узла.
Пример работы команды ping <host> vrf <name>:
admin@fakel:~$ ping 192.0.2.1 vrf red
PING 192.0.2.1 (192.0.2.1) 56(84) bytes of data.
64 bytes from 192.0.2.1: icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from 192.0.2.1: icmp_seq=2 ttl=64 time=0.078 ms
^C
--- 192.0.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 0.070/0.074/0.078/0.004 ms
- • traceroute vrf <name> [ipv4 | ipv6] <host>#
Отображает маршрут следования данных до определенного хоста. При использовании опции IPv4 или IPv6 отображаются пакеты к семейству IP адресов данного хоста. Эта опция полезна, когда указанный хост представляет собой имя хоста, а не IP адрес.