VXLAN расшифровывается как Virtual Extensible LAN и является широко используемой технологией сетевой виртуализации в крупных сетях второго уровня. Она была разработана для решения ряда проблем виртуализации в эпоху облачных вычислений.
Что такое VXLAN?
Логический туннель VXLAN создается между сетевыми устройствами источника и назначения с помощью инкапсуляции MAC в UDP (User Datagram Protocol). Другими словами, исходный Ethernet-пакет, отправленный виртуальной машиной, инкапсулируется в UDP-пакет, а затем на верхнем уровне инкапсулируются заголовок IP-пакета и заголовок Ethernet-пакета физической сети. Таким образом, инкапсулированный пакет ведет себя как обычный IP-пакет и может быть передан через сеть L3.
Зачем нужен VXLAN?
Это тесно связано с тенденцией виртуализации серверной части центров обработки данных. С одной стороны, виртуализация серверов привела к динамической миграции виртуальных машин, что требует наличия сети, обеспечивающей беспрепятственный доступ.
С другой стороны, центры обработки данных стали более масштабными и значительно увеличили число арендаторов, что потребовало создания сети, способной изолировать огромное количество арендаторов. VXLAN может удовлетворить эти два ключевых требования.
Сеть VXLAN представляет собой следующие новые элементы по сравнению с традиционными сетями:
- VTEP (конечные точки туннелей VXLAN): это пограничные устройства в сети VXLAN, которые служат начальной и конечной точками туннелей VXLAN. Вся соответствующая обработка пакетов VXLAN выполняется на VTEP.
- VNI (сетевой идентификатор VXLAN): VLAN в кадрах Ethernet занимают всего 12 бит, что ограничивает их возможности по изоляции в сетях центров обработки данных. Введение VNI решает эту проблему. VNI — это идентификатор пользователя, аналогичный VLAN ID, где каждый VNI представляет арендатора, а виртуальные машины с разными значениями VNI не могут напрямую взаимодействовать на L2. При инкапсуляции пакетов в VXLAN, под VNI выделяется достаточно места, чтобы поддерживать изоляцию большого количества арендаторов.
- Туннель VXLAN: "Туннель" — это логическое понятие, которое не является новым, как, например, хорошо известная Generic Routing Encapsulation (GRE). Проще говоря, он преобразует исходный пакет, инкапсулируя его, что позволяет передавать его по транспортной сети (например, IP-сети). С точки зрения хоста создается впечатление, что между источником и получателем исходного пакета существует прямая связь. Этот кажущийся прямым канал и есть "туннель". Как следует из названия, "туннель VXLAN" используется для передачи инкапсулированных пакетов VXLAN и представляет собой виртуальный канал, созданный между двумя VTEP.
Конфигурирование VXLAN:
Функционал VXLAN поддерживается на линейке коммутаторов QSW-6900.
В данной примере рассмотрим базовую настройку VXLAN L2VNI.
Схема тестового стенда:
В роли Spine будет выступать коммутатор QSW-6900-32H
В роли Leaf выступают QSW-6900-56LF
Для начала, требуется перевести коммутатор в режим работы vxlan с помощью команды:
(config)#switch-mode vxlan slot 0
Please save current config and restart your device!
После этого требуется сохранить конфигурацию и перезагрузить коммутатор.
Начнём с настройки Spine, так как от Spine нам требуется только маршрутизация, на нём мы настроим только ospf.
Spine(config)#router ospf 1
Spine(config-router)#router-id 10.65.0.1
Далее настраиваем интерфейсы в сторону Leaf, переводим их в режим работы L3:
Spine(config)#interface hundredGigabitEthernet 0/1
Spine(config-if-HundredGigabitEthernet 0/1)#no switchport
Spine(config-if-HundredGigabitEthernet 0/1)#description to_leaf-1
Spine(config-if-HundredGigabitEthernet 0/1)#ip address 10.10.0.1 255.255.255.252
Spine(config-if-HundredGigabitEthernet 0/1)#ip ospf 1 area 0
Spine(config)#interface hundredGigabitEthernet 0/2
Spine(config-if-HundredGigabitEthernet 0/2)#no switchport
Spine(config-if-HundredGigabitEthernet 0/2)#description to_leaf-2
Spine(config-if-HundredGigabitEthernet 0/2)#ip address 10.20.0.1 255.255.255.252
Spine(config-if-HundredGigabitEthernet 0/2)#ip ospf 1 area 0
Spine(config)#interface hundredGigabitEthernet 0/3
Spine(config-if-HundredGigabitEthernet 0/3)#no switchport
Spine(config-if-HundredGigabitEthernet 0/3)#description to_leaf-3
Spine(config-if-HundredGigabitEthernet 0/3)#ip address 10.30.0.1 255.255.255.252
Spine(config-if-HundredGigabitEthernet 0/3)#ip ospf 1 area 0
Аналогично настраиваем интерфейсы Leaf в сторону Spine:
LEAF-1
Leaf-1(config)#router ospf 1
Leaf-1(config-router)#router-id 10.65.0.10
Leaf-1(config)#interface hundredGigabitEthernet 0/56
Leaf-1(config-if-HundredGigabitEthernet 0/56)#no switchport
Leaf-1(config-if-HundredGigabitEthernet 0/56)#description to_Spine
Leaf-1(config-if-HundredGigabitEthernet 0/56)#ip address 10.10.0.2 255.255.255.252
Leaf-1(config-if-HundredGigabitEthernet 0/56)#ip ospf 1 area 0
LEAF-2
Leaf-2(config)#router ospf 1
Leaf-2(config-router)#router-id 10.65.0.20
Leaf-2(config)#interface hundredGigabitEthernet 0/56
Leaf-2(config-if-HundredGigabitEthernet 0/56)#no switchport
Leaf-2(config-if-HundredGigabitEthernet 0/56)#description to_Spine
Leaf-2(config-if-HundredGigabitEthernet 0/56)#ip address 10.20.0.2 255.255.255.252
Leaf-2(config-if-HundredGigabitEthernet 0/56)#ip ospf 1 area 0
LEAF-3
Leaf-3(config)#router ospf 1
Leaf-3(config-router)#router-id 10.65.0.30
Leaf-3(config)#interface hundredGigabitEthernet 0/56
Leaf-3(config-if-HundredGigabitEthernet 0/56)#no switchport
Leaf-3(config-if-HundredGigabitEthernet 0/56)#description to_Spine
Leaf-3(config-if-HundredGigabitEthernet 0/56)#ip address 10.30.0.2 255.255.255.252
Leaf-3(config-if-HundredGigabitEthernet 0/56)#ip ospf 1 area 0
Смотрим вывод show ip ospf neighbor на Spine:
Spine#sh ip ospf neighbor
OSPF process 1, 3 Neighbors, 3 is Full:
Neighbor ID Pri State BFD State Dead Time Address Interface
10.65.0.10 1 Full/BDR - 00:00:37 10.10.0.2 HundredGigabitEthernet 0/1
10.65.0.20 1 Full/BDR - 00:00:39 10.20.0.2 HundredGigabitEthernet 0/2
10.65.0.30 1 Full/BDR - 00:00:33 10.30.0.2 HundredGigabitEthernet 0/3
Соседство построено со всеми Leaf, можем приступать к настройке BGP/EVPN.
Создаём на всех Leaf коммутаторах интерфейс loopback, с него будет строиться BGP сессия.
Leaf-1(config)#interface loopback 1
Leaf-1(config-if-Loopback 1)#ip address 1.1.1.1 255.255.255.255
Leaf-1(config-if-Loopback 1)#ip ospf 1 area 0
Leaf-1(config)#exit
Leaf-2(config)#interface loopback 1
Leaf-2(config-if-Loopback 1)#ip address 2.2.2.2 255.255.255.255
Leaf-2(config-if-Loopback 1)#ip ospf 1 area 0
Leaf-2(config-if-Loopback 1)#exit
Leaf-3(config)#interface loopback 1
Leaf-3(config-if-Loopback 1)#ip address 3.3.3.3 255.255.255.255
Leaf-3(config-if-Loopback 1)#ip ospf 1 area 0
Leaf-3(config-if-Loopback 1)#exit
Проверяем ip связность с Leaf-2 и Leaf-3
Leaf-1#ping 2.2.2.2 source loopback 1
Sending 5, 100-byte ICMP Echoes to 2.2.2.2, timeout is 2 seconds:
< press Ctrl+C to break >
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms.
Leaf-1#ping 3.3.3.3 source loopback 1
Sending 5, 100-byte ICMP Echoes to 3.3.3.3, timeout is 2 seconds:
< press Ctrl+C to break >
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms.
Далее настраиваем BGP:
LEAF-1
Leaf-1(config)#router bgp 65100
Leaf-1(config-router)#neighbor 2.2.2.2 remote-as 65200
Leaf-1(config-router)#neighbor 2.2.2.2 ebgp-multihop 4
Leaf-1(config-router)#neighbor 2.2.2.2 update-source loopback 1
Leaf-1(config-router)#neighbor 3.3.3.3 remote-as 65300
Leaf-1(config-router)#neighbor 3.3.3.3 ebgp-multihop 4
Leaf-1(config-router)#neighbor 3.3.3.3 update-source loopback 1
Создаём адресное семейство EVPN и добавляем в адресное семейство соседей:
Leaf-2(config-router)#address-family l2vpn evpn
Leaf-1(config-router-af)#neighbor 2.2.2.2 activate
Leaf-1(config-router-af)#neighbor 2.2.2.2 send-community both
Leaf-1(config-router-af)#neighbor 3.3.3.3 activate
Leaf-1(config-router-af)#neighbor 3.3.3.3 send-community both
Leaf-1(config-router-af)#end
Для Leaf-2 и Leaf-3 настройка будет аналогична:
LEAF-2
Leaf-2(config)#router bgp 65200
Leaf-2(config-router)#bgp router-id 10.65.0.20
Leaf-2(config-router)#neighbor 1.1.1.1 remote-as 65100
Leaf-2(config-router)#neighbor 1.1.1.1 ebgp-multihop 4
Leaf-2(config-router)#neighbor 1.1.1.1 update-source loopback 1
Leaf-2(config-router)#neighbor 3.3.3.3 remote-as 65300
Leaf-2(config-router)#neighbor 3.3.3.3 ebgp-multihop 4
Leaf-2(config-router)#neighbor 3.3.3.3 update-source loopback 1
Leaf-2(config-router)#address-family l2vpn evpn
Leaf-2(config-router-af)#neighbor 1.1.1.1 activate
Leaf-2(config-router-af)#neighbor 1.1.1.1 send-community both
Leaf-2(config-router-af)#neighbor 3.3.3.3 activate
Leaf-2(config-router-af)#neighbor 3.3.3.3 send-community both
Leaf-2(config-router-af)#end
LEAF-3
Leaf-3(config)#router bgp 65300
Leaf-3(config-router)#bgp router-id 10.65.0.30
Leaf-3(config-router)#neighbor 1.1.1.1 remote-as 65100
Leaf-3(config-router)#neighbor 1.1.1.1 ebgp-multihop 4
Leaf-3(config-router)#neighbor 1.1.1.1 update-source loopback 1
Leaf-3(config-router)#neighbor 2.2.2.2 remote-as 65200
Leaf-3(config-router)#neighbor 2.2.2.2 ebgp-multihop 4
Leaf-3(config-router)#neighbor 2.2.2.2 update-source loopback 1
Leaf-3(config-router)#address-family l2vpn evpn
Leaf-3(config-router-af)#neighbor 1.1.1.1 activate
Leaf-3(config-router-af)#neighbor 1.1.1.1 send-community both
Leaf-3(config-router-af)#neighbor 2.2.2.2 activate
Leaf-3(config-router-af)#neighbor 2.2.2.2 send-community both
Leaf-3(config-router-af)#end
Проверяем активные сессии:
Leaf-1#show bgp l2vpn evpn all summary
BGP Instance AS 65100(Default)
For address family: L2VPN EVPN
BGP router identifier 10.65.0.10, local AS number 65100
BGP table version is 1
0 BGP AS-PATH entries
0 BGP Community entries
0 BGP Prefix entries (Maximum-prefix:4294967295)
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2.2.2.2 4 65200 23 22 1 0 0 00:16:41 0
3.3.3.3 4 65300 8 5 1 0 0 00:02:22 0
Total number of neighbors 2, established neighbors 2
Видим, что соседи в адресном семействе EVPN активны, приступаем к настройке VXLAN.
Задаём интерфейс c которого будет строиться VXLAN туннель:
Leaf-1(config)#vtep
Leaf-1(config-vtep)#source loopback 1
Leaf-1(config-vtep)#exit
Теперь нам нужно создать VNI и задать rd и route-target. Route-target в режиме «auto» генерируется из номер VNI и номера AS, а так как мы используем на стенде EBGP и номера AS у нас разные, нам требуется выставить route-target вручную:
Leaf-1(config)#evpn
Leaf-1(config-evpn)#vni 10000
Leaf-1(config-evpn-vni)#rd auto
Leaf-1(config-evpn-vni)#route-target both 10000:10000
Leaf-1(config-evpn-vni)#end
Далее создаём VXLAN и ассоциируем его с VLAN, номер VXLAN должен совпадать с номер VNI.
Leaf-1(config)#vlan 345
Leaf-1(config-vlan)#exit
Leaf-1(config)#vxlan 10000
Leaf-1(config-vxlan)#extend-vlan 345
Leaf-1(config-vxlan)#exit
Смотрим вывод команды «show bgp l2vpn evpn all»
Leaf-1#show bgp l2vpn evpn all
BGP Instance AS 65100(Default)
BGP table version is 1, local router ID is 10.65.0.10, bgp instance 65100(Default)
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
S Stale, b - backup entry, m - multipath, f Filter, a additional-path
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 10.65.0.10:1 (Default for EVI 10000)
*> 3:0:32:1.1.1.1/72
1.1.1.1 32768 i
Total number of prefixes 1
Видим что после настройки начал генерироваться маршруты типа 3.
Аналогичные настройки делаем на других Leaf:
LEAF-2
Leaf-2(config)#vtep
Leaf-2(config-vtep)#source loopback 1
Leaf-2(config)#vlan 345
Leaf-2(config-vtep)#exit
Leaf-2(config)#evpn
Leaf-2(config-evpn)# vni 10000
Leaf-2(config-evpn-vni)# rd auto
Leaf-2(config-evpn-vni)# route-target both 10000:10000
Leaf-2(config-evpn-vni)#vxlan 10000
Leaf-2(config-vxlan)# extend-vlan 345
Leaf-2(config-vxlan)#exit
LEAF-3
Leaf-3(config)#vtep
Leaf-3(config-vtep)#source loopback 1
Leaf-3(config)#vlan 345
Leaf-3(config-vlan)#exit
Leaf-3(config)#evpn
Leaf-3(config-evpn)# vni 10000
Leaf-3(config-evpn-vni)# rd auto
Leaf-3(config-evpn-vni)# route-target both 10000:10000
Leaf-3(config-evpn-vni)#vxlan 10000
Leaf-3(config-vxlan)# extend-vlan 345
Leaf-3(config-vxlan)#exit
После завершения настроек видим логи:
%VXLAN-6-VTEP_DISCOVERED: A new VTEP [2.2.2.2] discovered on VXLAN 10000.
%LINEPROTO-5-UPDOWN: Line protocol on Interface OverlayTunnel 6145, changed state to up.
%VXLAN-6-VTEP_DISCOVERED: A new VTEP [3.3.3.3] discovered on VXLAN 10000.
%LINEPROTO-5-UPDOWN: Line protocol on Interface OverlayTunnel 6146, changed state to up.
Смотрим вывод команды «show vxlan»
Leaf-1#sh vxlan
VXLAN Total Count: 1
VXLAN Capacity : 4000
VXLAN 10000
Symmetric property : FALSE
Router Interface : -
Extend VLAN : 345
VTEP Adjacency Count: 2
VTEP Adjacency List :
Interface Source IP Destination IP Type
--------- --------- -------------- ----
OverlayTunnel 6145 1.1.1.1 2.2.2.2 dynamic
OverlayTunnel 6146 1.1.1.1 3.3.3.3 dynamic
Видим в выводе 2 активных VXLAN туннеля.
Настроим порты в сторону виртуальных машин:
Leaf-1(config)#interface tenGigabitEthernet 0/1
Leaf-1(config-if-TenGigabitEthernet 0/1)#switchport mode trunk
Leaf-1(config-if-TenGigabitEthernet 0/1)#switchport trunk allowed vlan only 345
Leaf-3(config)#interface tenGigabitEthernet 0/1
Leaf-3(config-if-TenGigabitEthernet 0/1)#switchport mode trunk
Leaf-3(config-if-TenGigabitEthernet 0/1)#switchport trunk allowed vlan only 345
Запустим пинг с VM-1 до VM-3:
VM@techdep:~$ ping 172.16.0.3
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.3: icmp_seq=1 ttl=64 time=0.304 ms
64 bytes from 172.16.0.3: icmp_seq=2 ttl=64 time=0.338 ms
64 bytes from 172.16.0.3: icmp_seq=3 ttl=64 time=0.328 ms
64 bytes from 172.16.0.3: icmp_seq=4 ttl=64 time=0.354 ms
Посмотрим вывод «sh vxlan mac»:
Leaf-1#sh vxlan mac
Vxlan MAC Address Type Location Interface Vlan Live Time
----- ----------- ---- -------- --------- ---- ---------
10000 08bf.b8c5.d0a0 DYNAMIC LOCAL TenGigabitEthernet 0/1 345 0d 00:06:26
10000 08c6.b326.a7ea PROTOCOL REMOTE OverlayTunnel 6146 - 0d 00:05:22
Видим что mac-адрес изучен за интерфейсом TenGigabitEthernet 0/1 в Vlan 345 который ассоциирован с VXLAN 10000.
Так же можем увидеть что mac-адрес VM-3 доступен через туннель 6146, данный номер назначается из динамического диапазона, начиная с 6145.
К какому именно VTEP какой номер OverlayTunnel относится, можно увидеть в выводе «show vxlan».
На этом закончим настройку L2VNI, данный пример является лишь базовой настройкой.
Автор:
Парфёнов А.А.
QTECH 2024 г.