
Санкции, проблемы с параллельным импортом и требования регулятора ставят нас перед неизбежным вопросом - чем заменить привычное западное? Да так, чтобы не переучиваться с нуля на новую архитектуру и синтаксис. К сожалению, заявления производителей не всегда соответствует реальности. Поэтому, что железо, что ПО нужно тщательно тестировать. Что мы и делаем в нашей технической лаборатории.
Недавно к нам приехали коммутаторы для ЦОД российского вендора Eltex. И эта статья открывает цикл материалов, посвященных тестированию данного оборудованию в разных условиях.
Меня зовут Евгений Алыхов, больше 20 лет я занимаюсь внедрением и тестированием оборудования для ЦОД. Под катом предлагаю рассмотреть процесс работы с коммутаторами Eltex от «достаем из коробки» и до «ура, заработало!» на примере сбора простейшей фабрики. Я детально разберу и дам рекомендации по настройке решения и его интеграции с иностранным оборудованием. Расскажу о плюсах и минусах и поделюсь некоторыми лайфхаками, которые помогут при первом знакомстве с данными коммутаторами.
Поставка и распаковка
Eltex – единственная компания, которая привозит коммутаторы в деревянных ящиках, внутри которых лежат коробки. Что ж, это необычно, но в этих ящиках оборудование точно доедет целым и невредимым.

В качестве тестового оборудования у нас есть:
Модель |
Количество |
Как будем использовать |
MES5500-32 |
3 |
Spine |
MES5410-48 |
4 |
Leaf |
100G QSFP28 Copper Twinax Cable 1m |
15 |
crossconnect |
Лицензии тоже есть, но о них мы поговорим чуть позже. А пока – это то, что мы получаем из коробок:
sh license
Features installed:
Licenses Licenses
Feature installed used Active
------------------ --------- --------- -------
Licenses installed:
Итак, у нас есть подопытное оборудование, попробуем собрать на нем что-то современное, где есть такие умные слова как VxLAN, EVPN, BGP, Underlay/Overlay, Anycast Gateway, VNI, BUM traffic и пр. Построим VxLAN фабрику! Легких путей мы не ищем, поэтому часть сети мы настроим правильно (по феншую), а часть по принципу “а так будет работать?” И, конечно, учтем интересы начинающих сетевых инженеров, которые только знакомятся с оборудованием Eltex и подсветим не только хитроумные команды для создания фабрики, но и базовые настройки для первоначального доступа к управлению оборудованием.
Организация удаленного управления
Для начала настроим удаленное управление:
terminal no prompt - очень полезная команда, потому что очень много будет спрашивать «Y/N?» без нее
conf t
ip vrf MGMT
exit
hostname <hostname>
username <username> privilege 15 encryption-algorithm sha-512 password <password>
aaa authentication login default local
ip ssh server vrf MGMT
interface oob
ip vrf MGMT
ip address 172.23.84.15 255.255.255.0
no ip address dhcp
ip default-gateway 172.23.84.1 vrf MGMT
aaa authentication login default local
line ssh
login authentication default
И здесь сразу странное поведение: это вывод конфигурации на настроенном оборудовании, но если я его скопирую и вставлю на следующий коммутатор, то она не применится. Всё из-за того, как работает применение VRF на интерфейсе и преднастроенных командах на OOB. Чтобы иметь возможность настроить OOB, команды должны идти в таком порядке:
interface oob
no ip address dhcp
no ip address
ip vrf MGMT
ip address 172.23.84.15 255.255.255.0
exit
Underlay
Что ж, удаленный доступ настроен и теперь настала пора придумать какой-то дизайн для тестирования. Начнем с L1 и underlay. У нас достаточно оборудования, чтобы придумать схему с MultiPod, а потому давайте соединим и настроим всё вот таким образом:

Здесь обращаю внимание на линки eSpine2-1 в сторону Leaf-коммутаторов – там есть параллельные линки в сторону eLeaf2-2 для проверки ECMP и есть Port-Channel в сторону eLeaf2-1 (а почему нет?). Вот его-то настройки в качестве примера и приведем ниже (полную настройку всех коммутаторов приведу в конце статьи). При этом в качестве underlay протокола маршрутизации используем OSPF.
hostname eSpine2-1
!
ip ssh server vrf MGMT
!
interface HundredGigabitEthernet1/0/1
channel-group 1 mode auto
exit
!
interface HundredGigabitEthernet1/0/2
channel-group 1 mode auto
exit
!
interface HundredGigabitEthernet1/0/3
ip address 10.2.1.5 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/4
ip address 10.2.1.9 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/31
ip address 10.1.255.2 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/32
ip address 10.1.255.6 255.255.255.252
exit
!
interface Port-Channel1
ip address 10.2.1.1 255.255.255.252
exit
!
interface loopback1
ip address 10.1.0.15 255.255.255.255
!
router ospf 100
network 10.1.0.15 area 0.0.0.0
network 10.1.255.2 area 0.0.0.0
network 10.1.255.6 area 0.0.0.0
network 10.2.1.1 area 0.0.0.0
network 10.2.1.5 area 0.0.0.0
network 10.2.1.9 area 0.0.0.0
router-id 10.1.0.15
exit
Здесь из интересного следует отметить, что в настройке network под OSPF-процессом можно указать только direct connected IP-адрес, нельзя задать range, как у других вендоров. Это заставляет переписывать все команды network для каждого коммутатора. Неудобно, но O’key…
Но вот что достаточно уникально для Eltex – это вариант настройки OSPF network type point-to-point. Если у всех вендоров эта настройка выполняется в меню интерфейса, то у Eltex появляется новая сущность: «interface ip», в контексте которой есть эта настройка.
То есть наша конфигурация еще дополняется следующим:
eSpine2-1#conf t
interface ip 10.1.255.2
ip ospf network point-to-point
interface ip 10.1.255.6
ip ospf network point-to-point
interface ip 10.2.1.1
ip ospf network point-to-point
interface ip 10.2.1.5
ip ospf network point-to-point
interface ip 10.2.1.9
ip ospf network point-to-point
Ну и вот мы дошли до необходимых лицензий, ведь сейчас мы не можем даже настроить BGP:
eSpine1-1(config)#router ?
isis Intermediate System to Intermediate System (IS-IS).
msdp Configure MSDP.
ospf Configure OSPF.
rip Routing Information Protocol (RIP)
eSpine1-1(config)#
У нас есть лицензии для всех коммутаторов. Загружаю через USB: eSpine1-1#copy usb://ESBE001666.demo flash:
20-Mar-2025 04:53:39 %COPY-I-FILECPY: Files Copy - source URL usb://ESBE001666.demo destination URL flash://ESBE001666.demo
20-Mar-2025 04:53:39 %COPY-N-TRAP: The copy operation was completed successfully
Copy: 2860 bytes copied in 00:00:01 [hh:mm:ss]
eSpine1-1#boot license flash:ESBE001666.demo
20-Mar-2025 04:53:47 %COPY-I-FILECPY: Files Copy - source URL flash://ESBE001666.demo destination URL flash://system/licenses/ESBE001666.demo
20-Mar-2025 04:53:47 %LICENSE-I-TRIAL-INSTALL: Trial license file ESBE001666.demo was installed.
20-Mar-2025 04:53:47 %COPY-N-TRAP: The copy operation was completed successfully
Copy: 2860 bytes copied in 00:00:01 [hh:mm:ss]
И посмотрим, как изменился доступ к функционалу, которого раньше не было:
eSpine1-1#sh license
Features installed:
Licenses Licenses
Feature installed used Active
------------------ --------- --------- -------
BGP 1 0 No
EVPN 1 0 No
Licenses installed:
License name: ESBE001666.demo
ELM License version: 1.0
Trial license with time-limited expiration
Total duration: 2 months, 88 days
Time to expire: 2 months, 88 days
Valid for device: ESBE001666 (90:54:b7:82:53:80)
Status: Active after reboot
Features:
BGP, EVPN
А вот эта строчка совсем не веселит:
Status: Active after reboot
И это же подтверждается колонкой «Licenses used = 0».
Неужели для активации лицензии потребуется перезагрузка коммутатора? Проверим конфигурацию:
eSpine1-1(config)#router ?
isis Intermediate System to Intermediate System (IS-IS).
msdp Configure MSDP.
ospf Configure OSPF.
rip Routing Information Protocol (RIP)
eSpine1-1(config)#
Да, нужна перезагрузка.
eSpine1-1#wr
Overwrite file [startup-config].... (Y/N)[N] ?Y
20-Mar-2025 04:54:17 %COPY-I-FILECPY: Files Copy - source URL running-config destination URL flash://system/configuration/startup-config
20-Mar-2025 04:54:17 %COPY-N-TRAP: The copy operation was completed successfully
eSpine1-1#reload
This command will reset the whole system and disconnect your current session. Do you want to continue ? (Y/N)[N] Y
20-Mar-2025 04:54:26 %RNDMISC-A-RELOAD: Reload requested administratively by user croc over ssh, source 10.22.11.168
Shutting down ...
Shutting down ...
И проверяем статус после перезагрузки:
eSpine1-1#sh license
Features installed:
Licenses Licenses
Feature installed used Active
------------------ --------- --------- -------
BGP 1 1 Yes
EVPN 1 1 Yes
Licenses installed:
License name: ESBE001666.demo
ELM License version: 1.0
Trial license with time-limited expiration
Total duration: 2 months, 88 days
Time to expire: 2 months, 87 days, 22 hours, 32 minutes, 23 seconds
Valid for device: ESBE001666 (90:54:b7:82:53:80)
Status: Active
Features:
BGP, EVPN
eSpine1-1(config)#router ?
bgp Border Gateway Protocol (BGP). – вот он, родимый!
isis Intermediate System to Intermediate System (IS-IS).
msdp Configure MSDP.
ospf Configure OSPF.
rip Routing Information Protocol (RIP)
Итак, все лицензии установлены, коммутаторы перезагружены и соединены между собой физически. Настроим BGP по такой схеме:

И сделаем всё по красоте! Кстати, это означает, что мы всё продумали, задокументировали и настроили в лучших традициях (как сказано в validated design). Господа эксперты, которые уже знают Eltex и особенности построения на нем фабрики, наверно, уже заметили подводный камень, который я заложил в эту схему.

