Розширення портів маршрутизатора за допомогою керованого комутатора з VLAN
Попередні знання
Дивіться документацію про комутатори та мережеву документацію.
Проблематика
У вас є потужний пристрій, на якому працює OpenWrt. Потужний тут означає: пристрій, здатний з великим запасом обробляти кількість мережевих пакетів, що створюються вашими діями. Наприклад, ви створюєте потік у 50 Мбіт, а пристрій може обробляти до 800 Мбіт.
Проблема: у вас кілька підключень до WAN (можливо, через mwan3), або кілька внутрішніх підключень з будь-яких причин, але пристрою не вистачає Ethernet-портів.
Ви можете розширити кількість Ethernet-портів за допомогою керованого комутатора (що передбачає наявність деякого бюджету/ресурсів, і ви перебуваєте у домашньому офісі або невеликому офісі).
Налаштування керованого комутатора з VLAN
Технологія, яка дозволяє пристрою на базі OpenWrt розширюватися в плані портів, — це VLAN.
Примітки
- Більшість пристроїв за замовчуванням використовують лише одну VLAN (зазвичай з ідентифікатором 1). Наступні інструкції передбачають саме такий випадок. Перед продовженням переконайтеся у цьому.
- Ідентифікатори VLAN відповідають віртуальним інтерфейсам, які показує ifconfig. Наприклад, VLAN з ID 3 відображатиметься як ethX.3 (де X — ваш фізичний інтерфейс, наприклад eth0).
- Ідентифікатори VLAN мають бути однаковими на всіх мережевих пристроях.
- Порт може мати три стани: Off (не належить до VLAN), Untagged (коли належить до основної VLAN або до декількох VLAN), Tagged (коли належить до двох або більше VLAN).
- Для багатьох комутаторів порт, який належить до кількох VLAN, повинен бути позначений як Tagged у кожній з них. Перевірте, чи підтримує ваше обладнання змішування Tagged/Untagged на одному порту, і переконайтеся, що ви зможете відновити конфігурацію у випадку помилки (наприклад, через OpenWrt failsafe або recovery).
- Кожна VLAN також має включати CPU (за замовчуванням Tagged).
- Визначення VLAN використовують внутрішні номери портів. Переконайтеся, що ви правильно визначили порти. Деякі пристрої (наприклад, Netgear WNDR3700 v1) мають інші номери портів у системі, ніж ті, що вказані на корпусі! У веб-інтерфейсі Tagged-порти відображаються відповідним чином, у конфігураційних файлах вони позначаються літерою t після номера порту.
- Створення нової VLAN із портом X, який уже входить до іншої VLAN, означає, що порт X повинен бути позначений як Tagged у всіх VLAN, до яких він належить. Якщо цього не зробити, ваш комутатор може стати непрацездатним. Ми на уьому наголошуємо! Лише деякі комутатори дозволяють порту бути Untagged в одній VLAN і Tagged в іншій одночасно.
- Для гостьової WLAN лише ті порти, які з’єднують мережеві пристрої між собою, повинні входити до VLAN. На практиці це означає, що в конфігурації маршрутизатор - точка доступу, на кожному з пристроїв у VLAN повинен входити лише порт, який з’єднується з іншим пристроєм.
Кілька підказок (зазвичай у інструкції виробника комутатора є прийнятне пояснення роботи VLAN):
Untagged порт із VID X у комутаторі призначає тег VLAN X вхідним пакетам. Коли пакет залишає Untagged-порт і має тег VID X, тег VLAN видаляється. Це дозволяє, наприклад, здійснювати обмін між Tagged і Untagged портами. Пакет без тегу, який входить через Untagged-порт, отримує тег VID X і може бути переданий на інші порти з тією ж VID (окрім мостових портів).
Tagged порт із VID Y приймає лише пакети з тегом VID Y на вхід, і передає пакети з тим же тегом на вихід. Зверніть увагу: один порт може бути Untagged лише для одного VLAN, але Tagged — для кількох одночасно.
Ось схематичне представлення
внутрішній стек комутатора + Зовнішня мережа | | | внутрішній стек комутатора + Зовнішня мережа | | | Порт з тегами VID Y, X і Z | | | пакет із VID Y | | Untagged-порт із VID W | | +---------------------------------------> отримає VID W | пакет без VID | <--------------------------------------+ пакет із VID X | | | | +---------------------------------------> пакет із VID W | | | без тегу при виході пакет із VID Z | +--------------------------------------------> | | +---------------------------------------> | | зберігає тег | пакет із VID W | пакет із VID Y <----------------------------------------------+ <--------------------------------------+ + | | пакет із VID X <--------------------------------------+ | | пакет із VID Z <--------------------------------------+ | | пакет із VID W | XX | +--------------------XX | XX | | | XX пакет із VID W | XX-------------------+ + XX
Конфігурація
Уявімо, що у нас є 16-портовий комутатор, і ми хочемо розширити маршрутизатор на 8 портів. Обираємо перші 8 портів.
Порти 9–16 комутатора залишаються у VLAN з ID 1 (VID 1) без тегу (untagged), ця VLAN також використовується для керування комутатором.
Створюємо VLAN з ID 100 (VID 100), яку будемо використовувати для транкових або гібридних портів (транковий порт — це порт, що належить до всіх VLAN, гібридний — до кількох).
Далі призначаємо:
- Порт 1 → VLAN 101 (untagged)
- Порт 2 → VLAN 102 (untagged)
- ...
- Порт 7 → VLAN 107 (untagged)
- Порт 8 → VLAN 100 (untagged) та VLAN 101–107 (tagged)
Це зроблено для того, щоб пакети з портів 1–7 могли передаватися через порт 8, а теговані пакети з порту 8 могли потрапляти до портів 1–7 — уже без тегів (оскільки інші пристрої можуть не підтримувати VLAN-теги або відхиляти такі пакети).
Налаштування маршрутизатора OpenWrt
Тепер ми хочемо використати цю структуру. Наприклад, підключаємо модем для з'єднання `wan` до порту 1 комутатора, а модем для `wan2` — до порту 2.
Для керованого комутатора
На маршрутизаторі TP-Link TL-WDR3600 ми маємо таку конфігурацію:
# /etc/config/network ... config switch option name 'eth0' option reset '1' option enable_vlan '1' ## Порт: інтернет config disabled_switch_vlan option device 'eth0' option vlan '1' option ports '0t 1' list comment 'порт internet, eth0.1' list comment 'не можемо мати untagged порт' config switch_vlan option device 'eth0' option vlan '101' option ports '0t 1t' list comment 'порт internet, eth0.101' config switch_vlan option device 'eth0' option vlan '102' option ports '0t 1t' list comment 'порт internet, eth0.102' ... config interface 'wan' option ifname eth0.101 option proto 'dhcp' option disabled_type 'bridge' list comment 'mwan3 не підтримує інтерфейси у bridge' option peerdns 0 option metric 10 config interface 'wan2' option ifname eth0.102 option proto 'dhcp' option disabled_type 'bridge' list comment 'mwan3 не підтримує інтерфейси у bridge' option peerdns 0 option metric 20 ...
Без керованого комутатора
На пристрої з RouterOS або x86-платформі конфігурація буде схожа:
# /etc/config/network ... config interface 'wan' option ifname eth0.101 option proto 'dhcp' option disabled_type 'bridge' list comment 'mwan3 не підтримує інтерфейси у bridge' option peerdns 0 option metric 10 config interface 'wan2' option ifname eth0.102 option proto 'dhcp' option disabled_type 'bridge' list comment 'mwan3 не підтримує інтерфейси у bridge' option peerdns 0 option metric 20 ...
Висновок
Таким чином, ви отримаєте розширений маршрутизатор із значно більшою кількістю портів, подолавши обмеження апаратної таблиці (table of hardware), яка наразі не пропонує жодного пристрою з понад 5 гігабітними портами, які легко встановити (пристрої Mikrotik трохи складні для встановлення).
Обмеження, на які варто звертати увагу: скільки трафіку проходить через один порт — зазвичай для SOHO навіть при об’єднанні декількох WAN не перевищує 200–300 Мбіт — і обчислювальні можливості самого пристрою (який уже буде навантажений обробкою VLAN-тегів) на OpenWrt (яке іноді не використовує апаратне прискорення).
Однак така схема дозволяє використовувати дуже потужні пристрої з усього лише двома портами.
Практичні застосування для продуктивної роботи
Як налаштувати керований комутатор з підтримкою VLAN
Резервування та групування портів у рядки або «нібли»
Ідея полягає у резервуванні деяких портів на керованому комутаторі з VLAN як розширення для шлюзу на базі OpenWrt. Важливим є правильне планування: як вибрати і зарезервувати порти для певних ролей.
Ми поділяємо порти на дві основні групи: зовнішні з'єднання та внутрішні з'єднання. Якщо не залишити запас портів, при розширенні мережі ми отримаємо «мінне поле» VLAN-ів без зрозумілої структури.
Також треба враховувати, що одна гігабітна лінія йде до маршрутизатора, тож очікується, що трафік на кожному порту буде значно менше 1 Гбіт. У нашому випадку між логічними мережами створюється в середньому менше 50 Мбіт, тому навіть при мультиплексуванні цього достатньо.
Рішення не є безмежно масштабованим, але для невеликих мереж (як у нашому випадку) — більш ніж достатньо.
Приклад: зовнішні з'єднання — це підключення WAN. У більшості випадків ми використовуємо 2 підключення WAN (іноді до 3), отже, плануємо 4 порти під WAN:
- 3 порти для кабелів до модемів від ISP
- 1 порт — з’єднання з маршрутизатором (порт буде trunk або hybrid)
Аналогічно й для внутрішніх з'єднань — порти також мають бути логічно визначені. Внутрішні мережі, які ми, ймовірно, покриємо: voip, lan, lan2 (інша компанія або стара мережа), wifi — тобто 4 логічні мережі.
З невеликим запасом беремо до 7 внутрішніх VLAN, щоб бути готовими до майбутніх потреб. Це 8 портів (один з них — до маршрутизатора).
Тепер про групування. Зазвичай ми маємо 16–48 портові комутатори у 2 рядах. Найпростіше — групувати порти рядками (або прямокутними блоками — «ніблами»).
Призначення VLAN
Ми вирішуємо:
- зовнішнім портам призначати VLAN з PVID у діапазоні 101–199
- внутрішнім портам — 201–299
- trunk/hybrid портам — 100 або 200
На прикладі 24-портового комутатора, як HP 1810-24 J9803A, ми можемо використати 12 портів ось так (номери VLAN відповідають портам для зручності обслуговування):
порт 1 – wan1 PVID 101 | порт 3 – wan3 PVID 103 | порт 5 – lan1 PVID 201 | порт 7 – lan3 PVID 203 | порт 9 – lan5 PVID 205 | порт 11 – lan7 PVID 207 |
порт 2 – wan2 PVID 102 | порт 4 – до порту «WAN collector» на маршрутизаторі PVID 100 tagged VID 101,102,103 | порт 6 – lan2 PVID 202 | порт 8 – lan4 PVID 204 | порт 10 – lan6 PVID 206 | порт 12 – до порту «LAN collector» на маршрутизаторі PVID 200 tagged VID 201,202,203,204,205,206,207 |
Це приклад групування у вигляді прямокутників (nibbles).
Примітка щодо hybrid vs trunk
Перевага hybrid-портів над trunk-портами у тому, що ми чітко розділяємо групи і зменшуємо ризик надсилання даних у небажані VLAN.
Приклад конфігурації
Приклад конфігурації для часткового використання можливостей керованого комутатора.
# Авторське право (C) 2006 OpenWrt.org config interface loopback option ifname lo option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0 # eth0 - lan1 # eth1 - lan2 # eth2 - lan3 config interface rescue option ifname eth0 option type bridge option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0 list comment 'для аварійного доступу та керування' config interface wan option ifname eth1.101 option no_type_with_mwan3 1 option proto static option ipaddr 1.2.3.4 option netmask 255.255.255.248 option gateway 1.2.3.3 option metric 10 config interface wan2 option ifname eth1.102 option no_type_with_mwan3 1 option proto static option ipaddr 1.2.3.5 option netmask 255.255.255.248 option gateway 1.2.3.6 option metric 20 config interface wan3 option ifname eth1.103 option proto dhcp option metric 30 config interface lan option ifname eth2.201 option proto static option ipaddr 172.18.21.9 option netmask 255.255.255.0 config interface lan_gw option ifname eth2.201 option proto static option ipaddr 172.18.21.1 option netmask 255.255.255.0 config interface lan_gw2 option ifname eth2.201 option proto static option ipaddr 172.18.21.253 option netmask 255.255.255.0 config interface lan_old option ifname eth2.201 option proto static option ipaddr 10.200.1.9 option netmask 255.255.255.0 config interface lan_old_g option ifname eth2.201 option proto static option ipaddr 10.200.1.253 option netmask 255.255.255.0 config interface voip option ifname eth2.202 option proto static option ipaddr 172.18.22.9 option netmask 255.255.255.0 config interface voip_gw option ifname eth2.202 option proto static option ipaddr 172.18.22.1 option netmask 255.255.255.0 config interface wlan option ifname eth2.203 option type bridge option proto static option ipaddr 172.18.24.9 option netmask 255.255.255.0 config interface wlan_gw option ifname eth2.203 option proto static option ipaddr 172.18.24.253 option netmask 255.255.255.0 config interface vpn0 option ifname tun0 option proto none config interface vpn1 option ifname tun1 option proto none config interface vpn2 option ifname tun2 option proto none config interface vpn3 option ifname tun3 option proto none config interface vpn4 option ifname tun4 option proto none config interface vpn5 option ifname tun5 option proto none config route list comment 'маршрутизація всіх приватних адрес через VPN-сервер' list comment 'з різними метриками' option interface lan option target 10.0.0.0 option netmask 255.0.0.0 option gateway 172.18.21.4 option metric 100 config route list comment 'маршрутизація всіх приватних адрес через VPN-сервер' list comment 'з різними метриками' option interface lan option target 172.16.0.0 option netmask 255.240.0.0 option gateway 172.18.21.4 option metric 100 config route list comment 'маршрутизація всіх приватних адрес через VPN-сервер' list comment 'з різними метриками' option interface lan option target 192.168.0.0 option netmask 255.255.0.0 option gateway 172.18.21.4 option metric 100