802.11s mesh trên OpenWrt: chuẩn bị wpad, cấu hình và kiểm tra peer
MỤC LỤC BÀI VIẾT (Nhấn để xem)
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. Mình 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 mình 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 ap và mesh 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:
# opkg remove wpad-mini
# opkg remove wpad-basic
# 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, mình thay bằng secret riêng khi triển khai và không commit secret thật:1
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:
# iw dev <devname> get mesh_param
Sau khi chỉnh /etc/config/wireless, reinitialize Wi-Fi và xem log cùng station dump:
# 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; mình giữ cả hai vì radio có thể cho phép AP + mesh point theo giới hạn channel/BI khác nhau:
iw list | grep "Supported interface modes" -A 9
...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
* P2P-client
* P2P-GO
...
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 }
...
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
iw phy phy0 interface add mesh0 type mp mesh_id mymesh
ifconfig -a | grep mesh0
mesh0 Link encap:Ethernet HWaddr 00:18:39:14:48:B5
ifconfig mesh0 up
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:
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. Mình 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.
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 đó:
iw dev $MESH_IFACE station set $MAC_TO_BLOCK plink_action block
mesh plink: BLOCKED
Kiểm tra lại bằng station dump ở phần trên. Để mở lại:
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
Mình 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
https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s — OpenWrt Wiki – 802.11s based wireless mesh network. Cập nhật: 2021-05-17; các giới hạn phiên bản/driver cần được đối chiếu với release hiện tại. ↩︎ ↩︎ ↩︎
OpenWRT
- Chia sẻ ổ USB qua Samba trên OpenWrt: cấu hình, firewall và xử lý lỗi
- DNS over TLS trên OpenWrt với Unbound: cấu hình và kiểm tra rò rỉ DNS
- Dùng USB làm bộ nhớ ngoài cho OpenWrt: driver, phân vùng và automount
- LuCI essentials trên OpenWrt: cài đặt, HTTPS, port thay thế và offline
- Sao lưu và khôi phục cấu hình OpenWrt bằng LuCI và SSH
Bình luận & Thảo luận 0
Chia sẻ thắc mắc, phản hồi hoặc kinh nghiệm thực chiến của bạn