Конфігурація мережевої операційної системи SONiC — складно чи ні?

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Привіт! Мене звати Лілія, і я QA Automation Engineer у PLVision. До команди приєдналась у вересні 2020-го — подалась на вакансію, що передбачала 3-тижневу інтенсивну підготовку до проєкту. За цей час разом з іншими інженерами я опанувала новий програмний продукт — SONiC (Software for Open Networking in the Cloud). Це найпопулярніша відкрита мережева операційна система у світі, яку розробляє потужна технологічна спільнота під керівництвом Microsoft. SONiC зокрема використовують для управління мережевим обладнанням — комутаторами (світчами) — у дата-центрах Microsoft Azure.

PLVision більше 13 років створює програмні рішення у сферах вбудованих систем та мережевих технологій, а також Інтернету Речей. SONiC є однією з ключових технологій спеціалізації компанії, і рішення на його основі розробляються тут на проєктах для різних замовників.

В Україні про SONiC знають небагато. Отже, як почати практикуватись з цією мережевою ОС? Для цього не потрібно особливих технічних засобів. У цій статті я розповім про свій досвід використання SONiC Virtual Switch і виконання його базової L2/L3 конфігурації крок за кроком, тож ви можете вивчати цей прогресивний мережевий продукт вже зараз.

Як почалась моя історія із SONiC-ом

Минулого року мені пощастило відвідати Linux Future Meetup, який організовувала команда PLVision у Львові. Там я почула про технологічні тренди у сфері комп’ютерних мереж і захопилась ними.

Одним із ключових компонентів сучасної мережевої архітектури є так званий white-box switch (комутатор, або ж світч). Компанії можуть придбати обраний ними пристрій і встановити на нього відкриту мережеву операційну систему. Це стало можливим завдяки дезагрегації, одному з ключових трендів у сучасних мережевих технологіях, коли платформа мережевого пристрою ділиться на окремі незалежні складові — «залізо», ОС та додатки, що дозволяє комбінувати їх на свій розсуд. Такий сучасний дезагрегований підхід зменшує витрати, а також забезпечує гнучкість для майбутніх оновлень програмного забезпечення та розширення його новими функціями.

На початковому етапі SONiC почала розробляти корпорація Microsoft і згодом передала його у Open Compute Project (OCP). Зараз SONiC продовжує розширювати та вдосконалювати спільнота лідерів мережевого ринку: Broadcom, Marvell, Dell, Mellanox (тепер частина NVIDIA), Intel та інші. Це мене надихнуло, і я вирішила почати свій шлях у мережах саме із SONiC.

Тому мене зацікавила SONiC Program, яку організовували у PLVision, і я цілеспрямовано готувалась, щоб потрапити на неї. Це по суті вакансії для C, C++ і QA Automation інженерів, щоправда, з цікавим бонусом. У перші 3 тижні роботи, перед стартом проєкту, досвідчені експерти компанії допомагають новоприбулим прокачатись у Linux, мережах та Python. Таким чином і мене підготували до проєкту. Цей період був складним і насиченим, але водночас цікавим і захоплюючим.

Дата-центр на долоні

Відомо, що для того, щоб вивчити щось нове, важливо здобути не лише теоретичні знання, а й практичний досвід. На щастя, окрім численних апаратних платформ та пристроїв, інтегрованих виробниками мережевого обладнання (OEM/ODM) та чипів (ASIC), SONiC-спільнота розробила свій власний віртуальний світч. Його можна запускати або як Docker контейнер або ж як KVM (Kernel-based Virtual Machine).

SONiC Virtual Switch (VS) активно використовується спільнотою для тестування компонентів SONiC та розробки нових функцій. Важливою складовою компонентою SONiC VS є бібліотека vslib, яка виконується в контексті syncd аплікації. У більшості випадків ця бібліотека лише зберігає конфігураційні дані SAI (Standard Abstraction Interface), що генеруються SONiC для програмування ASIC. У свою чергу, записи мережевого стеку Linux, встановлені SONiC-ом (маршрути, записи ARP таблиці тощо), використовуються для прийняття рішень щодо передачі трафіку. Тобто фактичну передачу трафіку в SONiC VS виконує мережева підсистема Linux.

(SONiC Virtual Switch)

Щоб по-справжньому отримати задоволення від конфігурації операційної системи SONiC, найкраще створити віртуальну топологію, яка емулює простий, але реальний сценарій — такий як, наприклад, топологія дата-центру. Є кілька способів це зробити.

GNS3 (Graphical Network Simulator) — це, мабуть, найвідоміша платформа для емуляції, конфігурування, тестування та усунення несправностей віртуальних та реальних мереж. Також він часто використовується для навчальних цілей. GNS3 дає змогу запускати як невелику топологію, що складається лише з декількох пристроїв, так і топології, які включають багато пристроїв, розміщених на кількох серверах або ж навіть у хмарі. GNS3 — це відкрите програмне забезпечення, яке ви можете завантажити та використовувати безкоштовно — з вихідним кодом, доступним на GitHub.

Щоб почати використовувати мережеву операційну систему SONiC як пристрій GNS3, вам потрібно або збудувати, або ж краще завантажити з Azure Jenkins уже готовий SONiC VS у вигляді архіву.

 wget 
       https://sonic-jenkins.westus2.cloudapp.azure.com/job/vs/job/buildimage-vs-201911/181/artifact/target/sonic-vs.img.gz
gunzip sonic-vs.img.gz     

Як тільки цей крок буде завершено, слід додати SONiC VS як мережевий пристрій в середовищі GNS3.

 wget
       https://raw.githubusercontent.com/Azure/sonic-buildimage/master/platform/vs/sonic-gns3a.sh
/sonic-gns3a.sh -b <path to sonic.img>

Потім імпортуйте пристрій SONiC у GNS3.

Я опустила кроки побудови топології DC (дата-центру), оскільки в Інтернеті доступно багато навчальних матеріалів на цю тему.

Топологія SONiC DC в GNS3

Після завантаження системи, конфігурація SONiC буде здійснена з файлу /etc/sonic/config_db.json та збережена у просторі імен ConfigDB бази даних Redis. Як правило, вміст config_db.json можна розглядати як конфігурацію запуску, тоді як стан ConfigDB — як поточну конфігурацію. Насправді, щоразу, коли ви змінюєте конфігурацію SONiC з CLI, ви змінюєте вміст ConfigDB, який не буде автоматично записано назад у файл config_db.json. Щоб зберегти поточний ConfigDB назад у config_db.json, вам слід запустити команду:

sudo config save -y

Після першого завантаження запустіть вищезгадану команду один раз, а потім видаліть автоматично згенеровані L3 інтерфейси маршрутизатора з /etc/sonic/config_db.json.

Крім того, конфігурація за замовчуванням буде містити ту саму MAC-адресу маршрутизатора для всіх екземплярів SONiC VS. Тому вам необхідно змінити у розділі DEVICE_METADATA відповідну секцію, щоб зробити MAC-адресу унікальною для кожного маршрутизатора в топології. Крім того, у цьому розділі ви також повинні прописати номер локальної автономної системи BGP ASN.

"DEVICE_METADATA": {
        "localhost": {
            "bgp_asn": "64002",
            "default_bgp_status": "up",
            "default_pfcwd_status": "disable",
            "hostname": "sonic",
            "hwsku": "Force10-S6000",
            "mac": "52:54:00:12:34:51",
            "platform": "x86_64-kvm_x86_64-r0",
            "type": "LeafRouter"
        }
    },

Окрім цього, ви повинні змінити IP-адресу Loopback інтерфейсу, щоби гарантувати, що всі маршрутизатори мають унікальні ID:

"LOOPBACK_INTERFACE": {
        "Loopback0": {},
        "Loopback0|10.1.0.2/32": {}
    },

Щоб очистити поточний стан ConfigDB та застосувати конфігурацію з config_db.json (сервіси SONiC будуть перезапущені), виконайте:

sudo config reload -y

Оскільки наша топологія симетрична, і всі комутатори матимуть дуже схожі налаштування, я покроково розповім як налаштувати лише один ToR (top of the rack) світч.

Передача трафіку між пристроями у межах стійки

Розпочнемо з L2 конфігурації. Для цього через SONiC CLI створимо VLAN 100, та додамо до нього порти, які з’єднують наші віртуальні хости, розташовані в одній стійці дата-центру.

config vlan add 100
config vlan member add -u 100 Ethernet12
config vlan member add -u 100 Ethernet16
config vlan member add -u 100 Ethernet20
show vlan brief 

Щоб перевірити конфігурацію VLAN з точки зору Linux (фільтр VLAN), використовуйте команду:

bridge vlan list

Як ви можете бачити, обробка великої кількості VLAN-мереж у віртуальному середовищі більше не вимагає у нас створення десятків VLAN-інтерфейсів та віртуальних світчів Linux. За допомогою VLAN-фільтра можна контролювати всі VLAN-мережі на одному віртуальному світчі. Це новий функціонал, представлений в ядрі Linux 3.8, який у повній мірі використовується і в середовищі SONiC.

