Русский
Русский
English
Статистика
Реклама

Vlan

Из песочницы Из ничего к ЦОД с VXLANEVPN или как готовить Cumulus Linux. Часть 1

01.11.2020 20:22:23 | Автор: admin
В последние полгода удалось поработать над большим и интересным проектом, в котором было все: от монтажа оборудования до создания единого VXLAN/EVPN домена в 4-х ЦОД. Т.к. было получено много опыта и набито много шишек в процессе, решил что написать несколько статей на эту тему будет наилучшим решением. Первую часть я решил сделать более общей и вводной. Целевой дизайн фабрики будет раскрыт в следующей части.



Знакомство с Cumulus Linux. Установка оборудования и первоначальная настройка


Вводные к началу работ были следующие:

  1. Закуплено оборудование
  2. Арендованы стойки
  3. Проложены линии к старым ЦОД

Первой порцией оборудования, которое необходимо было поставить, стали 4 х Mellanox SN2410 с предустановленным на них Cumulus Linux. На первых порах еще не было понимания как все должно будет выглядеть (сложится оно только к этапу внедрения VXLAN/EVPN), следовательно, мы решили поднять их как простые L3 коммутаторы с CLAG (Аналог MLAG от Cumulus). Ранее опыта работы с Cumulus ни у меня, ни у коллег сильно не было, так что все в какой-то степени было в новинку, дальше как раз про это.

Нет лицензии нет портов


По умолчанию при включении устройства вам доступны только 2 порта console и eth0(он же Management port). Чтобы разблокировать 25G/100G порты нужно добавить лицензию. И сразу становится понятно, что Linux в названии ПО не просто так, т.к. после установки лицензии надо перезагрузить демона switchd, через systemctl restart switchd.service (по факту отсутствие лицензии как раз и не дает запуститься данному демону).

Следующее, что сразу заставит вас вспомнить что это все-таки Linux, будет обновление устройства используя apt-get upgrade, как в обычном Ubuntu, но обновиться так можно не всегда. При переходе между релизами, например, с 3.1.1 на 4.1.1, нужно устанавливать новый образ, что влечет за собой сброс конфиги в дефолт. Но спасает то, что в конфигурации по умолчанию на Management интерфейсе включен DHCP, что позволяет вернуть управление.

Установка лицензии
cumulus@Switch1:~$ sudo cl-license -i
balagan@telecom.ru|123456789qwerty
^+d

cumulus@Switch1:~$ sudo systemctl restart switchd.service


P.S. Дефолтная конфигурация eth0(mgmt) интерфейса:
cumulus@Switch1:~$ net show configuration commands | grep eth
net add interface eth0 ip address dhcp
net add interface eth0 vrf mgmt


Система commitов


Как человек, много работавший с Juniper, для меня такие вещи как rollbackи, commit confirm и т.д. были не в новинку, но наступить на пару граблей удалось.

Первое, на что я напоролся, была нумерация rollback у cumulus, в силу привычки rollback 1 == последняя рабочая конфигурация. Я с огромной уверенностью вбиваю данную команду, чтобы откатить последние изменения. Но каково было мое удивление, когда железка просто пропала по управлению, и какое-то время я не понимал, что произошло. Потом, прочитав доку от cumulus, стало понятно, что случилось: вбив команду net rollback 1 вместо отката на последнюю конфигурацию, я откатился на ПЕРВУЮ конфигурацию устройства.(И опять же, от фиаско спас DHCP в дефолтной конфигурации)

commit history
cumulus@Switch1:mgmt:~$ net show commit history
# Date Description
2 2020-06-30 13:08:02 nclu net commit (user cumulus)
208 2020-10-17 00:42:11 nclu net commit (user cumulus)
210 2020-10-17 01:13:45 nclu net commit (user cumulus)
212 2020-10-17 01:16:35 nclu net commit (user cumulus)
214 2020-10-17 01:17:24 nclu net commit (user cumulus)
216 2020-10-17 01:24:44 nclu net commit (user cumulus)
218 2020-10-17 12:12:05 nclu net commit (user cumulus)

cumulus@Switch1:mgmt:~$


