8 липня 2012 р.

Mulit-SSID Wi-Fi та VLAN у роутері TP-Link 1043 (OpenWRT)

Прийшов час трохи розібратися з начинкою свого роутера більш детально у тій сфері що не використовував - VLAN.

Для ознайомлення почав тут:

Архітектура WR1043ND




Хтось робив tagged пакети VLAN, з метою виділяти multi WiFi мережі?
Наприклад, так робить моя точка доступу D-Link DWL 2100:
Є Mulit-SSID wifi мережі some202, some203, 
some204 і їм відповідно призначаються VLAN ID  202, 203, 204. IP пакети, що стосуються some202, some203, some204, мітяться (tagged) спеціальними мітками.
Index       SSID   Band Encrypt. VLAN ID  
Primary     some202 11g  WPA2-PSK 202
Multi-SSID1 some203 11g  WPA2-PSK 203 
Multi-SSID2 some204 11g  WPA2-PSK 204 
Потім на сервері, ці VLANs, розбираються на свої віртуальні мережі, на основі мічених пакетів (tagged) .

Як таке зробити на OpenWRT?
Ось тема на подібну тему https://forum.openwrt.org/viewtopic.php?id=30955

Протеговані (tagged) пакети від Mulit-SSID WiFi,
повинні бути на порту #4.

Створюю VLANs на switch 'device' 'rtl8366rb', включивши до них тільки порт #4, та порт CPU #5.
Пакети що виходять з цих портів будуть протегуватися.
/etc/config/network:
config 'switch_vlan' #appended 
  option 'device' 'rtl8366rb' 
  option 'vlan' '202' 
  option 'ports' '4t 5t' 

config 'switch_vlan' #appended 
  option 'device' 'rtl8366rb' 
  option 'vlan' '203' 
  option 'ports' '4t 5t' 

config 'switch_vlan' #appended 
  option 'device' 'rtl8366rb'
  option 'vlan' '204' 
  option 'ports' '4t 5t'

Так як порт 4 використовуєтеся виключно для VLAN WiFi Multi-SSID, виключаємо його з  VLAN 1. 
/etc/config/network:
config 'switch_vlan' 
  option 'device' 'rtl8366rb' 
  option 'vlan' '1' 
  option 'ports' '1 2 3 5t' #moved port 4 to vlans 202-204 

config 'switch_vlan' 
  option 'device' 'rtl8366rb' 
  option 'vlan' '2' 
  option 'ports' '0 5t'

LuCI switch config
Потім потрібно створити віртуальні мережі 202, 203, 204 на базі реального інтерфейсу eth0, де номер віртуальної мережі додається як суфікс до назви інтерфейсу через крапку. Кожна віртуальна мережа визначається своїм мережевим сегментом та унікальною статичною адресою для роутера.
VLAN ID   SUBNET            Router IP
vlan 202, 192.168.202.0/24, 192.168.202.1
vlan 203, 192.168.203.0/24, 192.168.203.1
vlan 204, 192.168.204.0/24, 192.168.204.1 

/etc/config/network:
config 'interface' 'vlan_202' #appended 
  option 'ifname' 'eth0.202' 
  option type 'bridge' 
  option 'proto' 'static' 
  option 'ipaddr' '192.168.202.1' 
  option 'netmask' '255.255.255.0' 

config 'interface' 'vlan_203' #appended 
  option 'ifname' 'eth0.203' 
  option type 'bridge' option 'proto' 'static' 
  option 'ipaddr' '192.168.203.1' 
  option 'netmask' '255.255.255.0' 

config 'interface' 'vlan_204' #appended 
  option 'ifname' 'eth0.204' 
  option type 'bridge' option 'proto' 'static' 
  option 'ipaddr' '192.168.204.1' 
  option 'netmask' '255.255.255.0'
А потім створюю підключення WiFi`s з ssid: "some202", "some203", "some204"
і також створюю міст (bridge) між підключенням WiFi`s та відповідними VLANs: "vlan_202", "vlan_203", "vlan_204".
/etc/config/wireless:
config wifi-iface 
  option device 'radio0' 
  option network 'vlan_202' 
  option mode 'ap' 
  option ssid 'some202' 
  option encryption 'psk2+ccmp' 
  option key 'somepassword' 

config wifi-iface option device 'radio0' 
  option network 'vlan_203' 
  option mode 'ap' 
  option ssid 'some203'
  option encryption 'psk2+ccmp'
  option key 'somepassword' 

config wifi-iface 
  option device 'radio0' 
  option network 'vlan_204' 
  option mode 'ap' option ssid 'some204' 
  option encryption 'psk2+ccmp' 
  option key 'somepassword'

LuCI, WiFi 'Some20'2 bridged to 'VLAN_202'

