среда, 15 марта 2017 г.

MPLS L2VPN в OpenBSD

Тестирую виртуальный роутер Cisco XRv 9000. И оказалось, что на данный момент mpls l2vpn в них не работает.
Просто из любопытства решил посмотреть, что творится на этом фронте у других ОС, которые можно было бы взгромоздить на x86-роутер.
И оказалось, что актуальная OpenBSD умеет это "из коробки".


В этом примере сервер с OpenBSD подключен интерфейсом em0 в коммутатор ядра, где в вилане 281 ходит LDP. Рабочая машина, воткнута в порт em1, должна оказаться в VPLS-бридже (виртуальный коммутатор), находящемся на маршрутизаторе где-то в далёкой серверной и получить оттуда адрес по dhcp.
Т.е. компы со всей необъятной сети, подключенные в этот бридж, "считают", что находятся за одним обычным коммутатором.


Создаём vlan-интерфейс:
# ifconfig em0 up
# ifconfig em0 mtu 2000
# ifconfig vlan281 create
# ifconfig vlan281 vlan 281 vlandev em0
# ifconfig vlan281 up mpls
# ifconfig vlan281 10.100.15.133/30
# ifconfig vlan281 mtu 1600
Для работы LDP нужен выделенный лупбек (вообще, хорошим тоном является создание на каждом маршрутизатор лупбек-интерфейса с ip-адресом, и использование это ip-адреса в качестве router-id для разных протоколов).
# ifconfig lo1 10.100.223.220/32
Создаём pseudowire-интерфейс и бриджуем его с физическим портом.
# ifconfig mpw0 create
# ifconfig mpw0 up
# ifconfig em1 up
# ifconfig bridge0 create
# ifconfig bridge0 up
# ifconfig bridge0 add em1
# ifconfig bridge0 add mpw0
Надо добавить параметр в файл /etc/pf.conf:
set reassemble no

Теперь ospf с ядром:
router-id 10.100.223.220

area 0.0.0.0 {
   interface lo1
   interface vlan281
}
Запускаем ospfd.

И наконец ldp:
router-id 10.100.223.220

l2vpn OFFICE type vpls {
  bridge bridge0
  interface em1
  pseudowire mpw0 {
     neighbor-id 10.100.223.18
     pw-id 1111
  }
}
address-family ipv4 {
   interface vlan281
}
Запускаем ldpd. Проверяем:
# ldpctl show l2vpn pseudowires
Interface   Neighbor        PWID        Status
mpw0        10.100.223.18   1111        UP

Пробуем получать на тестовой машине dhcp.