Розширення портів маршрутизатора за допомогою керованого комутатора з VLAN

Дивіться документацію про комутатори та мережеву документацію.

У вас є потужний пристрій, на якому працює OpenWrt. Потужний тут означає: пристрій, здатний з великим запасом обробляти кількість мережевих пакетів, що створюються вашими діями. Наприклад, ви створюєте потік у 50 Мбіт, а пристрій може обробляти до 800 Мбіт.

Проблема: у вас кілька підключень до WAN (можливо, через mwan3), або кілька внутрішніх підключень з будь-яких причин, але пристрою не вистачає Ethernet-портів.

Ви можете розширити кількість Ethernet-портів за допомогою керованого комутатора (що передбачає наявність деякого бюджету/ресурсів, і ви перебуваєте у домашньому офісі або невеликому офісі).

Технологія, яка дозволяє пристрою на базі 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-теги або відхиляти такі пакети).

Тепер ми хочемо використати цю структуру. Наприклад, підключаємо модем для з'єднання `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 як розширення для шлюзу на базі 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
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/06/11 11:42
  • by vazaz