Документація про комутатори (Switch)
: Ця сторінка застаріла та неповна — вона походить з епохи ядра 2.6 або 3 і ранньої UCI-конфігурації.
Якщо ваш пристрій має кілька інтерфейсів, типова конфігурація VLAN, ймовірно, буде суттєво відрізнятися від описаної тут.
Дивіться також:
Переконайтесь, що ви маєте доступ до safemode або через TTL перед зміною мережевих/комутаторних налаштувань
: У цьому документі передбачається, що ви вже знаєте, що таке комутатор і навіщо він вам потрібен. (див. VLAN)
Якщо ваш пристрій має більше одного LAN-порту, то в ньому, ймовірно, є спеціальне внутрішнє з'єднання між портами, яке називається комутатор (switch). Внутрішня структура, ймовірно, виглядатиме приблизно так:
Якщо ви хочете змінити спосіб, у який порти з’єднані між собою, вам потрібно налаштувати switch вашого пристрою (див. також network.interfaces)
Різні маршрутизатори мають різні топології комутаторів, тому обов’язково перегляньте Wiki для вашої моделі пристрою. Наприклад: - TP-Link Archer C7 має `eth0 = WAN`, а `eth1 = LAN` (тобто 4 порти комутатора).
- Port 0 відповідає eth1 (у LuCI позначено як CPU), Port 6 = eth0.
- Port 1 у LuCI позначено як WAN.
- TP-Link WDR4300 має лише eth0.
Конфігурація UCI у стилі swconfig
Відомі проблеми
- Якщо інтерфейс комутатора (з точки зору CPU) контролює кілька «фізичних» інтерфейсів, то при підключенні одного з них усі порти інтерфейсу `ethN.Y` переходять у стан `UP`, і відповідно застосовуються всі маршрути/правила. Це може викликати серйозні проблеми, наприклад, якщо ви покладаєтесь на автоматичне перемикання маршрутів при втраті зв'язку.
- Як це виявити:
swconfig dev <назва_інтерфейсу> show | grep link
або див. swconfig
Припущення
: Деякі припущення не узгоджуються зі схемою. Потрібно або виправити, або уточнити пояснення.
- Пристрій використовує ядро Linux 2.6 або 3.
- Пристрій використовує конфігурацію комутатора типу `swconfig`.
- ---------------------------------------------------
- Комутатор розташований на інтерфейсі `eth1`.
: Багато пристроїв використовують `eth0`. [Як перевірити: `/proc/switch` може містити правильний номер eth для комутатора. Потрібне підтвердження.]
- 5-портовий комутатор: порти 0–3 — зовнішні, порт 4 — не підключений, порт 5 — підключено до CPU через eth1 (всього 6 портів, але порт 4 не враховується).
- `vlan0` охоплює всі зовнішні порти, крім останнього.
- `vlan1` охоплює лише останній зовнішній порт. [Як дізнатись, який порт до чого відповідає — див. вивід `swconfig`]
- `vlan0` є VLAN за замовчуванням. Тобто, якщо пакет не містить VLAN-тегу, його буде трактовано як пакет VLAN 0.
Конфігурація
Комутатор
# /etc/config/network config 'switch' 'eth1' option 'enable' '1' option 'enable_vlan' '1' option 'reset' '1'
VLAN: конфігурація комутатора
Примітки
- Номер VLAN задається рядком `option vlan`. - За замовчуванням, VLAN ID (VID) дорівнює номеру VLAN, але це можна змінити через `option vid`. Наприклад, VLAN з номером 1 може мати VID 100. - У деякому обладнанні значення `option vlan` обмежене 127; перевищення може призвести до того, що VLAN не створиться.
У параметрі `option ports`: - цифра означає номер порту, що входить до VLAN; - суфікс `t` означає, що передані пакети на цьому порту тегуються, а отримані можуть містити тег цього VLAN; - порт 5 зазвичай відповідає CPU або «внутрішньому» порту і зазвичай використовується як tagged.
Інші суфікси (наприклад `u`, `*`) ігноруються в `swconfig`, але можуть використовуватись у Broadcom (через `/proc/switch/`).
Приклад: `0 1 2 3 5t` — порти 0–3 передають пакети без тегу, а порт 5 — з тегом (внутрішній порт CPU).
Tagged пакети спрямовуються згідно з VID у пакеті. Untagged пакети — спрямовуються до PVID (за замовчуванням для порту). Щоб задати PVID, потрібно окремо вказати `config switch_port`.
Згідно з 802.1Q:
- VID 0 і 4095 зарезервовані: не можна тегувати пакети з цими значеннями;
- VID 1 часто використовується для керування (наприклад, Dell 2708);
- Це означає, що vlan0 можна використовувати як VLAN всередині пристроїв або між ними, але ви не можете позначати пакети за його допомогою..
Конфігураційні секції
# /etc/config/network config 'switch_vlan' option 'vlan' '0' option 'device' 'eth1' option 'ports' '0 1 2 5t' config 'switch_vlan' option 'vlan' '1' option 'device' 'eth1' option 'ports' '3 5t' config 'switch_port' option 'port' '3' option 'pvid' '1'
VLAN: конфігурація інтерфейсів/мережі
Секції інтерфейсів VLAN виглядають як звичайні секції інтерфейсів, за винятком того, що замість `eth1` (або `eth0`, чи іншого), вказується `eth1.0`, `eth1.1` тощо, де цифра після крапки — це номер VLAN. (Це стосується ядра 2.6; у ядрах 2.4 схема інша.)
Наступний приклад стосується маршрутизатора з двома інтерфейсами: `eth0` — це WAN, а `eth1` — це п’ятипортовий комутатор, налаштований як описано раніше. Це все розміщується у файлі `/etc/config/network`.
Наприклад:
# /etc/config/network config 'interface' 'lan' option 'ifname' 'eth1.0' option 'proto' 'static' option 'ipaddr' '192.168.1.1' option 'netmask' '255.255.255.0' option 'defaultroute' '0' option 'peerdns' '0' option 'nat' '1' config 'interface' 'extranet' option 'ifname' 'eth1.1' option 'proto' 'dhcp' config 'interface' 'wan' option 'ifname' 'eth0.2' option 'proto' 'pppoe' option 'username' 'szabozsolt-em' option 'password' 'M3IuWBt4'
Звісно, якщо у вас лише п’ятипортовий комутатор на `eth0` (без додаткових інтерфейсів), ви можете налаштувати інтерфейс `wan` як `eth0.1`, а `lan` як `eth0.0` — з відповідним відображенням у секціях `switch`, `switch_vlan`, `switch_port`.
Див. також backplane.
Приклади
Приклад: ASUS WL-500gP V2, OpenWrt 10.03, кожен фізичний порт
# /etc/config/network config 'switch' 'eth0' option 'enable' '1' config 'switch_vlan' 'eth0_0' option 'device' 'eth0' option 'vlan' '0' option 'ports' '4 5' # WAN config 'switch_vlan' 'eth0_1' option 'device' 'eth0' option 'vlan' '1' option 'ports' '3 5' # LAN 1 config 'switch_vlan' 'eth0_2' option 'device' 'eth0' option 'vlan' '2' option 'ports' '2 5' # LAN 2 config 'switch_vlan' 'eth0_3' option 'device' 'eth0' option 'vlan' '3' option 'ports' '1 5' # LAN 3 config 'switch_vlan' 'eth0_4' option 'device' 'eth0' option 'vlan' '4' option 'ports' '0 5' # LAN 4 # Примітка: щоб використовувати порт у певному інтерфейсі, ifname повинен бути у форматі 'назва_інтерфейсу.vlan' # Наприклад: ifname 'eth0.3'
Приклад: VMware-гостьова машина з OpenWrt x86 (версія 12.09), два віртуальні Intel e1000
Потрібно більше інформації про VLAN на пристроях x86, щоб доповнити цю частину Wiki.
Більшість x86-пристроїв не мають програмованого комутатора, але це не є проблемою. Синтаксис, що використовується на пристроях із програмованими комутаторами, тут не потрібен.
Наприклад, ми хочемо створити два «віртуальні інтерфейси», які пов’язані з одним фізичним інтерфейсом `eth1`. Тоді у `/etc/config/network` вказуємо:
# /etc/config/network
...
config interface lan1
option ifname eth1.100
...
config interface lan2
option ifname eth1.101
...
Згідно з коментарів дописувачів форуму, виглядає так, що пакети автоматично тегуються, оскільки вони пов’язані з одним фізичним інтерфейсом, який може мати лише один PVID, але кілька віртуальних інтерфейсів. Тому при наявності кількох VLAN-інтерфейсів — пакети мають бути теговані, інакше вони не зможуть досягти потрібного інтерфейсу або бути відправлені.
Тести підтверджують це: для зв’язку двох OpenWrt x86-гостьових систем у VMware через один комутатор, необхідно було налаштувати portgroups із VLAN ID = 4095 (trunk) — згідно з технічними документами VMware: *VMware Virtual Networking Concepts* та *VMware ESX Server 3 802.1Q VLAN Solutions*.
Примітка: якщо різні віртуальні інтерфейси (з різних VLAN) знаходяться в одній логічній підмережі — це може викликати конфлікт маршрутів (metric). У такому випадку можна об’єднати інтерфейси у bridge — це потребує додаткового тестування.