Давайте, для себя, зафиксируем всё в таблице:
Коммутатор |
BGP AS |
BGP Update source (Loopback 1) |
eSpine1-1 |
65001 |
10.1.0.11 |
eSpine1-2 |
65001 |
10.1.0.12 |
eLeaf1-1 |
65001 |
10.1.0.13 |
eLeaf1-2 |
65001 |
10.1.0.14 |
eSpine2-1 |
65002 |
10.1.0.15 |
eLeaf2-1 |
65002 |
10.1.0.16 |
eLeaf2-2 |
65002 |
10.1.0.17 |
Конфигурация для Spine (на примере eSpine1-1 (вы же помните, что конфигурация остальных коммутаторов будет в конце статьи?)):
router bgp 65001
bgp router-id 10.1.0.11
address-family ipv4 unicast
exit
!
peer-group RRC
remote-as 65001
update-source loopback 1
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo= - кто угадает, что здесь зашифровано «Eltex» - тот мегакрутой хакер!
exit
!
neighbor 10.1.0.13
peer-group RRC
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.14
peer-group RRC
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
neighbor 10.1.255.2
remote-as 65002
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
exit
Конфигурация для Leaf, на примере eLeaf1-1:
router bgp 65001
bgp router-id 10.1.0.13
address-family ipv4 unicast
exit
!
peer-group RR
remote-as 65001
update-source loopback 1
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.11
peer-group RR
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.12
peer-group RR
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
exit
Вы заметили? – мы, как истинные педанты использовали peer-group, BFD и пароли для соседей. И было хорошо. И работал BGP как было задумано, пока не наступил Pod-2.
Вы же помните, что часть сети мы настраиваем по фэншую, а часть по принципу «а так будет работать?».
Так вот как выглядит конфигурация по фэншую:
eSpine1-1#sh ip bgp neighbors
Address Family: IPv4 Unicast, VRF: default
------------------------------------------
BGP neighbor Remote AS Router ID State Uptime Hold Time Keepalive
---------------- --------------- ---------------- --------------- --------------- -----
10.1.0.13 65001 10.1.0.13 ESTABLISHED 00,00:13:34 90 30
10.1.0.14 65001 10.1.0.14 ESTABLISHED 00,00:13:11 90 30
10.1.255.2 65002 10.1.0.15 ESTABLISHED 00,00:03:50 90 30
eSpine1-1#sh ip bfd neighbors
Neighbor Local State Last Down Diag
--------------- --------------- --------------- ------------------------------
10.1.0.13 10.1.0.11 Up No Diagnostic
10.1.0.14 10.1.0.11 Up No Diagnostic
10.1.255.2 10.1.255.1 Up No Diagnostic
А вот так работает конфигурация «а вот так?»:
eSpine2-1#20-Mar-2025 04:44:49 %BGP-I-ADJCHANGE: Neighbor 10.1.0.16 Up
20-Mar-2025 04:44:50 %BFD-I-SESSION_UP: BFD session to neighbor 10.1.0.16 is up
20-Mar-2025 04:44:51 %BFD-I-SESSION_DOWN: BFD session to neighbor 10.1.0.16 has gone down. Reason: Control detection time
20-Mar-2025 04:44:51 %BGP-I-ADJCHANGE: Neighbor 10.1.0.16 Down
20-Mar-2025 04:45:06 %BGP-I-ADJCHANGE: Neighbor 10.1.0.16 Up
20-Mar-2025 04:45:07 %BFD-I-SESSION_UP: BFD session to neighbor 10.1.0.16 is up
20-Mar-2025 04:45:08 %BFD-I-SESSION_DOWN: BFD session to neighbor 10.1.0.16 has gone down. Reason: Control detection time
20-Mar-2025 04:45:08 %BGP-I-ADJCHANGE: Neighbor 10.1.0.16 Down
20-Mar-2025 04:45:23 %BGP-I-ADJCHANGE: Neighbor 10.1.0.16 Up
20-Mar-2025 04:45:24 %BFD-I-SESSION_UP: BFD session to neighbor 10.1.0.16 is up
20-Mar-2025 04:45:24 %BFD-I-SESSION_DOWN: BFD session to neighbor 10.1.0.16 has gone down. Reason: Control detection time
20-Mar-2025 04:45:24 %BGP-I-ADJCHANGE: Neighbor 10.1.0.16 Down
20-Mar-2025 04:45:40 %BGP-I-ADJCHANGE: Neighbor 10.1.0.16 Up
eSpine2-1#sh ip bfd neighbors 10.1.0.16 detail
BFD neighbor: 10.1.0.16, local: 10.1.0.15
Current State: Down
Last Down Diag: No Diagnostic
Detection Multiplier: 3
Desired Min TX Interval: 150
Required Min RX Interval: 150
Remote Discr: 2147483676, (0x8000001c)
eSpine2-1#20-Mar-2025 04:44:33 %BFD-I-SESSION_UP: BFD session to neighbor 10.1.0.16 is up
eSpine2-1#sh ip bfd neighbors 10.1.0.16 detail
BFD neighbor: 10.1.0.16, local: 10.1.0.15
Current State: Up
Last Down Diag: No Diagnostic
Detection Multiplier: 3
Desired Min TX Interval: 150
Required Min RX Interval: 150
Remote Discr: 2147483676, (0x8000001c)
А всё почему? Потому, что НИКОГДА (СЛЫШИТЕ, НИКОГДА!) НЕ НАСТРАИВАЙТЕ КОМБИНАЦИЮ PORT-CHANNEL+BFD! Если только производитель не заявляет о том, что поддерживает такой режим, а Eltex как раз таки обещал это реализовать.

Для справедливости конфиг eSpine2-1:
router bgp 65002
bgp router-id 10.1.0.15
address-family ipv4 unicast
exit
!
peer-group RRC
remote-as 65002
update-source loopback 1
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.16
peer-group RRC
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.17
peer-group RRC
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
neighbor 10.1.255.1
remote-as 65001
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.255.5
remote-as 65001
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
и конфиг с eLeaf2-1:
router bgp 65002
bgp router-id 10.1.0.16
address-family ipv4 unicast
exit
!
peer-group RR
remote-as 65002
update-source loopback 1
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.15
peer-group RR
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
exit
Найдите 10 отличий:

Да, схема с ECMP будет работать, а вот схема с Port-Channel+BFD работать не будет.
И тут включается креатив : да, правильно разобрать Port-Channel на 2 канала с использованием ECMP, но у нас же пытливый ум, комсомольцы не ищут легких путей. Мы просто выключим BFD для Port-Channel.
eSpine2-1:
router bgp 65002
bgp router-id 10.1.0.15
address-family ipv4 unicast
exit
!
peer-group RRC
remote-as 65002
update-source loopback 1
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
peer-group RRC_BFD
remote-as 65002
update-source loopback 1
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.16
peer-group RRC
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.17
peer-group RRC_BFD
address-family ipv4 unicast
exit
exit
neighbor 10.1.255.1
remote-as 65001
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.255.5
remote-as 65001
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
eLeaf-2-1:
router bgp 65002
bgp router-id 10.1.0.15
address-family ipv4 unicast
exit
!
peer-group RRC
remote-as 65002
update-source loopback 1
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
peer-group RRC_BFD
remote-as 65002
update-source loopback 1
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.16
peer-group RRC
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.17
peer-group RRC_BFD
address-family ipv4 unicast
exit
address-family l2vpn evpn
exit
exit
exit
Проверим, изменилось ли что-то:
eSpine2-1#sh ip bgp neighbors
Address Family: IPv4 Unicast, VRF: default
------------------------------------------
BGP neighbor Remote AS Router ID State Uptime Hold Time Keepalive
---------------- --------------- ---------------- --------------- --------------- -----
10.1.0.16 65002 10.1.0.16 ESTABLISHED 00,10:48:35 90 30
10.1.0.17 65002 10.1.0.17 ESTABLISHED 00,10:48:19 90 30
10.1.255.1 65001 10.1.0.11 ESTABLISHED 00,00:08:58 90 30
10.1.255.5 65001 10.1.0.12 ESTABLISHED 00,00:07:58 90 30
eSpine2-1#sh ip bfd neighbors
Neighbor Local State Last Down Diag
--------------- --------------- --------------- ------------------------------
10.1.0.17 10.1.0.15 Up No Diagnostic
10.1.255.1 10.1.255.2 Up No Diagnostic
10.1.255.5 10.1.255.6 Up No Diagnostic
Ну вроде всё… Или нет? Кто внимательный?
Даю подсказку:
sh ip bgp l2vpn evpn neighbors
<пустота>
Да, несмотря на то что мы настроили EVPN для BGP-соседей:
router bgp 65001
neighbor 10.1.0.13
address-family l2vpn evpn
neighbor 10.1.0.14
address-family l2vpn evpn
Мы не включили семейство EVPN в самом BGP-процессе. Поэтому везде делаем так:
router bgp 65001
address-family l2vpn evpn
Проверяем еще раз:
eSpine1-1#sh ip bgp l2vpn evpn neighbors
Address Family: L2VPN EVPN, VRF: default
----------------------------------------
BGP neighbor Remote AS Router ID State Uptime Hold Time Keepalive
---------------- --------------- ---------------- --------------- --------------- ----------- -----
10.1.0.13 65001 10.1.0.13 ESTABLISHED 00,00:28:18 90 30
10.1.0.14 65001 10.1.0.14 ESTABLISHED 00,00:27:57 90 30
10.1.255.2 65002 10.1.0.15 ESTABLISHED 00,00:27:58 90 30
Вот теперь точно всё.
UNDERLAY ГОТОВ!!!
Overlay. Часть 1
Теперь попробуем придумать нашу схему, которая должна, по нашей задумке, работать.
Пусть будет такая:

«Я – художник, я так вижу» ?