Налаштовую DHCP на VLAN_202, VLAN_203, a VLAN_204 спеціально залишаю без DHCP.
/etc/config/dhcp:

config dhcp
  option start '100'
  option leasetime '12h'
  option limit '150'
  option interface 'VLAN_202'


config dhcp
  option start '100'
  option leasetime '12h'
  option limit '150'
  option interface 'VLAN_203' 



Потім до порту #4 треба підключити сервер і дивитися там проходження ip пакетів командою 'tcpdump -een' , на присутність ethertype 802.1Q пакетів від клієнтів, які підключилися по відповідних WiFi.


Перевіряємо VLAN на порту #4

WinDupm

WinDump.exe -D - перелік адаптерів, шукаємо адаптер що під'єднано до порту #4
WinDump.exe -i 1 -een
У мене не показує ethertype 802.1Q, можливо драйвер не пропускає їх, у цієї мережевої карти є своя реалізація VLAN можливостей.
Але коли я до порту  #4 під'єднав ноутбук з ОС Ubuntu, то tcpdump -i eth0 -een почав показувати 
ethertype 802.1Q. 

OS Windows: створимо віртуальні мережі на базі мережевого адаптера "Marvel Yukon 88E8056"





адаптери для зручності були перейменовані
до VLAN_202, VLAN_203 та VLAN_204

адаптер VLAN_202 по DHCP взяв адресу 192.168.202.230

адаптер VLAN_203 по DHCP взяв адресу 192.168.203.230

адаптер VLAN_2034 по DHCP не взяв адресу,
йому призначено автоматичну 169.254.119.201
З вище зазначених прикладів видно, що кожний адаптер зі своєю віртуальною мережею, взяв IP адресу по DHCP, що була налаштована в роутері на відповідному інтерфейсі eth0.202 та eth0.203. Інетефейс eth0.204 має статичну адресу і сервер DHCP не налаштований на цьому інтерфейсі, тому і адаптер VLAN_204 по DHCP не взяв адресу. Але якщо ми пропишемо статичну адресу адаптеру VLAN_204, наприклад 192.168.204.10/24, то зможемо зробити ping до роутера.



