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. 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 dumpiw 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
Footnotes
-
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. ↩ ↩2 ↩3
Bình Luận & Thảo Luận
Góp ý, hỏi đáp và chia sẻ suy nghĩ của bạn