Привет! Недавно начал экспериментировать с VPNv4 и VRF на Mikrotik, настраивая несколько маршрутизаторов P, PE и CPE. Вот как выглядит моя схема
Я настроил следующее:
- OSPF как IGP в MPLS ядре (P1, P2, PE1 и PE2)
- MPLS на всех интерфейсах, не выходящих к клиентам (P1, P2, PE1 и PE2)
- P1 как BGP route reflector с семейством адресов VPNv4, который затем устанавливает пира с PE1 и PE2
- VRF на интерфейсах PE1 и PE2, смотрящих в сторону клиента (RD 1:1, импорт 1:1, экспорт 1:1)
- OSPF на VRF-интерфейсах с перераспределением BGP-маршрутов (VPNv4)
- OSPF на CPE1-1 и CPE1-2
Я вижу, что маршруты появляются на каждом CPE, и они могут пинговать внутренние сети друг друга (192.168.10.1 и 192.168.20.1). Сначала, когда я делал traceroute между CPE1-1 и CPE1-2, первые 4 прыжка не проходили, а на 5-м доходил (propagate TTL включён).
[admin@CPE1-1] > tool trace 192.168.20.1
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 100% 6 timeout
2 100% 6 timeout
3 100% 6 timeout
4 100% 5 timeout
5 192.168.20.1 0% 5 8.8ms 7 3.8 8.8 1.9
Потребовалось время, чтобы понять, что клиентские сети на PE1 и PE2 (10.12.0.0/24 и 10.56.0.0/24) не находятся в основной таблице маршрутизации, а лежат в таблицах VRF, и из-за этого lookup на обоих PE не проходил. Я добавил статические маршруты для этих сетей в основную таблицу каждого PE, и теперь вижу маршрутизаторы PE в traceroute.
[admin@CPE1-1] > tool trace 192.168.20.1
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.12.0.2 0% 2 3ms 2.1 1.2 3 0.9
2 100% 2 timeout
3 100% 1 timeout
4 10.45.0.5 0% 1 7.3ms 7.3 7.3 7.3 0
5 192.168.20.1 0% 1 10.6ms 10.6 10.6 10.6 0
Правильно ли добавлять статические маршруты именно так? Как видите, два прыжка всё ещё не проходят. Наверное, это те участки, где идёт трафик через моё MPLS ядро? Почему они не проходят, и почему клиент не видит MPLS-метки?
Если я делаю traceroute с выключенным propagate TTL, эти два прыжка просто исчезают, как видно ниже:
[admin@CPE1-1] > tool trace 192.168.20.1
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.12.0.2 0% 3 1ms 1.3 1 1.6 0.2
2 10.45.0.5 0% 3 3.9ms 4.1 3.9 4.2 0.1
3 192.168.20.1 0% 3 6.3ms 6.7 5.7 8.2 1.1
Если я делаю traceroute с PE1 на PE2 (и на loopback, и на крайний интерфейс, propagate TTL снова включён) — я вижу MPLS-метки:
[admin@PE1] > tool traceroute 5.5.5.5
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.23.0.3 0% 4 2.6ms 4.4 2.6 6.4 1.5 MPLS:L=47,E=0
2 10.34.0.4 0% 4 2.9ms 3.9 2.9 4.7 0.8 MPLS:L=40,E=0
3 5.5.5.5 0% 4 2.4ms 4.3 2.4 7.2 2
[admin@PE1] > tool traceroute 10.56.0.5
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.23.0.3 0% 4 2.8ms 3 2.8 3.2 0.2 MPLS:L=52,E=0
2 10.34.0.4 0% 4 2.9ms 2.8 2.4 3.3 0.4 MPLS:L=44,E=0
3 10.56.0.5 0% 4 2.5ms 2.7 2.5 2.9 0.2
Так почему же клиент не видит MPLS-метки?

Я настроил следующее:
- OSPF как IGP в MPLS ядре (P1, P2, PE1 и PE2)
- MPLS на всех интерфейсах, не выходящих к клиентам (P1, P2, PE1 и PE2)
- P1 как BGP route reflector с семейством адресов VPNv4, который затем устанавливает пира с PE1 и PE2
- VRF на интерфейсах PE1 и PE2, смотрящих в сторону клиента (RD 1:1, импорт 1:1, экспорт 1:1)
- OSPF на VRF-интерфейсах с перераспределением BGP-маршрутов (VPNv4)
- OSPF на CPE1-1 и CPE1-2
Я вижу, что маршруты появляются на каждом CPE, и они могут пинговать внутренние сети друг друга (192.168.10.1 и 192.168.20.1). Сначала, когда я делал traceroute между CPE1-1 и CPE1-2, первые 4 прыжка не проходили, а на 5-м доходил (propagate TTL включён).
[admin@CPE1-1] > tool trace 192.168.20.1
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 100% 6 timeout
2 100% 6 timeout
3 100% 6 timeout
4 100% 5 timeout
5 192.168.20.1 0% 5 8.8ms 7 3.8 8.8 1.9
Потребовалось время, чтобы понять, что клиентские сети на PE1 и PE2 (10.12.0.0/24 и 10.56.0.0/24) не находятся в основной таблице маршрутизации, а лежат в таблицах VRF, и из-за этого lookup на обоих PE не проходил. Я добавил статические маршруты для этих сетей в основную таблицу каждого PE, и теперь вижу маршрутизаторы PE в traceroute.
[admin@CPE1-1] > tool trace 192.168.20.1
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.12.0.2 0% 2 3ms 2.1 1.2 3 0.9
2 100% 2 timeout
3 100% 1 timeout
4 10.45.0.5 0% 1 7.3ms 7.3 7.3 7.3 0
5 192.168.20.1 0% 1 10.6ms 10.6 10.6 10.6 0
Правильно ли добавлять статические маршруты именно так? Как видите, два прыжка всё ещё не проходят. Наверное, это те участки, где идёт трафик через моё MPLS ядро? Почему они не проходят, и почему клиент не видит MPLS-метки?
Если я делаю traceroute с выключенным propagate TTL, эти два прыжка просто исчезают, как видно ниже:
[admin@CPE1-1] > tool trace 192.168.20.1
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.12.0.2 0% 3 1ms 1.3 1 1.6 0.2
2 10.45.0.5 0% 3 3.9ms 4.1 3.9 4.2 0.1
3 192.168.20.1 0% 3 6.3ms 6.7 5.7 8.2 1.1
Если я делаю traceroute с PE1 на PE2 (и на loopback, и на крайний интерфейс, propagate TTL снова включён) — я вижу MPLS-метки:
[admin@PE1] > tool traceroute 5.5.5.5
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.23.0.3 0% 4 2.6ms 4.4 2.6 6.4 1.5 MPLS:L=47,E=0
2 10.34.0.4 0% 4 2.9ms 3.9 2.9 4.7 0.8 MPLS:L=40,E=0
3 5.5.5.5 0% 4 2.4ms 4.3 2.4 7.2 2
[admin@PE1] > tool traceroute 10.56.0.5
ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 10.23.0.3 0% 4 2.8ms 3 2.8 3.2 0.2 MPLS:L=52,E=0
2 10.34.0.4 0% 4 2.9ms 2.8 2.4 3.3 0.4 MPLS:L=44,E=0
3 10.56.0.5 0% 4 2.5ms 2.7 2.5 2.9 0.2
Так почему же клиент не видит MPLS-метки?