В свою чергу я приєднав до WiFi мережі 'some202',  notebook.
Ноутбук взяв собі адресу по DHCP : 192.168.202.231.
Зробив ping з notebook до роутера 192.168.202.1, і до адаптера PC (під'єднаний до порту 4, та налаштований VLAN 202) з адресою 192.168.202.230 що знаходяться в тій самій віртуальній мережі - успішно. 
Зробив ping з PC 192.168.202.230 до notebook 192.168.202.231 що знаходяться в тій самій віртуальній мережі - успішно. 
Зробив ping до 192.168.203.1 та 192.168.204.1 теж вдало, бо пройшло внутрішнє перетворення так як це один інтерфейс. 
Але до інших адрес з інших віртуальних мереж вже не вдалося:
Зробив ping з notebook 192.168.202.231 до адаптера з адресою 192.168.203.230 що знаходяться в віртуальній мережі VLAN_203 - відповіді не має.
Встановив статичну адресу ноутбуку коли він під'єднаний до WiFi 'some202' із "нерідної" VLAN - 192.168.203.231, спроба зробити ping до PC 192.168.203.230 - не вдача.


tagged & untagged

Наступна реалізація коли порт 4 використовується як для tagged так і untagged ip пакетів.

config switch_vlan
        option device 'rtl8366rb'
        option vlan '1'
        option ports '1 2 3 4 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '2'
        option ports '0 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '202'
        option ports '4t 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '203'
        option ports '4t 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '204'
        option ports '4t 5t'

config switch_port
        option device 'rtl8366rb'
        option port '4'
        option pvid '1'

 


У такому випадку  switch_port пере приділяє значення для пакетів що були untagged ip (звичайні ip), до фіксованого значення VLAN, у нашому випадку назначає до VLAN 1.
І під'єднанний ноутбук по DHCP отримає адресу з мережі 192.168.0.0/24.
Якщо прописати так:

config switch_port
        option device 'rtl8366rb'
        option port '4'
        option pvid '203'

І під'єднаний ноутбук до порту #4, по DHCP, отримає адресу з мережі 192.168.203.0/24

Хочу зауважити що, switch_port з визначенням pvid буде працювати для тих портів котрі у розділі switch_vlan описні як untagged.
Кожен порт може бути визначений як untagged, тільки один раз.


Така конфігурація не буде працювати для untagged ip: 
config switch_vlan
        option device 'rtl8366rb'
        option vlan '1'
        option ports '1 2 3 5t'


config switch_vlan
        option device 'rtl8366rb'
        option vlan '202'
        option ports '4t 5t'


config switch_port
        option device 'rtl8366rb'
        option port '4'
        option pvid '202'



P.S.

Якщо виконати:
#swconfig dev rtl8366rb port 0 show |grep pvid
pvid: 2

#swconfig dev rtl8366rb port 1 show |grep pvid
pvid: 1

#swconfig dev rtl8366rb port 2 show |grep pvid
pvid: 1

#swconfig dev rtl8366rb port 3 show |grep pvid
pvid: 1

#swconfig dev rtl8366rb port 4 show |grep pvid
pvid: 204


Бачимо якщо інформація іде 'untagged' то вона буде автоматично 'tagged' до відповідного PVID.
По замовчувані  PVID відповідає VLAN ID, до якого призначений цей порт.
У випадку  port 4, він присутій у декільках VLAN, у такому випадку береться останній VLAN ID.

Якщо ми хочемо перевизначити  PVID то використовуємо config 'switch_port'

config 'switch_port' #appended
    option 'device' 'rtl8366rb'
    option 'port' '4'
    option 'pvid' '202'


Тепер бачимо
#swconfig dev rtl8366rb port 4 show |grep pvid
pvid: 202



P.S. P.S.
Визначення switch через "LuCI Save and Apply", тільки зберігає значення до фалу конфігурації.
Для за діяння змін треба запустити /etc/init.d/networks restart.



До нотаток:

TCPDUMP


opkg install tcpdump
#tcpdump -n -ee

21:59:55.294869 48:5b:39:XX:XX:c8 > 74:ea:3a:XX:XX:6a, ethertype 802.1Q (0x8100), length 110: vlan 1, p 1, ethertype IPv4, 192.168.0.2.50778 > 192.168.0.3.22: Flags [P.], seq 1041:1093, ack 202660, win 16118, length 52
21:59:55.295486 74:ea:3a:
XX:XX:6a > 48:5b:39:XX:XX:c8, ethertype 802.1Q (0x8100), length 58: vlan 1, p 0, ethertype IPv4, 192.168.0.3.445 > 192.168.0.2.50775: Flags [.], ack 1838141, win 12912, length 0

пакети від vlan 1, p 1  до  vlan 1, p 0 при передачі файлів по SMB з PC до Samba server роутера.


22:55:56.588364 74:ea:3a:XX:XX:6a > 00:12:fb:XX:XX:05, ethertype 802.1Q (0x8100), length 46: vlan 1, p 0, ethertype ARP, Request who-has 192.168.0.92 tell 192.168.0.3, length 28
22:55:56.588558 00:12:fb:
XX:XX:05 > 74:ea:3a:XX:XX:6a, ethertype 802.1Q (0x8100), length 64: vlan 1, p 1, ethertype ARP, Reply 192.168.0.92 is-at 00:12:fb:99:f5:05, length 46
 

пакети від vlan 1, p 0  до  vlan 1, p 1 при ARP request  з роутера до TV

22:42:11.519793 00:XX:66:XX:XX:1f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: vlan 2, p 1, ethertype ARP, Request who-has 27.27.22.27 tell 27.27.22.254, length 46 
пакети від vlan 2, p 1  при ARP request  з роутера WAN IPTV (підключений до port #1 роутера) до ff:...:ff

23:06:48.335623 00:XX:66:XX:XX:1f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: vlan 2, p 1, ethertype ARP, Request who-has 37.37.22.29 tell 37.37.22.254, length 46

пакети від vlan 2, p 1   при ARP request  з роутера WAN (підключений до port #0 [WAN] роутера) до ff:...:ff

48:5b:39:XX:XX:c8 - PC (підключений до port #2 роутера)
74:ea:3a:XX:XX:6a - Роутер з Samba Server
00:XX:66:XX:XX:1f - WAN Роутера для IPTV (до port #1 роутера підключений IPTV player)
00:12:fb:XX:XX:05 - TV (підключений до port #3 роутера)

/etc/config/network:

config switch
        option name 'rtl8366rb'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '1'
        option ports '2 3 4 5t'

config switch_vlan
        option device 'rtl8366rb'
        option vlan '2'
        option ports '0 1 5t'




Цією командою дивимося реальний стан: 
#swconfig dev rtl8366rb show
...

VLAN 1:
info: VLAN 1: Ports: '2345t', members=003c, untag=001c, fid=0
fid: 0
ports: 2 3 4 5t
VLAN 2:
info: VLAN 2: Ports: '015t', members=0023, untag=0003, fid=0
fid: 0
ports: 0 1 5t



#cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.1 | 1 | eth0
eth0.2 | 2 | eth0



#swconfig dev rtl8366rb vlan 1 get info
VLAN 1: Ports: '2345t', members=003c, untag=001c, fid=0

#swconfig dev rtl8366rb vlan 1 get ports

2 3 4 5t




Немає коментарів:


Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready