OpenWrt 双频合一 + 多路由 Mesh 组网完整方案
一、架构设计
网络拓扑示例
互联网
|
主路由 (OpenWrt) - 192.168.1.1
| (有线/无线回程)
Mesh节点1 (OpenWrt) - 192.168.1.2
| (无线回程)
Mesh节点2 (OpenWrt) - 192.168.1.3
|
客户端设备 (自动漫游)
二、软件包选择和安装
1. 基础软件包安装
# 所有节点执行
opkg update
# 安装完整的无线和mesh支持(推荐wpad-mesh-wolfssl,轻量)
opkg remove wpad-basic-wolfssl
opkg install wpad-mesh-wolfssl
# 安装mesh相关工具
opkg install iwinfo iw-full batctl batctl-full kmod-batman-adv
# 安装网络诊断工具
opkg install netperf iperf3 tcpdump-mini luci-app-statistics
# 安装LuCI管理界面(可选)
opkg install luci luci-app-meshwizard luci-app-dawn
2. 各版本特性对比
# 根据设备性能选择
# 1. 低配设备(RAM < 128MB):wpad-mesh-wolfssl
# 2. 中配设备(RAM 128-256MB):wpad-mesh-mbedtls
# 3. 高配设备(RAM > 256MB):wpad-mesh-openssl
# 切换版本示例
opkg remove wpad-mesh-wolfssl
opkg install wpad-mesh-openssl
三、双频合一基础配置
1. 主路由配置 (192.168.1.1)
/etc/config/wireless
# 2.4GHz 配置
config wifi-device 'radio0'
option type 'mac80211'
option channel '6'
option htmode 'HT20'
option disabled '0'
option country 'CN'
option txpower '20'
config wifi-iface 'wifinet0'
option device 'radio0'
option mode 'ap'
option ssid 'HomeMesh'
option encryption 'sae-mixed' # WPA3/WPA2混合
option key 'YourSecurePassword123'
option network 'lan'
# 快速漫游配置
option ieee80211r '1'
option mobility_domain 'a1b2'
option ft_over_ds '1'
option ft_psk_generate_local '1'
# 802.11k/v
option ieee80211k '1'
option ieee80211v '1'
# 802.11w 管理帧保护
option ieee80211w '1'
option pmf '1'
# 5GHz 配置
config wifi-device 'radio1'
option type 'mac80211'
option channel '44'
option htmode 'VHT80'
option disabled '0'
option country 'CN'
option txpower '23'
config wifi-iface 'wifinet1'
option device 'radio1'
option mode 'ap'
option ssid 'HomeMesh' # 相同SSID
option encryption 'sae-mixed'
option key 'YourSecurePassword123' # 相同密码
option network 'lan'
# 快速漫游配置(必须与2.4GHz相同)
option ieee80211r '1'
option mobility_domain 'a1b2'
option ft_over_ds '1'
option ft_psk_generate_local '1'
option ieee80211k '1'
option ieee80211v '1'
option ieee80211w '1'
# 5GHz优化参数
option short_gi_80 '1'
option ldpc '1'
option maxassoc '24'
2. 配置DHCP和DNS
/etc/config/dhcp
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv6 'server'
option ra 'server'
# 为mesh节点预留IP
list dhcp_option '6,192.168.1.1' # DNS服务器
option force '1'
四、Mesh组网配置(802.11s + BATMAN-adv)
1. Mesh回程网络配置
方案A:专用5GHz Mesh回程(推荐)
主路由配置:添加Mesh接口
# 在 /etc/config/wireless 中添加
config wifi-iface 'mesh_backhaul'
option device 'radio1' # 使用5GHz radio,如果支持双5GHz更好
option mode 'mesh'
option mesh_id 'MyMeshBackhaul'
option encryption 'sae'
option key 'MeshBackhaulKey456'
option network 'mesh'
option disabled '0'
# Mesh特定参数
option mesh_fwding '1'
option mesh_ttl '5'
option mesh_hwmp_rootmode '3' # Root Announcement模式
option mesh_rssi_threshold '-75'
# 使用802.11s
option mesh_type '802.11s'
方案B:使用现有频段(简化版)
所有节点通用Mesh配置
# 创建Mesh配置文件 /etc/config/mesh
cat > /etc/config/mesh << 'EOF'
config mesh 'setup'
option enabled '1'
option mesh_type '802.11s'
option mesh_id 'HomeMeshNetwork'
option encryption '1'
option key 'MeshSharedKey123'
option frequency '5180' # 5GHz信道
option bandwidth '80'
config batman 'bat0'
option enabled '1'
option aggregation '1'
option gw_mode 'server' # 主路由设为server,节点设为client
option gw_sel_class '20'
option orig_interval '1000'
option fragmentation '1'
EOF
2. BATMAN-adv 配置
/etc/config/network - 添加batman接口
# 所有节点配置
config interface 'bat0'
option proto 'batadv'
option routing_algo 'BATMAN_IV' # 或 BATMAN_V
option aggregated_ogms '1'
option ap_isolation '0'
option bonding '0'
option fragmentation '1'
option gw_mode 'client' # 主路由为 'server'
option gw_sel_class '20'
option orig_interval '1000'
option bridge_loop_avoidance '1'
option distributed_arp_table '1'
option multicast_mode '1'
option network_coding '0'
option hop_penalty '30'
# 将无线接口加入batman
config interface 'mesh'
option proto 'batadv_hardif'
option master 'bat0'
option mtu '1532' # batman需要更大的MTU
3. 多节点网络配置
节点1 (192.168.1.2) - /etc/config/network
# Mesh网络接口
config interface 'mesh'
option proto 'static'
option ipaddr '192.168.100.2' # Mesh管理IP
option netmask '255.255.255.0'
option mtu '1532'
# LAN桥接(接入点模式)
config interface 'lan'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.2'
option netmask '255.255.255.0'
option gateway '192.168.1.1'
option dns '192.168.1.1'
list ports 'eth0' # 有线端口
list ports 'bat0' # 加入batman接口
节点2 (192.168.1.3) - 类似配置,修改IP即可
五、智能漫游优化
1. 安装和配置DAWN(分布式漫游管理器)
# 所有节点安装
opkg install dawn luci-app-dawn
# 配置DAWN
cat > /etc/config/dawn << 'EOF'
config dawn 'global'
option enabled '1'
option max_inactive '300'
option min_probe_count '2'
option min_rssi '-75'
option min_connected_rssi '-65'
option interval '30'
option ht_support '1'
option vht_support '1'
option verify_probability '3'
option use_station_count '1'
option band_steering '1' # 频段引导
option ieee80211k '1'
option ieee80211v '1'
option ieee80211r '1'
config zone 'home'
list network 'lan'
option max_stations '64'
option min_rssi '-75'
option min_connected_rssi '-65'
EOF
2. 创建漫游优化脚本
cat > /usr/bin/roam-optimize.sh << 'EOF'
#!/bin/sh
# 漫游优化脚本
# 设置漫游阈值
set_roam_threshold() {
local iface=$1
local threshold=$2
# 设置RSSI阈值
iw dev $iface set mesh_param mesh_rssi_threshold $threshold 2>/dev/null
# 设置主动漫游参数
echo "roam_threshold=$threshold" > /sys/kernel/debug/ieee80211/phy0/netdev:$iface/roam_params
}
# 为每个接口设置
for iface in $(iw dev | grep Interface | awk '{print $2}'); do
# 获取频段
band=$(iw dev $iface info | grep -o "24\|5" | head -1)
if [ "$band" = "24" ]; then
set_roam_threshold $iface -70 # 2.4GHz阈值
else
set_roam_threshold $iface -75 # 5GHz阈值
fi
# 启用快速切换
iw dev $iface set mesh_param mesh_hwmp_rootmode 4 2>/dev/null
done
# 设置内核参数优化漫游
echo 100 > /proc/sys/net/ipv4/neigh/default/base_reachable_time_ms
echo 50 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
logger "漫游优化已应用"
EOF
chmod +x /usr/bin/roam-optimize.sh
六、高级功能配置
1. 频段引导 (Band Steering)
cat > /usr/bin/band-steering.sh << 'EOF'
#!/bin/sh
# 频段引导脚本
LOG_TAG="BandSteering"
# 日志函数
log() {
logger -t "$LOG_TAG" "$1"
}
steer_client() {
local mac=$1
local current_band=$2
local target_band=$3
# 获取信号强度
local rssi=$(iwinfo $current_band assoclist 2>/dev/null | \
grep -i "$mac" | grep -o "RX: -[0-9]*" | cut -d' ' -f2)
# 获取设备能力
local capabilities=$(iwinfo $current_band assoclist 2>/dev/null | \
grep -i "$mac" | grep -o "VHT\|HT")
# 如果设备支持5GHz且信号较弱,引导到5GHz
if [ -n "$capabilities" ] && [ -n "$rssi" ]; then
if [ "$rssi" -gt -70 ] && [ "$current_band" = "wlan0" ]; then
# 2.4GHz信号好但设备支持5GHz,保持连接
return 0
elif [ "$rssi" -lt -75 ] && [ "$current_band" = "wlan0" ]; then
# 2.4GHz信号弱,尝试断开让设备连接5GHz
log "引导 $mac 从 $current_band 切换到 $target_band (RSSI: $rssi)"
iw dev $current_band station del "$mac" 2>/dev/null
return 1
fi
fi
return 0
}
# 主循环
log "频段引导启动"
while true; do
# 检查2.4GHz客户端
iwinfo wlan0 assoclist 2>/dev/null | grep -E "([0-9A-F]{2}:){5}[0-9A-F]{2}" | while read line; do
mac=$(echo "$line" | awk '{print $1}')
steer_client "$mac" "wlan0" "wlan1"
done
# 检查5GHz客户端
iwinfo wlan1 assoclist 2>/dev/null | grep -E "([0-9A-F]{2}:){5}[0-9A-F]{2}" | while read line; do
mac=$(echo "$line" | awk '{print $1}')
# 如果5GHz信号太弱,可以引导回2.4GHz
rssi=$(echo "$line" | grep -o "RX: -[0-9]*" | cut -d' ' -f2)
if [ -n "$rssi" ] && [ "$rssi" -lt -85 ]; then
log "5GHz信号弱,引导 $mac 回2.4GHz (RSSI: $rssi)"
iw dev wlan1 station del "$mac" 2>/dev/null
fi
done
sleep 30
done
EOF
chmod +x /usr/bin/band-steering.sh
2. 负载均衡
cat > /usr/bin/load-balancer.sh << 'EOF'
#!/bin/sh
# 客户端负载均衡
MAX_CLIENTS_PER_AP=20 # 每个AP最大客户端数
CHECK_INTERVAL=60 # 检查间隔(秒)
balance_load() {
# 获取各AP客户端数量
local clients_2g=$(iwinfo wlan0 assoclist 2>/dev/null | wc -l)
local clients_5g=$(iwinfo wlan1 assoclist 2>/dev/null | wc -l)
# 计算差值
local diff=$((clients_2g - clients_5g))
# 如果差值过大,尝试平衡
if [ ${diff#-} -gt 5 ]; then # 绝对值大于5
if [ $clients_2g -gt $clients_5g ]; then
# 2.4GHz负载高,引导部分客户端到5GHz
iwinfo wlan0 assoclist 2>/dev/null | \
grep -E "([0-9A-F]{2}:){5}[0-9A-F]{2}" | \
tail -$((diff/2)) | while read line; do
mac=$(echo "$line" | awk '{print $1}')
iw dev wlan0 station del "$mac" 2>/dev/null
logger "负载均衡:将客户端 $mac 从2.4GHz断开"
done
fi
fi
}
# 主循环
while true; do
balance_load
sleep $CHECK_INTERVAL
done
EOF
七、网络优化配置
1. 内核参数优化
cat > /etc/sysctl.d/99-mesh-optimize.conf << 'EOF'
# 网络核心参数
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 131072
net.core.wmem_default = 131072
net.core.optmem_max = 65536
net.core.netdev_max_backlog = 5000
# IPv4参数
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 邻居表优化
net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096
net.ipv4.neigh.default.base_reachable_time_ms = 30000
net.ipv4.neigh.default.gc_stale_time = 60
# 无线优化
net.mptcp.enabled = 1
net.mptcp.checksum_enabled = 1
EOF
# 应用配置
sysctl -p /etc/sysctl.d/99-mesh-optimize.conf
2. 无线驱动优化
cat > /etc/modules.d/99-wifi-optimize << 'EOF'
# 无线驱动参数
options ath9k nohwcrypt=1
options ath10k_core skip_otp=y
options mac80211 probe_wait_ms=500
options cfg80211 ieee80211_regdom="CN"
EOF
八、自动配置同步脚本
1. 配置同步脚本
cat > /usr/bin/sync-mesh-config.sh << 'EOF'
#!/bin/sh
# Mesh配置同步脚本
MASTER_ROUTER="192.168.1.1"
CONFIG_FILES="wireless network firewall"
BACKUP_DIR="/etc/mesh-backup"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份
backup_config() {
mkdir -p $BACKUP_DIR/$DATE
for file in $CONFIG_FILES; do
cp /etc/config/$file $BACKUP_DIR/$DATE/
done
}
# 从主路由同步配置
sync_from_master() {
for file in $CONFIG_FILES; do
# 使用scp或tftp下载配置
scp root@$MASTER_ROUTER:/etc/config/$file /tmp/$file.master
if [ -f /tmp/$file.master ]; then
# 合并配置(根据实际情况调整)
merge_config $file
fi
done
}
# 合并配置函数
merge_config() {
local file=$1
case $file in
wireless)
# 保留本地的MAC地址和设备特定设置
grep -E "(option ssid|option encryption|option key|option mesh_id)" /tmp/$file.master > /tmp/master_settings
# 合并到本地配置
uci import $file < /tmp/master_settings
;;
network)
# 只同步Mesh相关配置
grep -A5 -B5 "mesh\|bat0" /tmp/$file.master > /tmp/network_mesh
# 应用配置
;;
esac
}
# 主函数
case "$1" in
backup)
backup_config
;;
sync)
sync_from_master
;;
restore)
restore_config
;;
*)
echo "用法: $0 {backup|sync|restore}"
exit 1
;;
esac
EOF
chmod +x /usr/bin/sync-mesh-config.sh
九、监控和诊断
1. Mesh网络监控面板
cat > /usr/bin/mesh-monitor.sh << 'EOF'
#!/bin/sh
# Mesh网络监控
clear
echo "=== Mesh网络监控面板 ==="
echo "按 Ctrl+C 退出"
echo ""
while true; do
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
# 显示Mesh状态
echo "1. Mesh邻居节点:"
batctl n 2>/dev/null | awk 'NR>1 {print $1, $4, $5, $6}'
echo ""
# 显示无线接口状态
echo "2. 无线接口状态:"
for iface in $(iw dev | grep Interface | awk '{print $2}'); do
echo " $iface:"
echo " 客户端数: $(iwinfo $iface assoclist 2>/dev/null | wc -l)"
freq=$(iw dev $iface info 2>/dev/null | grep channel | awk '{print $2}')
echo " 信道: $freq"
done
echo ""
# 显示系统状态
echo "3. 系统状态:"
echo " CPU负载: $(uptime | awk -F'load average:' '{print $2}')"
echo " 内存使用: $(free -m | awk 'NR==2{printf "%s/%sMB (%.1f%%)", $3,$2,$3*100/$2}')"
echo " 温度: $(sensors 2>/dev/null | grep temp | head -1 | awk '{print $2}')"
echo ""
# 显示网络流量
echo "4. 网络流量 (最近10秒):"
for iface in bat0 wlan0 wlan1; do
if [ -d "/sys/class/net/$iface" ]; then
rx1=$(cat /sys/class/net/$iface/statistics/rx_bytes)
tx1=$(cat /sys/class/net/$iface/statistics/tx_bytes)
sleep 1
rx2=$(cat /sys/class/net/$iface/statistics/rx_bytes)
tx2=$(cat /sys/class/net/$iface/statistics/tx_bytes)
rx_rate=$((($rx2 - $rx1) / 1024))
tx_rate=$((($tx2 - $tx1) / 1024))
echo " $iface: RX ${rx_rate}KB/s | TX ${tx_rate}KB/s"
fi
done
sleep 5
clear
done
EOF
chmod +x /usr/bin/mesh-monitor.sh
2. 自动化诊断工具
cat > /usr/bin/mesh-diagnose.sh << 'EOF'
#!/bin/sh
# Mesh网络诊断工具
echo "=== Mesh网络诊断报告 ==="
echo "生成时间: $(date)"
echo ""
# 1. 检查基础服务
echo "1. 服务状态检查:"
services="network firewall batman-adv dawn"
for service in $services; do
if /etc/init.d/$service enabled > /dev/null 2>&1; then
status="已启用"
else
status="未启用"
fi
echo " $service: $status"
done
echo ""
# 2. 检查Mesh连接
echo "2. Mesh连接状态:"
if command -v batctl > /dev/null; then
echo " BATMAN邻居:"
batctl n 2>/dev/null
else
echo " batctl未安装"
fi
echo ""
# 3. 检查无线接口
echo "3. 无线接口状态:"
iw dev | grep -A5 "Interface"
echo ""
# 4. 检查漫游配置
echo "4. 漫游配置检查:"
for iface in wlan0 wlan1; do
if [ -d "/sys/class/net/$iface" ]; then
echo " $iface:"
iw dev $iface get mesh_param 2>/dev/null | grep rssi
fi
done
echo ""
# 5. 性能测试
echo "5. 网络性能测试:"
echo " 正在测试到主路由的延迟..."
ping -c 5 192.168.1.1 | tail -2
echo ""
# 6. 建议
echo "6. 诊断建议:"
echo " - 确保所有节点使用相同信道"
echo " - 检查节点间信号强度(应大于-75dBm)"
echo " - 确保所有节点时间同步"
echo " - 检查是否有信道干扰"
EOF
chmod +x /usr/bin/mesh-diagnose.sh
十、部署和测试
1. 部署步骤
# 步骤1:准备所有路由器
# 在每个设备上刷入相同版本的OpenWrt
# 步骤2:配置主路由
# 按上述配置设置主路由,确保能正常上网
# 步骤3:配置节点路由
# 复制主路由的无线配置,修改IP地址和角色
# 步骤4:建立Mesh连接
# 启动所有节点,检查batctl n输出
# 步骤5:优化和测试
# 运行诊断脚本,调整信道和功率
2. 测试脚本
cat > /usr/bin/test-mesh-roaming.sh << 'EOF'
#!/bin/sh
# Mesh漫游测试脚本
echo "开始Mesh漫游测试..."
echo "请准备一个客户端设备(如手机)"
echo ""
echo "测试1: 基本连接"
echo "请将设备连接到 'HomeMesh' 网络"
read -p "连接成功后按回车继续..."
echo ""
echo "测试2: 信号强度检查"
echo "请记录设备在各位置的信号强度:"
echo "位置1 (靠近主路由):"
echo "位置2 (中间点):"
echo "位置3 (靠近节点路由):"
read -p "记录完成后按回车继续..."
echo ""
echo "测试3: 漫游测试"
echo "请拿着设备从主路由慢慢走到节点路由"
echo "观察连接是否中断,切换时间应<100ms"
echo "可以使用 ping 192.168.1.1 -t 测试"
read -p "测试完成后按回车继续..."
echo ""
echo "测试4: 双频切换"
echo "请检查设备是否自动连接到5GHz"
echo "如果一直连接2.4GHz,可能需要启用频段引导"
read -p "检查完成后按回车继续..."
echo "测试完成!"
EOF
chmod +x /usr/bin/test-mesh-roaming.sh
十一、故障排除
常见问题解决
# 1. Mesh连接失败
# 检查信道是否一致
iw dev mesh0 info | grep channel
# 检查Mesh ID是否相同
iw dev mesh0 info | grep meshid
# 2. 无法漫游
# 检查802.11k/v/r是否启用
iwinfo wlan0 info | grep -E "802.11"
# 检查DAWN是否运行
/etc/init.d/dawn status
# 3. 性能不佳
# 检查信道干扰
iw dev wlan0 survey dump
# 检查节点距离
# 信号强度应大于-75dBm
# 4. IP冲突
# 检查所有节点IP
cat /etc/config/network | grep ipaddr
这个完整的方案提供了从基础配置到高级优化的所有步骤,您可以根据实际网络环境和设备性能进行调整。建议先从基础的双频合一配置开始,稳定后再逐步添加Mesh和高级功能。
5039

被折叠的 条评论
为什么被折叠?