Конфігурація за замовчуванням містить запис в ebtables, який блокує ARP-пакети, що пересилаються між L2 інтерфейсами:

ebtables --list

Очікуваний вивід буде:

Bridge chain: FORWARD, entries: 3, policy: ACCEPT
-d BGA -j DROP 
-p ARP -j DROP 
-p 802_1Q --vlan-encap ARP -j DROP 

Щоб увімкнути передачу ARP пакетів, виконайте наступну команду:

           ebtables --delete FORWARD 2

Тепер застосуймо конфігурацію хостів, яка є досить простою:

PC1> ip 10.0.0.11 255.255.255.0 gateway 10.0.0.1
PC2> ip 10.0.0.12 255.255.255.0 gateway 10.0.0.1
PC3> ip 10.0.0.13 255.255.255.0 gateway 10.0.0.1

Ось тепер повинен проходити трафік між пристроями, підключеними до одного світча (трафік у межах стійки). Це можна перевірити, запустивши пінг з одного хоста на інший, який знаходиться в тій самій стійці дата-центру.

Як ви можете бачити в нашій топології, кожен ToR-світч підключений до одного з Leaf-світчів через LAG, що складається з двох портів. Тому налаштуймо це:

config portchannel add PortChannel0001
config portchannel member add PortChannel0001 Ethernet0
config portchannel member add PortChannel0001 Ethernet4
show interfaces portchannel
show interfaces status

Передача трафіку між пристроями у різних стійках

L2 конфігурація ToR-світча тепер завершена, тож перейдемо до L3 конфігурації. Перш за все, створіть на своєму світчі L3 інтерфейси (інтерфейси маршрутизатора або RIF). У цьому випадку необхідно сконфігурувати три типи RIF: порт RIF, LAG RIF та VLAN RIF.

config interface ip add Ethernet8 32.0.0.1/24
config interface ip add PortChannel0001 12.0.0.2/24
config interface ip add Vlan100 10.0.0.1/24
show ip interfaces
show ip route

Далі налаштуйте BGP (Border Gateway Protocol) сесію для динамічної маршрутизації. Перед конфігурацією сусідів збережіть попередні налаштування:

sudo config save -y

Тепер ви можете додавати сусідів у розділ BGP_NEIGHBOR у файлі /etc/sonic/config_db.json:

"BGP_NEIGHBOR": {
        "12.0.0.1": {
            "asn": "64001",
            "holdtime": "180",
            "keepalive": "60",
            "local_addr": "12.0.0.2",
            "name": "Leaf1",
            "nhopself": "0",
            "rrclient": "0"
        },
        "32.0.0.2": {
            "asn": "64003",
            "holdtime": "180",
            "keepalive": "60",
            "local_addr": "32.0.0.1",
            "name": "Leaf2",
            "nhopself": "0",
            "rrclient": "0"
        }

}

Потім застосуйте ці зміни, виконавши:

sudo config reload -y
show ip bgp summary

Після завершення цього кроку, зайдіть в оболонку vtysh FRR та увімкніть анонсування під’єднаних мереж (на даний момент SONiC не містить власної команди CLI для цього налаштування):

sonic# configure terminal
sonic(config)# router bgp 64002
sonic(config-router)# address-family ipv4 unicast  
sonic(config-router-af)# redistribute connected
sonic(config-router)# end
sonic#write

Тепер трафік повинен проходити між пристроями, підключеними до різних світчів (розташованими у різних стійках). Це можна перевірити, запустивши пінг з одного хоста на інший хост, розташований в іншій стійці дата-центру.

Підсумок

Незважаючи на те, що SONiC Virtual Switch має суттєві обмеження в продуктивності та переліку підтримуваних функцій, він все ж чудово підходить для того, щоб розпочати вивчення архітектури та конфігурації SONiC на практиці. Додавши SONiC VS як пристрій GNS3, ми отримуємо ще більшу гнучкість для емуляції реальних мережевих сценаріїв на одному ПК.

Вивчайте мережеві інновації, адже за ними майбутнє!

👍НравитсяПонравилось0
В избранноеВ избранном2
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Добрий день, я хотів би запитати, чи я вводжу ebtable-list, і я виявляю, що немає 802.1Q, куди я можу сам його додати?

В Україні про SONiC знають небагато. Отже, як почати практикуватись з цією мережевою ОС?

А навіщо? :)

Цікаво, дякую!

Я так понял pfSense уже не в моде...

Подписаться на комментарии