Bookmark

802.11s mesh trên OpenWrt: chuẩn bị wpad, cấu hình và kiểm tra peer

802.11s là mesh Layer 2: các node nhìn thấy nhau như cùng cắm vào một switch, còn DHCP, routing hoặc Batman/OLSR nằm phía trên. Tôi phải kiểm tra driver và wpad trước; có mesh interface không có nghĩa là mọi radio đều hỗ trợ mesh point.1

Điều kiện và giới hạn

Nguồn ghi 802.11s hoạt động đáng tin với OpenWrt 19.07 trở lên khi hardware/driver hỗ trợ và wpad-mesh-openssl (hoặc tương đương) đã cài. Nguồn cũng ghi nhận lỗi ARP relay trên 19.07.4 khiến Mesh Point chỉ hoạt động ổn định khi nằm trong vùng phủ của Mesh Portal. Đây là lý do tôi kiểm tra phiên bản và topology trước khi dùng production.

Mọi node phải dùng cùng channel, mesh ID và mật khẩu. Nếu muốn chạy OLSR hoặc routing protocol khác, đặt option mesh_fwding '0'; còn client Wi-Fi truy cập mạng bằng cách bridge interface apmesh theo topology của mình.

Gỡ và cài package wpad

Tùy image đang có wpad-mini hay wpad-basic, source yêu cầu gỡ đúng package rồi cài biến thể mesh:

1
2
# opkg remove wpad-mini
# opkg remove wpad-basic
1
# opkg install wpad-mesh-openssl

Cấu hình wireless

Mẫu interface nguồn dùng radio0, network mesh, mode mesh, mesh ID và PSK. your-secret-password là placeholder, tôi thay bằng secret riêng khi triển khai và không commit secret thật:1

1
2
3
4
5
6
7
config wifi-iface 'mesh'
        option network 'mesh'
        option device 'radio0'
        option mode 'mesh'
        option mesh_id 'your-mesh-name' # anything, this connects the nodes into one mesh (plus the password if there's any)
        option encryption 'psk2/aes' # or 'none'
        option key 'your-secret-password'

Có thể xem danh sách tham số mesh bằng:

1
# iw dev <devname> get mesh_param

Sau khi chỉnh /etc/config/wireless, reinitialize Wi-Fi và xem log cùng station dump:

1
2
3
# wifi
# logread -l 20 -f
# iw dev wlan0 station dump

Kiểm tra hardware support

iw list phải có mesh point trong Supported interface modes. Nguồn đưa hai ví dụ về valid interface combinations; tôi giữ cả hai vì radio có thể cho phép AP + mesh point theo giới hạn channel/BI khác nhau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
iw list | grep "Supported interface modes" -A 9

...
      Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
                 * P2P-client
                 * P2P-GO
...
1
2
3
4
5
6
7
8
iw list
...
valid interface combinations:
         * #{ managed, WDS } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1, #{ IBSS } <= 1,
           total <= 2048, #channels <= 1, STA/AP BI must match
         * #{ IBSS, AP, mesh point } <= 1,
           total <= 1, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz }
...
1
2
3
4
5
6
iw list
...
valid interface combinations:
         * #{ managed, P2P-client } <= 2, #{ AP, mesh point, P2P-GO } <= 2,
           total <= 2, #channels <= 1
...

Nếu không có mesh point, dừng lại và tìm driver/radio khác; không cố ép cấu hình.

Dùng command line

Nhánh CLI của nguồn tạo mesh0 trên phy0, xác nhận interface, đưa nó lên và đặt IP ví dụ 10.0.0.1:1

1
iw phy phy0 interface add mesh0 type mp mesh_id mymesh
1
2
3
ifconfig -a | grep mesh0

     mesh0      Link encap:Ethernet  HWaddr 00:18:39:14:48:B5
1
ifconfig mesh0 up
1
ifconfig mesh0 10.0.0.1

Trong ví dụ thật, thay IP theo thiết kế Layer 3 của tôi; việc đặt IP giống nhau trên nhiều node sẽ gây xung đột.

Verify peer và mesh path

Xem station và mesh path bằng:

1
2
iw dev $MESH_IFACE station dump
iw dev $MESH_IFACE mpath dump

Kết quả mẫu có signal, tx bitrate, mesh plink: ESTAB, packet/byte counters và llid/plid. Tôi dùng các trường đó để xác nhận peer đã link, nhưng vẫn đo throughput và latency ở vị trí thực tế; link ESTAB không đảm bảo backhaul nhanh.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
iw dev $MESH_IFACE station dump
    Station 00:15:6d:84:14:10 (on mesh)
         inactive time:  1320 ms
         rx bytes:   352
         rx packets: 4
         tx bytes:   174
         tx packets: 2
         signal:     -61 dBm
         tx bitrate: 1.0 MBit/s
         mesh llid:  32577
         mesh plid:  15969
         mesh plink: ESTAB
    Station 00:15:6d:84:14:09 (on mesh)
         inactive time:  3370 ms
         rx bytes:   1064
         rx packets: 12
         tx bytes:   545
         tx packets: 7
         signal:     -53 dBm
         tx bitrate: 1.0 MBit/s
         mesh llid:  41036
         mesh plid:  24435
         mesh plink: ESTAB

Chặn một peer

Khi cần cô lập một MAC, source yêu cầu gói iw-full nếu bản iw hiện có không đủ, sau đó:

1
iw dev $MESH_IFACE station set $MAC_TO_BLOCK plink_action block
1
mesh plink:        BLOCKED

Kiểm tra lại bằng station dump ở phần trên. Để mở lại:

1
iw dev $MESH_IFACE station set $MAC_TO_UNBLOCK plink_action open

Nguồn lưu ý plink_action không được persist qua mọi lần reconnect. Vì vậy đây là trạng thái runtime, không phải chính sách ACL lâu dài.

Kiểm tra cuối và phục hồi

Tôi test từng node bằng wired client và Wi-Fi client, kiểm tra bridge, DHCP, channel, encryption, log và đường đi tới Mesh Portal. Nếu cấu hình làm mất quản trị, khôi phục /etc/config/wireless từ console hoặc failsafe; không copy nguyên mapping radio/port từ model khác.

Nguồn


  1. https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s — OpenWrt Wiki – 802.11s based wireless mesh network. Nội dung được biên tập độc lập từ snapshot ngày 2021-05-17; các giới hạn phiên bản/driver cần được đối chiếu lại với release hiện tại. ↩︎ ↩︎ ↩︎


0 Bình luận

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