Второе, с чем пришлось столкнуться, был алгоритм работы commit confirm: в отличие от привычного нам commit confirm 10, где в течении 10 минут нужно еще раз прописать commit, у Cumulus было свое виденье данной фичи. Ваше подтверждение commit confirm это простое нажатие Enter после ввода команды, что может сыграть с вами злую шутку, если связность потеряется не сразу после commit.

net commit confirm 10
cumulus@Switch1:mgmt:~$ net commit confirm 10
/etc/network/interfaces 2020-10-17 12:12:08.603955710 +0300
+++ /run/nclu/ifupdown2/interfaces.tmp 2020-10-29 19:02:33.296628366 +0300
@@ -204,20 +204,21 @@

auto swp49
iface swp49
+ alias Test
link-autoneg on

net add/del commands since the last net commit
================================================

User Timestamp Command
cumulus 2020-10-29 19:02:01.649905 net add interface swp49 alias Test

Press ENTER to confirm connectivity.


Первая топология


Следующим этапом была проработка логики работы коммутаторов между собой, на данном этапе железо только ставилось и тестировалось, ни о каких целевых схемах речи еще не шло. Но одним из условий было, что сервера подключенные к разным MLAG парам должны быть в одном L2 домене. Делать одну из пар простым L2 не хотелось, в связи с чем было решено поднять L3 связность поверх SVI, для маршрутизации был выбран OSPF, т.к. он уже использовался в старых ЦОД, что упрощало соединение инфраструктуры на следующем этапе.



На данной схеме отображена схема физики + разделение устройств по парам, все линки на схеме работают в режиме Trunk.



Как и говорилось, вся L3 связность сделана через SVI, следовательно, IP адрес в каждом Vlan есть только у 2 устройств из 4, что позволяет сделать своего рода L3 p2p связку.

Основные команды для заинтересованных


Bond(Port-channel)+CLAG(MLAG)
#Используем vrf mgmt согласно всем best-practice
net add interface peerlink.4094 clag backup-ip Х.Х.Х.Х vrf mgmt
#Чем меньше адресов тем лучше(можно вместо linklocal использовать IP адреса)
net add interface peerlink.4094 clag peer-ip linklocal
#Берем из пула указанного в документации 44:38:39:ff:00:00-44:38:39:ff:ff:ff
net add interface peerlink.4094 clag sys-mac Х.X.X.X.X
#Cоздание Bond#Добавляем интерфейсы которые нужно агрегировать
net add bond bond-to-sc bond slaves swp1,swp2
#Выбираем LACP
net add bond bond-to-sc bond mode 802.3ad
#Подаем VLAN в Bond
net add bond bond-to-sc bridge vids 42-43
#Присваиваем уникальный ID
net add bond bond-to-sc clag id 12
P.S. Всю указанную конфигурацию можно реализовать через /etc/network/interfaces

Проверка работоспособности

cumulus@Switch1:mgmt:~$ net show clag
The peer is alive
Our Priority, ID, and Role: 32768 1c:34:da:a5:6a:10 secondary
Peer Priority, ID, and Role: 100 b8:59:9f:70:0e:50 primary
Peer Interface and IP: peerlink.4094 fe80::ba59:9fff:fe70:e50 (linklocal)
VxLAN Anycast IP: 10.223.250.9
Backup IP: 10.1.254.91 vrf mgmt (active)
System MAC: 44:39:39:aa:40:97


Trunk/Access port mode
#Создаем интерфейс Vlan
net add vlan 21 ip address 100.64.232.9/30
#Назначаем ID
net add vlan 21 vlan-id 21
#Подаем в L2 Bridge
net add vlan 21 vlan-raw-device bridge
P.S. На данном этапе VLAN уже будет подан на Bridge порты
#Trunk порт (все bridge vlan)
net add bridge bridge ports swp49
#Trunk порт (ограниченный пул VLAN)
net add interface swp51-52 bridge vids 510-511
#Access порт
net add interface swp1 bridge access 21
P.S. Всю указанную конфигурацию можно реализовать через /etc/network/interfaces

