Документація про комутатори (Switch)

FIXME: Ця сторінка застаріла та неповна — вона походить з епохи ядра 2.6 або 3 і ранньої UCI-конфігурації. Якщо ваш пристрій має кілька інтерфейсів, типова конфігурація VLAN, ймовірно, буде суттєво відрізнятися від описаної тут.

Дивіться також:

Переконайтесь, що ви маєте доступ до safemode або через TTL перед зміною мережевих/комутаторних налаштувань

FIXME: У цьому документі передбачається, що ви вже знаєте, що таке комутатор і навіщо він вам потрібен. (див. VLAN)

Якщо ваш пристрій має більше одного LAN-порту, то в ньому, ймовірно, є спеціальне внутрішнє з'єднання між портами, яке називається комутатор (switch). Внутрішня структура, ймовірно, виглядатиме приблизно так:

Якщо ви хочете змінити спосіб, у який порти з’єднані між собою, вам потрібно налаштувати switch вашого пристрою (див. також network.interfaces)

Різні маршрутизатори мають різні топології комутаторів, тому обов’язково перегляньте Wiki для вашої моделі пристрою. Наприклад: - TP-Link Archer C7 має `eth0 = WAN`, а `eth1 = LAN` (тобто 4 порти комутатора).

  1. Port 0 відповідає eth1 (у LuCI позначено як CPU), Port 6 = eth0.
  2. Port 1 у LuCI позначено як WAN.

- TP-Link WDR4300 має лише eth0.

  • Якщо інтерфейс комутатора (з точки зору CPU) контролює кілька «фізичних» інтерфейсів, то при підключенні одного з них усі порти інтерфейсу `ethN.Y` переходять у стан `UP`, і відповідно застосовуються всі маршрути/правила. Це може викликати серйозні проблеми, наприклад, якщо ви покладаєтесь на автоматичне перемикання маршрутів при втраті зв'язку.
  • Як це виявити:
swconfig dev <назва_інтерфейсу> show | grep link

або див. swconfig

FIXME: Деякі припущення не узгоджуються зі схемою. Потрібно або виправити, або уточнити пояснення.

  • Пристрій використовує ядро Linux 2.6 або 3.
  • Пристрій використовує конфігурацію комутатора типу `swconfig`.
  • ---------------------------------------------------
  • Комутатор розташований на інтерфейсі `eth1`. FIXME: Багато пристроїв використовують `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.

# /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'

:!: Потрібно більше інформації про 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 — це потребує додаткового тестування.

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 13:40
  • by vazaz