Так, первое – это Port-Channel (eLeaf1-1/eLeaf1-2).
MLAG на фабрике нет. Пора использовать разные умные слова, которыми я разбрасывался вначале – «EVPN multihoming» подойдет. Очень интересная штука, которая использует пакеты EVPN типа 4 и 1 для формирования так называемого Ethernet Segment.
Для настройки EVPN multihoming нам надо одинаково настроить интерфейсы на паре коммутаторов Leaf:
eLeaf1-1:
interface HundredGigabitEthernet1/0/1
channel-group 1 mode auto
exit
interface Port-Channel1
switchport mode trunk
switchport trunk allowed vlan add 10-11,20
ethernet-segment 1
system-mac 55:55:55:55:00:01
exit
exit
eLeaf1-2:
interface HundredGigabitEthernet1/0/1
channel-group 1 mode auto
exit
interface Port-Channel1
switchport mode trunk
switchport trunk allowed vlan add 10-11,20
ethernet-segment 1
system-mac 55:55:55:55:00:01
exit
exit
Не забывайте, что каждый Port-Channel будет иметь свой уникальный номер ethernet-segment и свой уникальный system-mac!
На этом моменте возьмем пульт и поставим на паузу. Открою маленький секрет – на другой стороне в качестве конечного оборудования подключен коммутатор Maipu. И тут начались проблемы.
Проблема 1. Согласование параметров интерфейсов
Команда show interface HundredGigabitEthernet1/0/1 показывает, что интерфейс физически не включен. Смотрим конфигурацию на Maipu:
interface 100ge0/49
fec mode rs auto
И снова «show interface HundredGigabitEthernet1/0/1» на Eltex:
eLeaf1-1#sh int hu1/0/1
HundredGigabitEthernet1/0/1 is down (not connected)
Interface index is 103
Hardware is HundredGigabitEthernet, MAC address is 90:54:b7:4e:5b:31
Interface MTU is 1500
Link is down for 0 days, 16 hours, 8 minutes and 46 seconds
Flow control is off, MDIX mode is off
FEC is disabled
Нужно согласование режима FEC, поэтому на Eltex смотрим что можно сделать:
eLeaf1-1(config)#int hu1/0/1
eLeaf1-1(config-if)#fec ?
off Disable FEC.
cl74 Enable FC-FEC.
cl91 Enable RS-FEC.
То, что нужно. Настраиваем на eLeaf1-1 и eLeaf1-2:
interface HundredGigabitEthernet1/0/1
fec cl91
У-а-ля! (как это пишется правильно?!). Короче, физика поднялась!
HundredGigabitEthernet1/0/1 is up (connected)
<пропущено>
FEC is cl91
Проблема 2. EVPN Ethernet-segment
Из двух линков в Port-Channel участвует только один (это вывод с Maipu):
TestEndpoint#sh link-aggregation group 1
Link Aggregation 1 Information:
User: Lac System Priority: 32768
Type: Switchport System Id: ccd8-1f47-173f
Dynamic Lacp: Disable Load-balance Profile: default
Force Forward: Disable Forward Mode: Global-Fair
Working Mode: Lacp Least Active-linknumber: 1
Lacp Selected Speed: Disable Maximal Active-linknumber: 16
Number of Ports In Total: 2 Number of Ports Attached: 1
LAG Status: Up Root Port: 100ge0/49
BFD Src-ip: N/A BFD Dst-ip: N/A
Mlag Group: 0 Extend Port Id: 0
Resilient Hashing: Disable Port Sort: Disable
Link-aggregation Last Up Time: Aug 13 2025 13:25:48
Link-aggregation Last Down Time: Aug 13 2025 13:23:04
Actor Information
-----------------
ActorPort PortNo Portpri PortKey PortState Status
--------------- ------ ------- ------- --------- ------------
100ge0/49 49 32768 30721 10111100 ATTACHED
100ge0/50 50 32768 30721 10100000 DETACHED
Partner Information
-------------------
ActorPort PortNo SystemID SystemPri Portpri PortKey PortState
--------------- ------ -------------- --------- ------- ------- ---------
100ge0/49 103 5555-5555-0001 1 1 1000 10111100
100ge0/50 103 5555-5555-0001 1 1 1000 10110000
Это же подтверждается выводом с коммутаторов Leaf:
eLeaf1-1#sh evpn ethernet-segment
Interface Status ES Number Ethernet Segment ID (ESI) Remote members
admin/oper
--------- ---------- --------- ----------------------------- ---------------
Po1 UP/UP 1 03:55:55:55:55:00:01:00:00:01
eLeaf1-2#sh evpn ethernet-segment
Interface Status ES Number Ethernet Segment ID (ESI) Remote members
admin/oper
--------- ---------- --------- ----------------------------- ---------------
Po1 UP/DOWN 1 03:55:55:55:55:00:01:00:00:01 10.1.0.13
А знаете почему? Оба коммутатора Leaf представляются для Maipu единой системой с MAC 55:55:55:55:00:01
ActorPort PortNo SystemID SystemPri Portpri PortKey PortState
--------------- ------ -------------- --------- ------- ------- ---------
100ge0/49 103 5555-5555-0001 1 1 1000 10111100
100ge0/50 103 5555-5555-0001 1 1 1000 10110000
Но так как мы используем в обоих коммутаторах интерфейсы HundredGigabitEthernet1/0/1, у которых один и тот же индекс, напомню:
eLeaf1-1#sh int hu1/0/1
Interface index is 103
eLeaf1-2#sh int hu1/0/1
Interface index is 103
Maipu видит, что к его разным интерфейсам (100ge0/49 и 100ge0/50) подключен один и тот же интерфейс, что невозможно (повторю вывод еще раз, ведь теперь мы знаем, что нужно искать SystemID 5555-5555-0001 и PortNo 103):
ActorPort PortNo SystemID SystemPri Portpri PortKey PortState
--------------- ------ -------------- --------- ------- ------- ---------
100ge0/49 103 5555-5555-0001 1 1 1000 10111100
100ge0/50 103 5555-5555-0001 1 1 1000 10110000
К счастью, на Maipu есть такая команда, которая решает эту проблему:
TestEndpoint(config)#int link-aggregation 1
TestEndpoint(config-if-link-aggregation1)#lacp partner-port-check disable
Так как я ленивый, то проверю сразу на коммутаторах Leaf:
eLeaf1-1#sh evpn ethernet-segment
Interface Status ES Number Ethernet Segment ID (ESI) Remote members
admin/oper
--------- ---------- --------- ----------------------------- ---------------
Po1 UP/UP 1 03:55:55:55:55:00:01:00:00:01 10.1.0.14
eLeaf1-2#sh evpn ethernet-segment
Interface Status ES Number Ethernet Segment ID (ESI) Remote members
admin/oper
--------- ---------- --------- ----------------------------- ---------------
Po1 UP/UP 1 03:55:55:55:55:00:01:00:00:01 10.1.0.13
Так, а кто видел пульт? Под диваном смотрели? А, вот он… Снимаем с паузы, продолжаем разговор.
Overlay. Часть 2. Неправильная
Умный Port-Channel (EVPN multihoming) мы настроили, а теперь приступим к настройке сетей. И снова, что для этого нужно:
Создать пары VLAN/VxLAN и присвоить им L2VNI;
Создать пары VRF/VxLAN и присвоить им L3VNI;
Создать L3-интерфейсы;
Настроить Anycast gateway MAC;
Настроить маршрутизацию.
Сделаем табличку:
Тип VNI |
Номер VNI |
VLAN |
VxLAN |
L2 |
20010 |
10 |
VLAN10 |
L2 |
20011 |
11 |
VLAN11 |
L2 |
20020 |
20 |
VLAN20 |
L3 |
30000 |
3000 |
VRF_A |
L3 |
30001 |
3001 |
VRF_B |
И еще одну:
Interface VLAN |
VRF |
IP address |
10 |
A |
10.1.10.1/24 |
11 |
A |
10.1.11.1/24 |
20 |
B |
10.1.20.1/24 |
3000 |
A |
- |
3001 |
B |
- |
Теперь в виде команд:
vlan database
vlan 10-11,20,3000-3001
vxlan VLAN10
vni 20010
arp-suppression
vlan 10
route-target both 10.1.10.0:10
exit
!
vxlan VLAN11
vni 20011
arp-suppression
vlan 11
route-target both 10.1.11.0:11
exit
!
vxlan VLAN20
vni 20020
arp-suppression
vlan 20
route-target both 10.1.20.0:20
exit
ip vrf A
vni 30000
route-target both 1.2.3.4:3000
exit
!
ip vrf B
vni 30001
route-target both 1.2.3.4:3001
exit
vxlan VRF_A
vni 30000 ip-routing
vlan 3000
exit
!
vxlan VRF_B
vni 30001 ip-routing
vlan 3001
exit
anycast-gateway mac-address 12:34:56:78:ab:cd
interface vlan 10
name CustomerA-1
ip vrf A
ip address 10.1.10.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 11
name CustomerA-2
ip vrf A
ip address 10.1.11.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 20
name CustomerB-1
ip vrf B
ip address 10.1.20.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 3000
name VRF_A
ip vrf A
exit
!
interface vlan 3001
name VRF_B
ip vrf B
exit
router bgp 65001
vrf A
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
!
vrf B
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
exit
Посмотрим, что у нас получилось.
eLeaf1-1#sh vxlan
Status
Name VNI VLAN ID admin/oper BUM Forwarding Route Distinguisher
----------------------- -------- ------- ---------- --------------- ---------------------
VLAN10 20010 10 UP/UP Ingress Repl. 10.1.0.13:10
VLAN11 20011 11 UP/UP Ingress Repl. 10.1.0.13:11
VLAN20 20020 20 UP/UP Ingress Repl. 10.1.0.13:20
VRF_A 30000 3000 UP/DOWN Ingress Repl. 10.1.0.13:3000
VRF_B 30001 3001 UP/DOWN Ingress Repl. 10.1.0.13:3001
Здесь сразу бросается в глаза тот факт, что конфигурация в Eltex уже немного автоматизирована за нас, например, не надо настраивать Ingress Replication для BUM-трафика, что, несомненно, удобно.
Пусть не пугает UP/DOWN для VRF_A и VRF_B – это L3VNI, у которых нет IP-адреса:
eLeaf1-1#sh vxlan VRF_A
VRF_A
VxLAN Network ID is 30000, VLAN ID is 3000
Administrative status is UP
Operational status is DOWN, reason: interfaces are not configured
Local Router ID is 10.1.0.13
Route Distinguisher is 10.1.0.13:3000 (auto-assigned)
Route Target is: 65001:3000 (auto-assigned)
Broadcast/Unknown Unicast/Multicast traffic
is forwarded in Ingress Replication mode
И туннели VxLAN (внимание на 10.1.255.2):
eLeaf1-1#sh vxlan tunnels
VLAN10
Destination Source Status
------------------------ ------------------------ ------
20010:10.1.0.14 20010:10.1.0.13 Up
20010:10.1.0.16 20010:10.1.0.13 Up
20010:10.1.255.2 20010:10.1.0.13 Up
VLAN11
Destination Source Status
------------------------ ------------------------ ------
20011:10.1.0.14 20011:10.1.0.13 Up
20011:10.1.0.16 20011:10.1.0.13 Up
20011:10.1.255.2 20011:10.1.0.13 Up
VLAN20
Destination Source Status
------------------------ ------------------------ ------
20020:10.1.0.14 20020:10.1.0.13 Up
20020:10.1.0.16 20020:10.1.0.13 Up
20020:10.1.0.17 20020:10.1.0.13 Up
20020:10.1.255.2 20020:10.1.0.13 Up
VRF_A
Destination Source Status
------------------------ ------------------------ ------
30000:10.1.0.14 30000:10.1.0.13 Up
30000:10.1.255.2 30000:10.1.0.13 Up
VRF_B
Destination Source Status
------------------------ ------------------------ ------
30001:10.1.0.14 30001:10.1.0.13 Up
30001:10.1.255.2 30001:10.1.0.13 Up
И то, что изучил EVPN (маршруты типа 2) о конечном оборудовании (и снова внимание на 10.1.255.2):
eLeaf1-1#sh evpn mac-ip
VXLAN VLAN10
VNI VLAN MAC Address IP ESI Next Hop
-------- ---- ----------------- --------------- ----------------------------- ---------
20010 10 aa:aa:bb:bb:cc:10 - 03:55:55:55:55:00:01:00:00:01 Po1
20010 10 aa:aa:bb:bb:cc:10 10.1.10.100 03:55:55:55:55:00:01:00:00:01 Po1
20010 10 cc:d8:1f:47:17:3d - - 10.1.255.2
20010 10 cc:d8:1f:47:17:3d 10.1.10.200 - 10.1.255.2
VXLAN VLAN11
VNI VLAN MAC Address IP ESI Next Hop
-------- ---- ----------------- --------------- ----------------------------- ---------
20011 11 aa:aa:bb:bb:cc:11 - 03:55:55:55:55:00:01:00:00:01 Po1
20011 11 aa:aa:bb:bb:cc:11 10.1.11.100 03:55:55:55:55:00:01:00:00:01 Po1
20011 11 aa:aa:bb:bb:cc:11 10.1.11.100 03:55:55:55:55:00:01:00:00:01 10.1.0.14
20011 11 cc:d8:1f:47:17:3d - - 10.1.255.2
20011 11 cc:d8:1f:47:17:3d 10.1.11.200 - 10.1.255.2
VXLAN VLAN20
VNI VLAN MAC Address IP ESI Next Hop
-------- ---- ----------------- --------------- ----------------------------- ---------
20020 20 aa:aa:bb:bb:cc:20 - 03:55:55:55:55:00:01:00:00:01 Po1
20020 20 aa:aa:bb:bb:cc:20 10.1.20.100 03:55:55:55:55:00:01:00:00:01 Po1
20020 20 aa:aa:bb:bb:cc:20 10.1.20.100 03:55:55:55:55:00:01:00:00:01 10.1.0.14
20020 20 aa:aa:bb:bb:cc:52 - - 10.1.255.2
20020 20 aa:aa:bb:bb:cc:52 10.1.20.200 - 10.1.255.2
20020 20 aa:aa:bb:bb:cc:54 - - 10.1.255.2
20020 20 aa:aa:bb:bb:cc:54 10.1.20.201 - 10.1.255.2
20020 20 cc:d8:1f:47:17:3f - - 10.1.255.2
А если хочется посмотреть ВСЕ (все?!) типы пакетов EVPN (внимание на 10.1.255.2 (AS65002) и 10.1.255.6 (AS65002)):
eLeaf1-1#sh ip bgp l2vpn evpn
BGP routing table information for VRF default
BGP table version is 4040, local router ID is 10.1.0.13
Status codes: * - valid, > - best, i - internal, s-suppressed
Origin codes: i - IGP, e - EGP, ? - incomplete
Path type: a-aggregate
Network Nexthop Metric LocPrf Weight Path
Route distinguisher: 10.1.0.13:0
*> [1][03:55:55:55:55:00:01:00:00:01][-1]/152
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:10
*> [1][03:55:55:55:55:00:01:00:00:01][0]/152
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:11
*> [1][03:55:55:55:55:00:01:00:00:01][0]/152
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:20
*> [1][03:55:55:55:55:00:01:00:00:01][0]/152
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.14:0
*>i[1][03:55:55:55:55:00:01:00:00:01][-1]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:0
* i[1][03:55:55:55:55:00:01:00:00:01][-1]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:10
*>i[1][03:55:55:55:55:00:01:00:00:01][0]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:10
* i[1][03:55:55:55:55:00:01:00:00:01][0]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:11
*>i[1][03:55:55:55:55:00:01:00:00:01][0]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:11
* i[1][03:55:55:55:55:00:01:00:00:01][0]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:20
*>i[1][03:55:55:55:55:00:01:00:00:01][0]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:20
* i[1][03:55:55:55:55:00:01:00:00:01][0]/152
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.13:10
*>a[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:10][0][0.0.0.0]/240
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:11
*>a[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:11][0][0.0.0.0]/240
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:20
*>a[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:20][0][0.0.0.0]/240
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.16:10
*>i[2][0][0][48][cc:d8:1f:47:17:3d][0][0.0.0.0]/240
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:10
* i[2][0][0][48][cc:d8:1f:47:17:3d][0][0.0.0.0]/240
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:11
*>i[2][0][0][48][cc:d8:1f:47:17:3d][0][0.0.0.0]/240
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:11
* i[2][0][0][48][cc:d8:1f:47:17:3d][0][0.0.0.0]/240
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:20
*>i[2][0][0][48][aa:aa:bb:bb:cc:54][0][0.0.0.0]/240
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:20
* i[2][0][0][48][aa:aa:bb:bb:cc:54][0][0.0.0.0]/240
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
*>i[2][0][0][48][aa:aa:bb:bb:cc:52][0][0.0.0.0]/240
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
* i[2][0][0][48][aa:aa:bb:bb:cc:52][0][0.0.0.0]/240
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
*>i[2][0][0][48][cc:d8:1f:47:17:3f][0][0.0.0.0]/240
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
* i[2][0][0][48][cc:d8:1f:47:17:3f][0][0.0.0.0]/240
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.13:10
*>a[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:10][32][10.1.10.100]/272
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:11
*>a[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:11][32][10.1.11.100]/272
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:20
*>a[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:20][32][10.1.20.100]/272
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.14:11
*>i[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:11][32][10.1.11.100]/272
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:11
* i[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:11][32][10.1.11.100]/272
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:20
*>i[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:20][32][10.1.20.100]/272
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:20
* i[2][03:55:55:55:55:00:01:00:00:01][0][48][aa:aa:bb:bb:cc:20][32][10.1.20.100]/272
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.16:10
*>i[2][0][0][48][cc:d8:1f:47:17:3d][32][10.1.10.200]/272
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:10
* i[2][0][0][48][cc:d8:1f:47:17:3d][32][10.1.10.200]/272
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:11
*>i[2][0][0][48][cc:d8:1f:47:17:3d][32][10.1.11.200]/272
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:11
* i[2][0][0][48][cc:d8:1f:47:17:3d][32][10.1.11.200]/272
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:20
*>i[2][0][0][48][aa:aa:bb:bb:cc:54][32][10.1.20.201]/272
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:20
* i[2][0][0][48][aa:aa:bb:bb:cc:54][32][10.1.20.201]/272
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
*>i[2][0][0][48][aa:aa:bb:bb:cc:52][32][10.1.20.200]/272
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
* i[2][0][0][48][aa:aa:bb:bb:cc:52][32][10.1.20.200]/272
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.13:10
*> [3][0][32][10.1.0.13]/88
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:11
*> [3][0][32][10.1.0.13]/88
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.13:20
*> [3][0][32][10.1.0.13]/88
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.14:10
*>i[3][0][32][10.1.0.14]/88
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:10
* i[3][0][32][10.1.0.14]/88
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:11
*>i[3][0][32][10.1.0.14]/88
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:11
* i[3][0][32][10.1.0.14]/88
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:20
*>i[3][0][32][10.1.0.14]/88
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:20
* i[3][0][32][10.1.0.14]/88
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.16:10
*>i[3][0][32][10.1.0.16]/88
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:10
* i[3][0][32][10.1.0.16]/88
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:11
*>i[3][0][32][10.1.0.16]/88
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:11
* i[3][0][32][10.1.0.16]/88
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:20
*>i[3][0][32][10.1.0.16]/88
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:20
* i[3][0][32][10.1.0.16]/88
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
*>i[3][0][32][10.1.0.17]/88
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:20
* i[3][0][32][10.1.0.17]/88
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.13:0
s> [4][03:55:55:55:55:00:01:00:00:01][32][10.1.0.13]/136
0.0.0.0 0 100 0 ?
Route distinguisher: 10.1.0.14:0
s>i[4][03:55:55:55:55:00:01:00:00:01][32][10.1.0.14]/136
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:0
s i[4][03:55:55:55:55:00:01:00:00:01][32][10.1.0.14]/136
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.13:30000
*> [5][0][0][24][10.1.10.0]/224
0.0.0.0 0 100 32768 ?
Route distinguisher: 10.1.0.13:30000
*> [5][0][0][24][10.1.11.0]/224
0.0.0.0 0 100 32768 ?
Route distinguisher: 10.1.0.13:30001
*> [5][0][0][24][10.1.20.0]/224
0.0.0.0 0 100 32768 ?
Route distinguisher: 10.1.0.14:30000
*>i[5][0][0][24][10.1.10.0]/224
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:30000
* i[5][0][0][24][10.1.10.0]/224
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:30000
*>i[5][0][0][24][10.1.11.0]/224
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:30000
* i[5][0][0][24][10.1.11.0]/224
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:30001
*>i[5][0][0][24][10.1.20.0]/224
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.14:30001
* i[5][0][0][24][10.1.20.0]/224
10.1.0.14 0 100 0 ?
Route distinguisher: 10.1.0.16:30000
*>i[5][0][0][24][10.1.10.0]/224
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:30000
* i[5][0][0][24][10.1.10.0]/224
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:30000
*>i[5][0][0][24][10.1.11.0]/224
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:30000
* i[5][0][0][24][10.1.11.0]/224
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:30001
*>i[5][0][0][24][10.1.20.0]/224
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.16:30001
* i[5][0][0][24][10.1.20.0]/224
10.1.255.6 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:30001
*>i[5][0][0][24][10.1.20.0]/224
10.1.255.2 0 100 0 65002 ?
Route distinguisher: 10.1.0.17:30001
* i[5][0][0][24][10.1.20.0]/224
10.1.255.6 0 100 0 65002 ?
Зафиксировали то, что запомнили. И проверяем связность.
Тест связности с хоста 10.1.10.100 (Pod1, VRF A):
Доступность AnycastGW
TestEndpoint#ping vrf Pod1VRFA 10.1.10.1
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.10.1 , timeout is 0 seconds:
!!!!!
Success rate is 100% (5/5). Round-trip min/avg/max = 1/1/1 ms.
Доступность хоста 10.1.11.100 в другой сети в том же VRF (Pod1, VRF A)
TestEndpoint#ping vrf Pod1VRFA 10.1.11.100
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.11.100 , timeout is 0 seconds:
!!!!!
Success rate is 100% (5/5). Round-trip min/avg/max = 1/1/2 ms.
Доступность хоста 10.1.20.100 в другом VRF (Pod1, VRF B)
TestEndpoint#ping vrf Pod1VRFA 10.1.20.100
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.20.100 , timeout is 0 seconds:
UUUUU <-так как в таблице маршрутизации нет такой сети (другой же VRF!), то и ответ у нас отличается
Success rate is 0% (0/5).
Доступность хоста в той же сети на другом Pod (Pod2, VRF A)
TestEndpoint#ping vrf Pod1VRFA 10.1.10.200
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.10.200 , timeout is 0 seconds:
..... <-а вот это уже плохо, потому что очень хочется, чтобы был растянутый L2, а его нет
Success rate is 0% (0/5).
Ну и посмотреть таблицу ARP:
eLeaf1-1#sh arp
Total number of entries: 10
VLAN Interface IP address HW address status IP Unnumbered I/F
-------------------------- --------------- ------------------- --------------- -------------------
hu1/0/5 10.1.1.1 90:54:b7:82:53:80 dynamic
hu1/0/6 10.1.1.9 90:54:b7:82:6a:c0 dynamic
oob 172.23.84.1 00:1a:6c:47:b5:de dynamic
oob 172.23.84.52 cc:d8:1f:47:17:3c dynamic
oob 172.23.84.60 00:04:96:43:bc:a0 dynamic
oob 172.23.84.190 e0:cc:7a:08:75:5e dynamic
oob 172.23.84.250 64:2f:c7:8f:66:15 dynamic
vlan 10 Po1 10.1.10.100 aa:aa:bb:bb:cc:10 dynamic
vlan 11 Po1 10.1.11.100 aa:aa:bb:bb:cc:11 dynamic
vlan 20 Po1 10.1.20.100 aa:aa:bb:bb:cc:20 dynamic
Для сравнения, посмотрим таблицу ARP с Pod-2:
eLeaf2-1#sh arp
Total number of entries: 9
VLAN Interface IP address HW address status IP Unnumbered I/F
-------------------------- --------------- ------------------- --------------- -------------------
Po1 10.2.1.1 90:54:b7:82:57:80 dynamic
oob 172.23.84.1 00:1a:6c:47:b5:de dynamic
oob 172.23.84.52 cc:d8:1f:47:17:3c dynamic
oob 172.23.84.60 00:04:96:43:bc:a0 dynamic
oob 172.23.84.190 e0:cc:7a:08:75:5e dynamic
oob 172.23.84.250 64:2f:c7:8f:66:15 dynamic
vlan 10 hu1/0/1 10.1.10.200 cc:d8:1f:47:17:3d dynamic
vlan 11 hu1/0/1 10.1.11.200 cc:d8:1f:47:17:3d dynamic
vlan 20 hu1/0/2 10.1.20.201 aa:aa:bb:bb:cc:54 dynamic
Что, в сокращенном выводе, получили:
в рамках одного Pod и одного VRF связь полностью работает – правильно;
в рамках одного Pod и между VRF связи нет – правильно;
между Pod в рамках одного VRF связи нет – НЕ ПРАВИЛЬНО.
Так почему же у нас нет растянутого VLAN? Вот тут-то и вспоминаем про 10.1.255.2 (AS65002) и 10.1.255.6 (AS65002). Кто же это? Где там наша схема?

Да это же адреса eSpine2-1! А почему у нас в качестве nexthop везде указаны адреса не коммутаторов Leaf, а адреса Spine? Да всё просто – у нас же настроен eBGP, который подменяет nexthop (помните коварного енота?). В текущем релизе НЕ ПОДДЕРЖИВАЕТСЯ eBGP взаимодействие, но согласно карте развития Eltex, данный функционал должен появиться в Q3 2025 (можно ориентироваться на версию 6.6.10). Что ж, зная, и что важнее, доказав неприменимость eBGP, давайте полностью пересоберем схему, но теперь у нас будет только одна BGP AS. И это еще один повод пользоваться имеющимся от производителя документом по настройке фабрики.

Overlay. Часть 2. Правильная
Не забываем только, что теперь у нас Spine коммутаторы, являясь iBGP соседями не будут передавать информацию друг другу, поэтому сделаем их друг для друга BGP Route-Reflector Client (RRC). Итого, новая схема BGP:

А давайте сразу проверим связность?
Тест связности с хоста 10.1.10.100 (Pod1, VRF A):
Доступность AnycastGW
TestEndpoint#ping vrf Pod1VRFA 10.1.10.1
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.10.1 , timeout is 0 seconds:
!!!!! - не сломали – и то уже хорошо!
Success rate is 100% (5/5). Round-trip min/avg/max = 1/1/1 ms.
Доступность хоста 10.1.11.100 в другой сети в том же VRF (Pod1, VRF A)
TestEndpoint#ping vrf Pod1VRFA 10.1.11.100
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.11.100 , timeout is 0 seconds:
!!!!!
Success rate is 100% (5/5). Round-trip min/avg/max = 1/1/2 ms.
Доступность хоста 10.1.20.100 в другом VRF (Pod1, VRF B)
TestEndpoint#ping vrf Pod1VRFA 10.1.20.100
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.20.100 , timeout is 0 seconds:
UUUUU
Success rate is 0% (0/5).
Доступность хоста в той же сети на другом Pod (Pod2, VRF A)
TestEndpoint#ping vrf Pod1VRFA 10.1.10.200
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.10.200 , timeout is 0 seconds:
!!!!!
Success rate is 100% (5/5). Round-trip min/avg/max = 1/1/1 ms.
Доступность хоста в другой сети на другом Pod (Pod2, VRF A)
TestEndpoint#ping vrf Pod1VRFA 10.1.11.200
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 10.1.11.200 , timeout is 0 seconds:
!!!!!
Success rate is 100% (5/5). Round-trip min/avg/max = 1/1/1 ms.

Ну и посмотреть таблицу ARP:
eLeaf1-1# sh arp
Total number of entries: 10
VLAN Interface IP address HW address status IP Unnumbered I/F
-------------------------- --------------- ------------------- --------------- -------------------
hu1/0/5 10.1.1.1 90:54:b7:82:53:80 dynamic
hu1/0/6 10.1.1.9 90:54:b7:82:6a:c0 dynamic
oob 172.23.84.1 00:1a:6c:47:b5:de dynamic
oob 172.23.84.52 cc:d8:1f:47:17:3c dynamic
oob 172.23.84.60 00:04:96:43:bc:a0 dynamic
oob 172.23.84.190 e0:cc:7a:08:75:5e dynamic
oob 172.23.84.250 64:2f:c7:8f:66:15 dynamic
vlan 10 Po1 10.1.10.100 aa:aa:bb:bb:cc:10 dynamic
vlan 11 Po1 10.1.11.100 aa:aa:bb:bb:cc:11 dynamic
vlan 20 Po1 10.1.20.100 aa:aa:bb:bb:cc:20 dynamic
Казалось бы – а где наши удаленные IP?
А вот тут:
eLeaf1-1#sh ip route vrf A
Maximum Parallel Paths: 32 (32 after reset)
Load balancing: src-dst-mac-ip
IP Forwarding: enabled
Codes: > - best, C - connected, S - static,
R - RIP,
O - OSPF intra-area, OIA - OSPF inter-area,
OE1 - OSPF external 1, OE2 - OSPF external 2,
B - BGP, i - IS-IS, L1 - IS-IS level-1,
P - PBR
L2 - IS-IS level-2, ia - IS-IS inter area
[d/m]: d - route's distance, m - route's metric
C 10.1.10.0/24 is directly connected, vlan 10
B 10.1.10.200/32 [200/0] via 10.1.0.16, 00:31:22, VNI 30000,
router-mac 90:54:b7:4e:58:00
C 10.1.11.0/24 is directly connected, vlan 11
B 10.1.11.200/32 [200/0] via 10.1.0.16, 00:31:22, VNI 30000,
router-mac 90:54:b7:4e:58:00
eLeaf1-1#sh ip route vrf B
Maximum Parallel Paths: 32 (32 after reset)
Load balancing: src-dst-mac-ip
IP Forwarding: enabled
Codes: > - best, C - connected, S - static,
R - RIP,
O - OSPF intra-area, OIA - OSPF inter-area,
OE1 - OSPF external 1, OE2 - OSPF external 2,
B - BGP, i - IS-IS, L1 - IS-IS level-1,
P - PBR
L2 - IS-IS level-2, ia - IS-IS inter area
[d/m]: d - route's distance, m - route's metric
C 10.1.20.0/24 is directly connected, vlan 20
B 10.1.20.200/32 [200/0] via 10.1.0.17, 00:33:01, VNI 30001,
router-mac 90:54:b7:59:f8:00
B 10.1.20.201/32 [200/0] via 10.1.0.16, 00:33:01, VNI 30001,
router-mac 90:54:b7:4e:58:00
А что изменилось в выводах других команд?
Туннели VxLAN (тут больше нет destination 10.1.255.2, а всё указывает на remote leaf):
eLeaf1-1#sh vxlan tunnels
VLAN10
Destination Source Status
------------------------ ------------------------ ------
20010:10.1.0.14 20010:10.1.0.13 Up
20010:10.1.0.16 20010:10.1.0.13 Up
VLAN11
Destination Source Status
------------------------ ------------------------ ------
20011:10.1.0.14 20011:10.1.0.13 Up
20011:10.1.0.16 20011:10.1.0.13 Up
VLAN20
Destination Source Status
------------------------ ------------------------ ------
20020:10.1.0.14 20020:10.1.0.13 Up
20020:10.1.0.16 20020:10.1.0.13 Up
20020:10.1.0.17 20020:10.1.0.13 Up
VRF_A
Destination Source Status
------------------------ ------------------------ ------
30000:10.1.0.14 30000:10.1.0.13 Up
30000:10.1.0.16 30000:10.1.0.13 Up
VRF_B
Destination Source Status
------------------------ ------------------------ ------
30001:10.1.0.14 30001:10.1.0.13 Up
30001:10.1.0.16 30001:10.1.0.13 Up
30001:10.1.0.17 30001:10.1.0.13 Up
И то, что изучил EVPN (маршруты типа 2) о конечном оборудовании (и снова – 10.1.255.2 исчез, остались только remote leaf в качестве nexthop):
eLeaf1-1#sh evpn mac-ip
VXLAN VLAN10
VNI VLAN MAC Address IP ESI Next Hop
-------- ---- ----------------- --------------- ----------------------------- ---------------
20010 10 aa:aa:bb:bb:cc:10 - 03:55:55:55:55:00:01:00:00:01 Po1
20010 10 aa:aa:bb:bb:cc:10 10.1.10.100 03:55:55:55:55:00:01:00:00:01 Po1
20010 10 cc:d8:1f:47:17:3d - - 10.1.0.16
20010 10 cc:d8:1f:47:17:3d 10.1.10.200 - 10.1.0.16
VXLAN VLAN11
VNI VLAN MAC Address IP ESI Next Hop
-------- ---- ----------------- --------------- ----------------------------- ---------------
20011 11 aa:aa:bb:bb:cc:11 - 03:55:55:55:55:00:01:00:00:01 Po1
20011 11 aa:aa:bb:bb:cc:11 10.1.11.100 03:55:55:55:55:00:01:00:00:01 Po1
20011 11 aa:aa:bb:bb:cc:11 10.1.11.100 03:55:55:55:55:00:01:00:00:01 10.1.0.14
20011 11 cc:d8:1f:47:17:3d - - 10.1.0.16
20011 11 cc:d8:1f:47:17:3d 10.1.11.200 - 10.1.0.16
VXLAN VLAN20
VNI VLAN MAC Address IP ESI Next Hop
-------- ---- ----------------- --------------- ----------------------------- ---------------
20020 20 aa:aa:bb:bb:cc:20 - 03:55:55:55:55:00:01:00:00:01 Po1
20020 20 aa:aa:bb:bb:cc:20 10.1.20.100 03:55:55:55:55:00:01:00:00:01 Po1
20020 20 aa:aa:bb:bb:cc:20 10.1.20.100 03:55:55:55:55:00:01:00:00:01 10.1.0.14
20020 20 aa:aa:bb:bb:cc:52 - - 10.1.0.17
20020 20 aa:aa:bb:bb:cc:52 10.1.20.200 - 10.1.0.17
20020 20 aa:aa:bb:bb:cc:54 - - 10.1.0.16
20020 20 aa:aa:bb:bb:cc:54 10.1.20.201 - 10.1.0.16
20020 20 cc:d8:1f:47:17:3f - - 10.1.0.16
Балансировка. Нюансы
Что ж, я думаю, это успех! Но, хоть Матроскин уже обозначил близость конца статьи, тем не менее, мы же хотели еще проверить ECMP?
Тут все просто:
eSpine2-1#show ip route address 10.1.0.17
Maximum Parallel Paths: 32 (32 after reset)
Load balancing: src-dst-mac-ip
IP Forwarding: enabled
Codes: > - best, C - connected, S - static,
R - RIP,
O - OSPF intra-area, OIA - OSPF inter-area,
OE1 - OSPF external 1, OE2 - OSPF external 2,
B - BGP, i - IS-IS, L1 - IS-IS level-1,
P - PBR
L2 - IS-IS level-2, ia - IS-IS inter area
[d/m]: d - route's distance, m - route's metric
O 10.1.0.17/32 [30/20] via 10.2.1.6, 47:38:11, hu1/0/3
O 10.1.0.17/32 [30/20] via 10.2.1.10, 47:38:11, hu1/0/4
Да, в таблице маршрутизации nexthop балансируется между линками. Но есть нюанс… Обратили внимание на строку «Maximum Parallel Paths: 32 (32 after reset)»? Команда, которая включает возможность использования ECMP:
(config)#ip maximum-paths 32 - можно до 64 указать
И эту команду НАДО давать, но вот где нюанс:
eSpine2-1(config)#ip maximum-paths 32
Warning! New value will be applied only after reboot
Ребут?! Опять?! Любое изменение конфигурации или применение лицензии, требующее перезагрузки оборудования – это очень, очень, очень, ОЧЕНЬ, ОЧЕНЬ, ОЧЕНЬ неправильно. Я, как инженер, допускаю перезагрузку только в одном случае – это обновление ПО (да, я знаю про ISSU, но это не для одноюнитовых железок). Если бы можно было как-то повлиять на такое поведение, чтобы без перезагрузки… Но пока могу только порекомендовать включить и настроить всё, что требует перезагрузки, вначале настройки и потом за 1 раз перезагрузить.

Ладно, посмотрим разницу в балансировке между Port-Channel и ECMP. Вот этот самый кусок схемы:

Запустим трафик до 10.1.20.20, который находится за eLeaf2-2, зафиксируем трафик в начале:
eSpine2-1#sh int HundredGigabitEthernet1/0/31 | i bytes sent
1261493 packets output, 95837511 bytes sent
eSpine2-1#sh int HundredGigabitEthernet1/0/32 | i bytes sent
1197556 packets output, 85190809 bytes sent
И чуть позже:
eSpine2-1#sh int HundredGigabitEthernet1/0/31 | i bytes sent
1264002 packets output, 96483804 bytes sent
eSpine2-1#sh int HundredGigabitEthernet1/0/32 | i bytes sent
1199720 packets output, 85345064 bytes sent
Через Hu1/0/31 прошло 2509 пакетов, через Hu1/0/32 прошло 2164 пакета – выглядит как равномерное распределение нагрузки по ECMP.
А теперь запустим трафик до 10.1.10.200, который находится за eLeaf2-1 (через Port-Channel), зафиксируем трафик в начале:
eSpine2-1#sh int HundredGigabitEthernet1/0/1 | i bytes sent
46044 packets output, 4615686 bytes sent
eSpine2-1#sh int HundredGigabitEthernet1/0/2 | i bytes sent
13343 packets output, 1558374 bytes sent
И чуть позже:
eSpine2-1#sh int HundredGigabitEthernet1/0/1 | i bytes sent
46406 packets output, 4652115 bytes sent
eSpine2-1#sh int HundredGigabitEthernet1/0/2 | i bytes sent
14843 packets output, 3731538 bytes sent
Через Hu1/0/1 прошло 362 пакета, через Hu1/0/2 прошло 1500 пакетов – это не выглядит как равномерное распределение нагрузки между членами Port-Channel. Думаем, вспоминаем, осознаем…
Подсказка:
eSpine2-1(config)#port-channel load-balance ?
src-dst-mac-ip Port channel and ECMP load balancing is based on
source and destination of MAC and IP addresses.
src-dst-mac Port channel and ECMP load balancing is based on
source and destination MAC address.
src-dst-ip Port channel and ECMP load balancing is based on
source and destination IP address.
src-dst-mac-ip-port Port channel and ECMP load balancing is based on
source and destination of MAC and IP addresses and on
source and destination TCP/UDP port numbers.
dst-mac Port channel and ECMP load balancing is based on
destination MAC addresses.
dst-ip Port channel and ECMP load balancing is based on
destination IP addresses.
src-mac Port channel and ECMP load balancing is based on
source MAC addresses.
src-ip Port channel and ECMP load balancing is based on
source IP addresses.

У нас соседство между eSpine2-1 и eLeaf2-1 – это Port-Channel, который балансирует по уникальному совпадению ряда параметров, но VxLAN туннель – это всегда UDP/4789, всегда один и тот же Source IP и один и тот же Destination IP – тут нечего балансировать в рамках одной и той же пары коммутаторов Leaf.

Конечно, за счет того, что на коммутатор будут прилетать пакеты от разных коммутаторов Leaf (то есть разные Source IP в VxLAN пакете), будет какая-то балансировка, но, если вдруг основной трафик будет между 2-мя коммутаторами, то один канал будет загружен больше другого.
Итого:
Port-Channel + BFD = зло (если не поддерживается производителем, ждем поддержку от Eltex)
Port-Channel для балансировки между коммутаторами не используем
BGP AS должна быть одна (iBGP)
Всё выглядит не так сложно, и часть этой заслуги – отсутствие лишней конфигурации, которую Eltex уже настроил за нас (как, например, Ingress replication).
Система управления ECCM
И, маленький бонус, который заслуживает отдельной статьи – система управления ECCM. Мы попробуем завести наши коммутаторы в ECCM в режиме brownfield, а затем попробуем снести полностью конфигурацию и развернуть то же самое в режиме greenfield. Ниже немного скриншотов из ECCM для затравки. А подробнее ECCM разберу в отдельной статье.




Выводы
Попробую свести все свои впечатления об оборудовании и ПО ELTEX в емкий вывод. Оборудование
Монтаж вентиляторов и блоков питания легкий (но, лучше иметь шуруповерт), в стойке коммутаторы держатся уверенно. Лайк.
Производительность. Это настолько большая тема для обсуждения, что я решил вынести ее в отдельную статью, но, небольшой спойлер, там тоже всё хорошо.
Программное обеспечение
Очень просто настраивать оборудование тем, кто уже имел дело с Cisco-like консолями. Вся настройка интуитивна и понятна, команды максимально близки к формату, к которому мы так привыкли за годы эксплуатации буржуазного оборудования. Лайк.
Конфигурация out-of-the-box (show run) пустая и не содержит избыточных команд со значениями по умолчанию. Непривычно, но со временем не обращаешь на это внимания. Пусть будет.
Включение нового функционала, применение лицензий и изменение ряда параметров, требующих перезагрузки. Хотелось бы, конечно, чтобы данные процессы были как-то изменены и не требовали полной перезагрузки устройства. С другой стороны, подобные настройки выполняются на начальном этапе, и можно заранее всё настроить и перезагрузиться 1 раз. Но чувство легкого дискомфорта всё равно есть. Надеюсь, что в будущем разработчики смогут добиться того, чтобы все изменения выполнялись без полной перезагрузки.
Поддержка вендора
Гарантированный и стопроцентный лайк. Быстрая реакция, помощь в поиске проблем и при настройке оборудования.
Обновление ПО
Все мы знаем волшебную формулу «в новой версии ПО исправлено 80% проблем и добавлено 20% новых проблем» ?. Я отношусь к этому нормально, так как все мы люди-человеки, ошибки имеют место быть. Но вот что важно – это то, как к ним относится вендор. В случае с Eltex, все ошибки анализируются и исправляются, потому что для российско��о производителя сетевого оборудования сейчас очень важно, чтобы мы, инженеры, поверили в него. Так что исправление ошибок и добавление нового функционала – задача, которую Eltex непрерывно исполняет на самом высоком уровне.
Документация
Тут, честно сказать, приятно удивлен. Eltex, помимо всяких “User Manual” еще разработал документацию типа “IP Fabric design guide”, что очень, очень, очень помогает во время первой настройки фабрики (а чем, по вашему мнению, я тут руководствовался при написании этой статьи?). Это очень хорошая практика, которая есть далеко не у всех производителей сетевого оборудования. Хотелось бы пожелать развивать эту историю, потому что нам, инженерам, такие документы очень нужны.
Вердикт
Ну что тут сказать… Дайте две! Я готов использовать оборудование Eltex в ЦОД и считаю, что оно имеет зрелую стадию развития. А что до мелких проблем, то, при поддержке вендора, как говорил кот Леопольд: «Неприятность эту мы переживем!».
Конец
Ну что, вроде ничего не забыл, про всё поговорили… Так что…

И обещанная конфигурация:
eSpine 1-1
eSpine1-1#sh run
ip vrf MGMT
exit
!
!
vlan database
vlan 2
exit
!
ip maximum-paths 32
!
hostname eSpine1-1
!
logging host 172.23.84.80 vrf MGMT
logging origin-id hostname
logging source-interface oob vrf MGMT
!
username croc password encrypted 5d18ada9ed1a641f5df43c9c48f6069ce25cdfd68a38c5fea5e9b3c3993e4b216a4c14ff6777044700cc42095b20bdb8b3bdb0ba277e93f252cd489e645d9502 privilege 15 encryption-algorithm sha-512
!
ip ssh server vrf MGMT
!
snmp-server server
snmp-server engineID local 800089c1039054b7825380
encrypted snmp-server community qFiDC/J5H872AchiufYPZN8DRuLwUa5Mh4avgWaNg/M= ro view Default vrf MGMT
encrypted snmp-server host 172.23.84.80 traps version 2c qFiDC/J5H872AchiufYPZN8DRuLwUa5Mh4avgWaNg/M= vrf MGMT
snmp-server group ECCM v3 priv
encrypted snmp-server user snmp-user ECCM v3 auth md5 y+SIfENWL1MT2QrQSJcpnTa4z2oZBGR3g/6UkS8dolg= priv-protocol aes-128-cfb priv y+SIfENWL1MT2QrQSJcpnTa4z2oZBGR3g/6UkS8dolg= vrf MGMT
snmp-server source-interface traps oob vrf MGMT
!
clock timezone MSK +3
!
interface HundredGigabitEthernet1/0/1
ip address 10.1.1.1 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/2
ip address 10.1.1.5 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/32
ip address 10.1.255.1 255.255.255.252
exit
!
interface vlan 1
no ip address dhcp
shutdown
exit
!
interface oob
ip vrf MGMT
ip address 172.23.84.11 255.255.255.0
no ip address dhcp
exit
!
interface loopback1
ip address 10.1.0.11 255.255.255.255
exit
!
!
!
ip default-gateway 172.23.84.1 vrf MGMT
!
router ospf 100
network 10.1.0.11 area 0.0.0.0
network 10.1.1.1 area 0.0.0.0
network 10.1.1.5 area 0.0.0.0
network 10.1.255.1 area 0.0.0.0
router-id 10.1.0.11
exit
!
router bgp 65001
bgp router-id 10.1.0.11
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
!
peer-group RRC
remote-as 65001
update-source loopback 1
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.13
peer-group RRC
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.14
peer-group RRC
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.255.2
remote-as 65001
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
exit
!
!
end
eSpine 1-2
eSpine1-2#sh run
ip vrf MGMT
exit
!
!
ip maximum-paths 32
!
hostname eSpine1-2
!
username croc password encrypted 5d18ada9ed1a641f5df43c9c48f6069ce25cdfd68a38c5fea5e9b3c3993e4b216a4c14ff6777044700cc42095b20bdb8b3bdb0ba277e93f252cd489e645d9502 privilege 15 encryption-algorithm sha-512
!
ip ssh server vrf MGMT
!
interface HundredGigabitEthernet1/0/1
ip address 10.1.1.9 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/2
ip address 10.1.1.13 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/32
ip address 10.1.255.5 255.255.255.252
exit
!
interface vlan 1
no ip address dhcp
exit
!
interface oob
ip vrf MGMT
ip address 172.23.84.12 255.255.255.0
no ip address dhcp
exit
!
interface loopback1
ip address 10.1.0.12 255.255.255.255
exit
!
!
!
ip default-gateway 172.23.84.1 vrf MGMT
!
router ospf 100
network 10.1.0.12 area 0.0.0.0
network 10.1.1.9 area 0.0.0.0
network 10.1.1.13 area 0.0.0.0
network 10.1.255.5 area 0.0.0.0
router-id 10.1.0.12
exit
!
router bgp 65001
bgp router-id 10.1.0.12
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
!
peer-group RRC
remote-as 65001
update-source loopback 1
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.13
peer-group RRC
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.14
peer-group RRC
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.255.6
remote-as 65001
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
exit
!
!
end
eSpine 2-1
eSpine2-1#sh run
ip vrf MGMT
exit
!
ip vrf A
exit
!
!
vlan database
vlan 10-11
exit
!
ip maximum-paths 32
!
anycast-gateway mac-address 12:34:56:78:ab:cd
!
hostname eSpine2-1
!
username croc password encrypted 5d18ada9ed1a641f5df43c9c48f6069ce25cdfd68a38c5fea5e9b3c3993e4b216a4c14ff6777044700cc42095b20bdb8b3bdb0ba277e93f252cd489e645d9502 privilege 15 encryption-algorithm sha-512
!
ip ssh server vrf MGMT
!
interface HundredGigabitEthernet1/0/1
channel-group 1 mode auto
exit
!
interface HundredGigabitEthernet1/0/2
channel-group 1 mode auto
exit
!
interface HundredGigabitEthernet1/0/3
ip address 10.2.1.5 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/4
ip address 10.2.1.9 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/31
ip address 10.1.255.2 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/32
ip address 10.1.255.6 255.255.255.252
exit
!
interface Port-Channel1
ip address 10.2.1.1 255.255.255.252
exit
!
interface vlan 1
no ip address dhcp
exit
!
interface vlan 10
name CustomerA-1
ip vrf A
ip address 10.1.10.1 255.255.255.0
exit
!
interface vlan 11
name CustomerA-2
ip vrf A
ip address 10.1.11.1 255.255.255.0
exit
!
interface oob
ip vrf MGMT
ip address 172.23.84.15 255.255.255.0
no ip address dhcp
exit
!
interface loopback1
ip address 10.1.0.15 255.255.255.255
exit
!
!
!
ip default-gateway 172.23.84.1 vrf MGMT
!
!
router ospf 100
network 10.1.0.15 area 0.0.0.0
network 10.1.255.2 area 0.0.0.0
network 10.1.255.6 area 0.0.0.0
network 10.2.1.1 area 0.0.0.0
network 10.2.1.5 area 0.0.0.0
network 10.2.1.9 area 0.0.0.0
router-id 10.1.0.15
exit
!
router bgp 65001
bgp router-id 10.1.0.15
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
!
peer-group RRC
remote-as 65001
update-source loopback 1
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
peer-group RRC_BFD
remote-as 65001
update-source loopback 1
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.16
peer-group RRC
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.17
peer-group RRC_BFD
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.255.1
remote-as 65001
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.255.5
remote-as 65001
fall-over bfd
route-reflector-client
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
exit
!
!
end
eLeaf 1-1
eLeaf1-1#sh run
ip vrf MGMT
exit
!
ip vrf A
vni 30000
route-target both 1.2.3.4:3000
exit
!
ip vrf B
vni 30001
route-target both 1.2.3.4:3001
exit
!
!
vlan database
vlan 10-11,20,3000-3001
exit
!
vxlan VLAN10
vni 20010
arp-suppression
vlan 10
route-target both 10.1.10.0:10
exit
!
vxlan VLAN11
vni 20011
arp-suppression
vlan 11
route-target both 10.1.11.0:11
exit
!
vxlan VLAN20
vni 20020
arp-suppression
vlan 20
route-target both 10.1.20.0:20
exit
!
vxlan VRF_A
vni 30000 ip-routing
vlan 3000
exit
!
vxlan VRF_B
vni 30001 ip-routing
vlan 3001
exit
!
!
ip maximum-paths 32
!
anycast-gateway mac-address 12:34:56:78:ab:cd
!
hostname eLeaf1-1
!
logging host 172.23.84.80 vrf MGMT
logging origin-id hostname
logging source-interface oob vrf MGMT
!
username croc password encrypted 5d18ada9ed1a641f5df43c9c48f6069ce25cdfd68a38c5fea5e9b3c3993e4b216a4c14ff6777044700cc42095b20bdb8b3bdb0ba277e93f252cd489e645d9502 privilege 15 encryption-algorithm sha-512
!
ip ssh server vrf MGMT
!
snmp-server server
snmp-server engineID local 800089c1039054b74e5b00
snmp-server view iso iso included
encrypted snmp-server host 172.23.84.80 version 3 priv hXT0cGv3GYVLcHVklQxGT7ozAKWFDYa2is4ZCTyVvKE= vrf MGMT
snmp-server group ECCM v3 priv read iso
encrypted snmp-server user snmp-user ECCM v3 auth md5 y+SIfENWL1MT2QrQSJcpnTa4z2oZBGR3g/6UkS8dolg= priv-protocol aes-128-cfb priv y+SIfENWL1MT2QrQSJcpnTa4z2oZBGR3g/6UkS8dolg= vrf MGMT
snmp-server source-interface traps oob vrf MGMT
!
clock timezone MSK +3
!
interface TwentyFiveGigaEthernet1/0/1
speed 1000
switchport access vlan 10
exit
!
interface HundredGigabitEthernet1/0/1
channel-group 1 mode auto
fec cl91
exit
!
interface HundredGigabitEthernet1/0/5
ip address 10.1.1.2 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/6
ip address 10.1.1.10 255.255.255.252
exit
!
interface Port-Channel1
switchport mode trunk
switchport trunk allowed vlan add 10-11,20
ethernet-segment 1
system-mac 55:55:55:55:00:01
exit
exit
!
interface vlan 10
name CustomerA-1
ip vrf A
ip address 10.1.10.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 11
name CustomerA-2
ip vrf A
ip address 10.1.11.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 20
name CustomerB-1
ip vrf B
ip address 10.1.20.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 3000
name VRF_A
ip vrf A
exit
!
interface vlan 3001
name VRF_B
ip vrf B
exit
!
interface oob
ip vrf MGMT
ip address 172.23.84.13 255.255.255.0
no ip address dhcp
exit
!
interface loopback1
ip address 10.1.0.13 255.255.255.255
exit
!
!
!
ip default-gateway 172.23.84.1 vrf MGMT
!
!
!
router ospf 100
network 10.1.0.13 area 0.0.0.0
network 10.1.1.2 area 0.0.0.0
network 10.1.1.10 area 0.0.0.0
router-id 10.1.0.13
exit
!
router bgp 65001
bgp router-id 10.1.0.13
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
!
peer-group RR
remote-as 65001
update-source loopback 1
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.11
peer-group RR
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.12
peer-group RR
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
vrf A
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
!
vrf B
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
exit
!
!
end
eLeaf 1-2
eLeaf1-2#sh run
ip vrf MGMT
exit
!
ip vrf A
vni 30000
route-target both 1.2.3.4:3000
exit
!
ip vrf B
vni 30001
route-target both 1.2.3.4:3001
exit
!
!
vlan database
vlan 10-11,20,3000-3001
exit
!
vxlan VLAN10
vni 20010
arp-suppression
vlan 10
route-target both 10.1.10.0:10
exit
!
vxlan VLAN11
vni 20011
arp-suppression
vlan 11
route-target both 10.1.11.0:11
exit
!
vxlan VLAN20
vni 20020
arp-suppression
vlan 20
route-target both 10.1.20.0:20
exit
!
vxlan VRF_A
vni 30000 ip-routing
vlan 3000
exit
!
vxlan VRF_B
vni 30001 ip-routing
vlan 3001
exit
!
!
ip maximum-paths 32
!
anycast-gateway mac-address 12:34:56:78:ab:cd
!
hostname eLeaf1-2
!
username croc password encrypted 5d18ada9ed1a641f5df43c9c48f6069ce25cdfd68a38c5fea5e9b3c3993e4b216a4c14ff6777044700cc42095b20bdb8b3bdb0ba277e93f252cd489e645d9502 privilege 15 encryption-algorithm sha-512
!
ip ssh server vrf MGMT
!
interface HundredGigabitEthernet1/0/1
channel-group 1 mode auto
fec cl91
exit
!
interface HundredGigabitEthernet1/0/5
ip address 10.1.1.6 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/6
ip address 10.1.1.14 255.255.255.252
exit
!
interface Port-Channel1
switchport mode trunk
switchport trunk allowed vlan add 10-11,20
ethernet-segment 1
system-mac 55:55:55:55:00:01
exit
exit
!
interface vlan 10
name CustomerA-1
ip vrf A
ip address 10.1.10.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 11
name CustomerA-2
ip vrf A
ip address 10.1.11.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 20
name CustomerB-1
ip vrf B
ip address 10.1.20.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 3000
name VRF_A
ip vrf A
exit
!
interface vlan 3001
name VRF_B
ip vrf B
exit
!
interface oob
ip vrf MGMT
ip address 172.23.84.14 255.255.255.0
no ip address dhcp
exit
!
interface loopback1
ip address 10.1.0.14 255.255.255.255
exit
!
!
!
ip default-gateway 172.23.84.1 vrf MGMT
!
!
!
router ospf 100
network 10.1.0.14 area 0.0.0.0
network 10.1.1.6 area 0.0.0.0
network 10.1.1.14 area 0.0.0.0
router-id 10.1.0.14
exit
!
router bgp 65001
bgp router-id 10.1.0.14
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
!
peer-group RR
remote-as 65001
update-source loopback 1
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.11
peer-group RR
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
neighbor 10.1.0.12
peer-group RR
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
vrf A
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
!
vrf B
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
exit
!
!
end
eLeaf 2-1
eLeaf2-1#sh run
ip vrf MGMT
exit
!
ip vrf A
vni 30000
route-target both 1.2.3.4:3000
exit
!
ip vrf B
vni 30001
route-target both 1.2.3.4:3001
exit
!
!
vlan database
vlan 10-11,20,3000-3001
exit
!
vxlan VLAN10
vni 20010
arp-suppression
vlan 10
route-target both 10.1.10.0:10
exit
!
vxlan VLAN11
vni 20011
arp-suppression
vlan 11
route-target both 10.1.11.0:11
exit
!
vxlan VRF_A
vni 30000 ip-routing
vlan 3000
exit
!
vxlan VLAN20
vni 20020
arp-suppression
vlan 20
route-target both 10.1.20.0:20
exit
!
vxlan VRF_B
vni 30001 ip-routing
vlan 3001
exit
!
!
ip maximum-paths 32
!
anycast-gateway mac-address 12:34:56:78:ab:cd
!
hostname eLeaf2-1
!
username croc password encrypted 5d18ada9ed1a641f5df43c9c48f6069ce25cdfd68a38c5fea5e9b3c3993e4b216a4c14ff6777044700cc42095b20bdb8b3bdb0ba277e93f252cd489e645d9502 privilege 15 encryption-algorithm sha-512
!
ip ssh server vrf MGMT
!
interface TwentyFiveGigaEthernet1/0/1
speed 1000
switchport access vlan 11
exit
!
interface HundredGigabitEthernet1/0/1
switchport mode trunk
switchport trunk allowed vlan add 10-11
fec cl91
exit
!
interface HundredGigabitEthernet1/0/2
switchport access vlan 20
fec cl91
exit
!
interface HundredGigabitEthernet1/0/5
channel-group 1 mode auto
exit
!
interface HundredGigabitEthernet1/0/6
channel-group 1 mode auto
exit
!
interface Port-Channel1
ip address 10.2.1.2 255.255.255.252
exit
!
interface vlan 10
name CustomerA-1
ip vrf A
ip address 10.1.10.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 11
name CustomerA-2
ip vrf A
ip address 10.1.11.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 20
name CustomerB-1
ip vrf B
ip address 10.1.20.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 3000
name VRF_A
ip vrf A
exit
!
interface vlan 3001
name VRF_B
ip vrf B
exit
!
interface oob
ip vrf MGMT
ip address 172.23.84.16 255.255.255.0
no ip address dhcp
exit
!
interface loopback1
ip address 10.1.0.16 255.255.255.255
exit
!
!
!
ip default-gateway 172.23.84.1 vrf MGMT
!
!
!
router ospf 100
network 10.1.0.16 area 0.0.0.0
network 10.2.1.2 area 0.0.0.0
router-id 10.1.0.16
exit
!
router bgp 65001
bgp router-id 10.1.0.16
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
!
peer-group RR
remote-as 65001
update-source loopback 1
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.15
peer-group RR
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
vrf A
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
!
vrf B
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
exit
!
!
end
eLeaf 2-2
eLeaf2-2#sh run
ip vrf MGMT
exit
!
ip vrf B
vni 30001
route-target both 1.2.3.4:3001
exit
!
!
vlan database
vlan 20,3001
exit
!
vxlan VLAN20
vni 20020
arp-suppression
vlan 20
route-target both 10.1.20.0:20
exit
!
vxlan VRF_B
vni 30001 ip-routing
vlan 3001
exit
!
!
ip maximum-paths 32
!
anycast-gateway mac-address 12:34:56:78:ab:cd
!
hostname eLeaf2-2
!
username croc password encrypted 5d18ada9ed1a641f5df43c9c48f6069ce25cdfd68a38c5fea5e9b3c3993e4b216a4c14ff6777044700cc42095b20bdb8b3bdb0ba277e93f252cd489e645d9502 privilege 15 encryption-algorithm sha-512
!
ip ssh server vrf MGMT
!
interface HundredGigabitEthernet1/0/1
switchport access vlan 20
fec cl91
exit
!
interface HundredGigabitEthernet1/0/5
ip address 10.2.1.6 255.255.255.252
exit
!
interface HundredGigabitEthernet1/0/6
ip address 10.2.1.10 255.255.255.252
exit
!
interface vlan 20
name CustomerB-1
ip vrf B
ip address 10.1.20.1 255.255.255.0
anycast-gateway
exit
!
interface vlan 3001
name VRF_B
ip vrf B
exit
!
interface oob
ip vrf MGMT
ip address 172.23.84.17 255.255.255.0
no ip address dhcp
exit
!
interface loopback1
ip address 10.1.0.17 255.255.255.255
exit
!
!
!
ip default-gateway 172.23.84.1 vrf MGMT
!
!
router ospf 100
network 10.1.0.17 area 0.0.0.0
network 10.2.1.6 area 0.0.0.0
network 10.2.1.10 area 0.0.0.0
router-id 10.1.0.17
exit
!
router bgp 65001
bgp router-id 10.1.0.17
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
!
peer-group RR
remote-as 65001
update-source loopback 1
fall-over bfd
soft-reconfiguration inbound
password encrypted sVzWTDY7HEH4Px3EEVFbWz5V4aJC5LRc7z4HDqJ8Gjo=
exit
!
neighbor 10.1.0.15
peer-group RR
address-family ipv4 unicast
exit
!
address-family l2vpn evpn
exit
exit
!
vrf B
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
redistribute connected
exit
exit
exit
!
!
end
lesha-filimonov
Фанатично написанная статья с детективным сюжетом! Спасибо большое за вашу работу!
EAlykhov Автор
Спасибо!