Bookmark

VLAN trên OpenWrt: phân biệt swconfig, VLAN driver và DSA

VLAN trên OpenWrt không chỉ là thêm .106 vào tên interface. Tôi phải biết thiết bị dùng switch phần cứng kiểu cũ, VLAN do driver tạo hay DSA; từ OpenWrt 21.02, cú pháp và cách đặt port có thể khác đáng kể. Bài này giữ cả ba nhánh mà tài liệu chính thức mô tả.1

Cảnh báo: Sai tagged/untagged hoặc nhầm CPU port có thể làm mất toàn bộ LAN. Chụp cấu hình và chuẩn bị console trước khi đổi /etc/config/network. Không chép nguyên mapping port của model khác.1

VLAN, tagged, untagged và off

OpenWrt hỗ trợ IEEE 802.1Q và IEEE 802.1ad (QinQ). Trong ví dụ router phổ biến, switch nội bộ có VLAN 1 cho LAN và VLAN 2 cho WAN; CPU nhận hai VLAN ở dạng tagged, còn các cổng thiết bị đầu cuối thường untagged. Tagged port thường làm trunk giữa switch/router, untagged port thường nối máy cuối.1

  • Tagged trên CPU port nghĩa là frame mang tag VLAN đi tới CPU; thiết bị phía kia phải hiểu VLAN.
  • Untagged nhận frame không tag và gỡ tag khi gửi ra; một port untagged chỉ có một VLAN ID và có thể dùng PVID.
  • Off nghĩa là VLAN đó không đi qua port.
  • Traffic muốn đi từ LAN sang WAN phải qua CPU/firewall nếu hai VLAN không chia sẻ external port; VLAN cũng có thể bypass CPU khi switch cấu hình như vậy.1

Xác định loại phần cứng và driver

Xem trang hardware của model trước. Trên router, có thể kiểm tra interface bằng:

1
2
3
4
5
# ls -l /sys/class/net
...
lrwxrwxrwx    1 root     root             0 Jul 25 14:10 eth0 -> ../../devices/pci0000:00/0000:00:09.0/net/eth0
lrwxrwxrwx    1 root     root             0 Jul 25 14:10 eth1 -> ../../devices/pci0000:00/0000:00:0a.0/net/eth1
lrwxrwxrwx    1 root     root             0 Jul 25 14:10 eth2 -> ../../devices/pci0000:00/0000:00:0b.0/net/eth2

Một ví dụ khác của tài liệu cho thiết bị có một interface vật lý và các VLAN do switch tạo là:

1
2
3
4
5
# ls -l /sys/class/net
...
lrwxrwxrwx    1 root     root             0 Jan 1 1970 eth0 -> ../../devices/platform/ag71xx.0/net/eth0
lrwxrwxrwx    1 root     root             0 Jul 21 22:13 eth0.1 -> ../../devices/virtual/net/eth0.1
lrwxrwxrwx    1 root     root             0 Jul 21 22:13 eth0.2 -> ../../devices/virtual/net/eth0.2

Nếu chỉ có một interface vật lý nhưng xuất hiện eth0.1, eth0.2, có thể đó là một switch VLAN-capable hoặc VLAN do driver quản lý. DSA tạo các cổng switch thành interface độc lập; không phải thiết bị nào cũng đã chuyển từ swconfig sang DSA. Khi migration thay đổi cú pháp, nếu tôi áp dụng nhầm ví dụ cũ thì mạng có thể không lên.1

Nhánh 1: switch phần cứng kiểu swconfig

Đây là mẫu cho hệ thống không dùng DSA. switch giữ thuộc tính chung, switch_vlan gắn VLAN vào switch device, còn switch_port đặt PVID. Port có hậu tố t là tagged; CPU port trong ví dụ là 5.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
config 'switch' 'eth0'
        option 'reset' '1'
        option 'enable_vlan' '1'

config 'switch_vlan' 'eth0_1'
        option 'device' 'eth0'
        option 'vlan' '1'
        option 'ports' '0 1 3t 5t'

config 'switch_vlan' 'eth0_2'
        option 'device' 'eth0'
        option 'vlan' '2'
        option 'ports' '2 4t 5t'

config 'switch_vlan' 'eth0_3'
        option 'device' 'eth0'
        option 'vlan' '3'
        option 'ports' '3t 4t'

config 'switch_port'
        option 'device' 'eth0'
        option 'port' '3'
        option 'pvid' '3'

Trong mẫu trên, frame untagged đi vào port 0 được gán VLAN 1, đi ra port 1 ở dạng untagged, đi ra port 3 và CPU ở dạng tagged, rồi xuất hiện phía Linux như eth0.1. Frame VLAN 2 đi vào port 2 tới port 4 và CPU ở dạng tagged, xuất hiện như eth0.2. Một untagged port không thể đồng thời thuộc nhiều VLAN ID.1

Nhánh 2: VLAN do driver tạo

Với thiết bị chỉ có một NIC như CPE, VLAN có thể được mô tả bằng interface cha và VLAN ID. Tài liệu cho phép cấu hình tường minh bằng config device với type '8021q', ifname, vid, name; type có thể là 8021q hoặc 8021ad, nameifname là bắt buộc, vid là VLAN ID.

Mẫu tường minh với VLAN 106 và 204:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
config device
	option type '8021q'
	option ifname 'eth0'
	option vid '106'
	option name 'vlan1'

config device
	option type '8021q'
	option ifname 'eth0'
	option vid '204'
	option name 'vlan2'

config interface 'lan'
	option type 'bridge'
	option ifname 'vlan1'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'

config interface 'wan'
	option ifname 'vlan2'
	option proto 'dhcp'

Cú pháp rút gọn tương đương để netifd tự suy ra parent và VID từ dot-notation là:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
config interface 'lan'
	option type 'bridge'
	option ifname 'eth0.106'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'

config interface 'wan'
	option ifname 'eth0.204'
	option proto 'dhcp'

Nếu frame tagged tới eth1 mà chưa có interface VLAN tương ứng, nó có thể bị bỏ; frame untagged đi vào interface cha như bình thường. Khi bridge một interface VLAN với interface không VLAN, kernel tự thêm/gỡ tag ở ranh giới đó. Đây là nhánh khác với cấu hình switch phần cứng.1

Nhánh 3: DSA trên thiết bị có một cổng vật lý

Mẫu sau là cấu hình đầy đủ mà nguồn gọi là working example. Nó tạo br-lan, đặt VLAN 1 untagged trên port lan, VLAN 2 và 3 tagged, rồi đưa iot vào br-lan.2guest vào br-lan.3. Muốn WLAN hoạt động, wireless network phải bridge vào đúng interface iot hoặc guest.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option packet_steering '1'
        option ula_prefix 'fdfe:bdca:64ed::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'lan'

config bridge-vlan 'lan_vlan'
	option device 'br-lan'
	option vlan '1'
	list ports 'lan:u*'

config interface 'lan'
	option device 'br-lan.1'
	option proto 'dhcp'

config bridge-vlan
        option device 'br-lan'
        option vlan '2'
        list ports 'lan:t'

config interface 'iot'
        option device 'br-lan.2'
        option proto 'none'

config bridge-vlan
        option device 'br-lan'
        option vlan '3'
        list ports 'lan:t'

config interface 'guest'
        option device 'br-lan.3'
        option proto 'none'

Kiểm tra bridge và VLAN sau khi reload:

1
2
3
4
5
6
7
8
bridge name     bridge id               STP enabled     interfaces
br-lan          7fff.74acb915ff33       no              lan
                                                        wlan0
                                                        wlan1
                                                        lan.3
                                                        wlan0-1
                                                        lan.2
                                                        wlan1-1

Nếu đã cài gói hỗ trợ, xem bảng VLAN bằng:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
bridge v
port              vlan-id
lan               1 PVID Egress Untagged
                  2
                  3
br-lan            1
                  2
                  3
wlan0             1 PVID Egress Untagged
wlan1             1 PVID Egress Untagged
wlan0-1           2 PVID Egress Untagged
wlan1-1           3 PVID Egress Untagged

Nếu bridge v không có, nguồn lưu ý có thể cần ip-full. Mẫu DSA cũng giả định một thiết bị khác đang cấp DHCP cho LAN untagged và các VLAN tagged 2/3 trên cùng liên kết; đừng bật thêm DHCP ngẫu nhiên trước khi hiểu topology.1

Kiểm tra cuối

Sau mỗi thay đổi, đối chiếu port thật, VLAN ID, tag state, interface cha, bridge và firewall zone. Test từng segment bằng một client có dây và một SSID, xác nhận client nhận đúng DHCP và không nhìn thấy segment không được phép. Khi còn nghi ngờ, khôi phục file /etc/config/network đã backup qua console; không áp dụng nguyên file của model khác.1

Nguồn


0 Bình luận

Góp Ý / Bình Luận / Đánh giá