OSPF+Static
#Static route для mgmt
net add routing route 0.0.0.0/0 10.1.255.1 vrf mgmt
#OSPF с включением по принадлежности к Network
net add ospf network 0.0.0.0 area 0.0.0.0
#OSPF на определенном интерфейсе
net add interface lo ospf area 0.0.0.0
P.S. На Cumulus может быть только один Loopback интерфейс
#OSPF редистрибьюции
net add ospf redistribute connected
P.S. Данный функционал так же можно конфигурировать через vtysh(c Cisco like синтаксисом), т.к. в Cumulus используется FRR

Заключение


Надеюсь, кому-нибудь данная статья покажется интересной. Хотелось бы увидеть feedback: что добавить, а что совсем лишнее. В следующей статье уже перейдем к самому интересному к дизайну целевой сети и настройке VXLAN/EVPN. И в будущем возможна статья по автоматизации VXLAN/EVPN средствами Python.
Подробнее..

Linux Experiments LAB

22.12.2020 18:11:09 | Автор: admin

Будущих студентов курса "Administrator Linux.Basic" и всех интересующихся приглашаем на открытый урок по теме "Bash. Написание простых скриптов".

Автор статьи: эксперт OTUS - Александр Колесников.



Цель этой статьи показать, как можно настроить на обычном ноутбуке стенд, который может помочь в изучении различных подсистем любой операционной системы. Целью этой статьи станет операционная система Linux, но на этом же стенде могут быть развернуты любые операционные системы. В статье основной фокус будет сделан на использование Linux для работы с сетевыми интерфейсами для доступа в сети, где используется VLAN.

Описание стенда

Стенд для тестирования подсистем ОС будет состоять из:

  • Средства виртуализации VirtualBox

  • Операционной системы Windows 8

  • Операционной системы Kali Linux (Debian)

  • Виртуальной машины GNS3, которая будет использоваться для эмуляции оборудования для настройки VLAN.

Все используемые инструменты являются свободно распространяемым программным обеспечением, поэтому полностью бесплатны. Для построения сети будем использовать следующую схему:

Настройка стенда

Для нормальной работы GNS3 необходимо использовать VM, которую можно скачать на официальном сайте. Именно на ней будут эмулироваться устройства, которые могут быть развернуты из официальных образов операционных систем устройств, например CISCO. Основные проблемы с конфигурации стенда проводятся в системе GNS3. Следующие этапы стоит произвести перед началом работы:

  1. Открыть Настройки и перейти в раздел Server:

Красным выделены те опции, которые нужно изменить проставить включение сервера и выбрать сетевой интерфейс, который будет использоваться GNS VM. Очень важно, чтобы сервер GNS3 и виртуальная машина была в одной сети. В противном случае, вы не сможете соединить устройства на схеме сети.

2. На вкладке VirtualBox, через опцию new необходимо добавить виртуальные машины, которые будут использоваться для стенда:

3. Необходимо добавить прошивку устройства, найти тестовые прошивки можно в сети. Добавить в интерфейс их можно через раздел IOS Routers.

4. Отключить все виртуальные машины и выбрать опцию Not Attached для сетевого интерфейса.

5. Создаем схему сети, как указано в разделе Описание стенда.

Последующие этапы настройки касаются настройки операционных систем и устройств, которые используются в сети. Для начала этого процесса необходимо запустить схему. Сделать это можно из меню управления.

Важное замечание: будьте внимательны к тому сколько оперативной памяти вы выделили под каждую виртуальную машину, может случиться так, что не хватит ресурсов. Экстренная перезагрузка может повредить данные.

Для настройки устройств необходимо ввести следующие команды:

Операционная система Windows:

1.Запустить операционную систему

2.Установить через любой удобный интерфейс ip адрес 10.0.20.3

Операционная система Kali Linux:

1.Запустить операционную систему, установить ip адрес 10.0.3.5

EtherSwitch1:

- vlan database

- vlan 20

- exit

- conf t

-(int fa0/0) порт Kali

- no shut

- exit

- int fa0/1

- switchport mode trunk

- no shut

- exit

- exit

-write

EtherSwitch2:

- vlan database

- vlan 20

- exit

- conf t

- int fa0/0 (порт между свичами)

- switchport mode trunk

- no shut

- exit

- int fa0/1(порт для Windows 8)

- switchport mode access

- switchport access vlan 20

- no shut

- exit

- exit

- write

  1. Запустить команду Ping 10.0.20.3 из операционной системы Kali Linux. Необходимый результат показан на снимке ниже:

Почему нет ответа от целевого хоста? Причины как минимум две:

1.Нет маршрута до сети, где находится хост.

2.Сеть использует VLAN, что накладывает специальные условия на разметку трафика. По умолчанию, они не работают для отправляемых данных.

Можно ли отправлять пакеты в соседние VLAN с использованием подсистем, которые есть по умолчанию в операционной системе Linux, в данном случае Debian? Спойлер можно.

Эксперимент с сетевыми устройствами

Для дальнейшего проведения тестирования воспользуемся инструментом, который называется yersinia. Базово, этот инструмент используется для работы с протоколами сети. Его используют для тестирования неверной конфигурации устройств. Мы воспользуемся его функционалом по отправке пакетов с дополнительными тегами для VLAN сетей. Для его запуска придется установить его в операционную систему Kali Linux. Для установки достаточно набрать в терминале:

apt-get update && apt-get install yersinia

Наша импровизированная сеть использует в качестве протокола для VLAN - 802.1q. Этот протокол предполагает, что в заголовке пакетов будет указан специальный Тег, который будет использоваться для маршрутизации. Попробуем имитировать поведение протокола, если бы мы были клиентом целевой виртуальной сети. Для этого запустим команду:

yersinia dot1q -attack 1 -source 08:00:27:1f:30:76 -dest FF:FF:FF:FF:FF:FF -vlan1 0001 -priority1 07 -cfi1 0 -l2proto1 800 -vlan2 0020 -priority2 07 -cfi2 0 -l2proto2 800 -ipsource 10.0.20.6 -ipdest 10.0.20.3 -ipproto 1 -payload LINUXOTUS -interface eth0

К сожалению, выловить это сообщение мы не сможем на оконечном хосте. Для этого необходимо прослушать трафик между хостами в сети. Это очень просто сделать, если вызвать контекстное меню в GNS3, кликнув на соединение, вот так:

В результате выбора откроется WireShark:

И можно будет увидеть весь трафик на любом отрезке сети. Кстати, вот и наш payload:

Изначально при конфигурации сети была допущена ошибка, которая позволяет отправлять данные всех сетей через Native VLAN. Значит можно попробовать отправить данные стандартными средствами ОС. Для этого выполним следующие команды в терминале:

modprobe 8021q Загрузить модуль ядра для работы с инкапсуляцией

vconfig add eth0 1 добавить виртуальный интерфейс

ifconfig eth0.1 up

vconfig add eth0.1 20 добавить еще один виртуальный интерфейс

ifconfig eth0.1.20 10.0.20.6 netmask 255.255.255.0 up

ip route add 10.0.20.0/24 via 10.0.20.6 dev eth0.1.20 сконфигурировать маршрут до целевой сети

arp -s 10.0.20.3 FF:FF:FF:FF:FF:FF -i eth0.1.20 небольшой лайфхак, чтобы ОС посчитала, что у нее есть информация об удаленной машине.

Стоит упомянуть, что подобное взаимодействие в реальных условиях возможно только в UDP формате. Для TCP нужно будет угадывать идентификаторы, которые используются для проведения handshake процедуры. Попробуем провести отправку чего-то осмысленного на целевой хост. Для этого на хосте развернем netcat:

А с машины Kali Linux посредством инструмента для работы с сетевыми пакетами Scapy. Отправим UDP сообщение: LINUXOTUSNC:

Просмотрим данные, которые передавались в трафике:

Что в итоге отобразилось на целевой машине:

В результате мы смогли стандартными инструментами операционной системы наладить сетевое взаимодействие между хостами, которые были разделены VLAN. Эксперимент показал, что операционная система Linux обладает поразительной гибкостью прямо из коробки и дает возможность работать с особенностями сетевых протоколов используя только несколько команд. Таким функционалом может похвастаться далеко не все операционные системы, большинству пришлось бы устанавливать дополнительный софт, который скорее всего стоил дополнительных денег.


Узнать подробнее о курсе "Administrator Linux.Basic"

Записаться на открытый урок по теме
"Bash. Написание простых скриптов".

ЗАБРАТЬ СКИДКУ

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru