博主头像

人間になりたい!!!!!


皖ICP备2025096275号

家庭网络优化: 利用 FakeMesh + 802.11k/v/r 漫游做到全屋 WiFi 无死角覆盖

前言

博主最近在思考如何优化自己的家庭网络环境时, 突然想到对家里的 WiFi 进行一个优化. 由于博主自己是一个人使用一台 AP 的, 所以对 WiFi 信号一直都觉得挺好的. 但是最近家里人和博主反映说家里的 WiFi 信号不是很好, 且走到某个房间里时就基本没信号了. 博主自己使用的是一台小米 AX3600, 但是家里其他人使用的却是一台很普通的 WiFi5 路由器. 所以博主打算给全屋 WiFi 进行一个更新.

现状

目前的 WiFi 环境是这样的: 博主自己使用 AX3600 拥有一个单独的 SSID, 发射功率和穿墙性能都还可以. 家里人使用的一台 ASUS WiFi5 路由器的功率和穿墙性能都不太行. 对于博主当前家里的这个户型来说很不友好.

优化思路

目前打算购置两台能刷 OpenWrt 软路由系统的硬路由, 然后配置 FakeMesh, 统一由主路由管理 SSID 和密码之类的配置. 然后两台路由器运行 802.11kvr (WiFi 漫游), 以此来实现自动分配信号更好的 AP. 在网上看了一圈, 发现小米 AX1800 刚好能满足这个需求, 且价格很便宜 (目前二手平台 40 左右就能买到), 所以买了两台 AX3600, 刷了 X-wrt, 准备来做这么一个配置. 当然博主自己使用的 AX3600 因为有特殊需求, 所以不参与这个网络的构建.

注: 本文的方案适用于纯 OpenWrt 系列操作系统环境. 如果你想将你的 OpenWrt 路由器和其他硬路由 / AP 等设备进行 WiFi 漫游, 则可以参考 家庭网络更新 - 猫棒 + 802.11k/v/r 漫游 - Kagura iYoRoy

开整

1. 统一内网网段

博主的规划是整个内网使用同一个网段, 因此所有路由器必须处于 AP 模式, 不再承担 DHCP Server 和 NAT 工作, 由主路由负责, 而不是 AP.

  • 启动 AP, 接入内网, 打开 WebUI.
  • 进入 Network -> Interface 页面, 找到并编辑 lan 接口. 将其 IPv4 地址设置为处于主网段但不与其他设备冲突的地址, 这里博主设置为 192.168.1.253. 然后将网关设置为主路由.
  • 切换到 DHCP Server 选项卡, 勾选 Ignore Interface 选项以完全禁用其 DHCP Server, 然后点击 Save 保存
  • 删除 wanwan6 接口
  • 切换到 Devices 选项卡, 找到 br-lan 接口的 Configure 按钮并点击进行配置
  • 勾选所有物理接口和 AP 并单击保存

    如果你的情况和我一样, 这里列出的接口是 Switch VLAN 类型而不是 Ethernet Adapter, 可以通过这个方式来查找接口.

    • 切换到 Network -> Switch 页面

      从这里我们可以看出, LAN1, LAN2, LAN3 处于 VLAN 1 中, 模式为 Access, 由 CPU (eth0) 负责流量转发, WAN 处于 VLAN 2 中, 由 CPU (eth1) 负责流量转发. 所以上图中的 Switch VLAN: "eth0.1" 就是所有 LAN 口, Switch VLAN: "eth1.2" 就是 WAN 口.
      同时这种情况还可能导致下游设备没法拿到 IPv6 地址. 这里我们检查 eth0.1, eth1.2 的配置页面, 将 IPv6 Enabled 选项手动改为 enabled.
  • 做好所有配置后, 单击 Save&Apply 保存并应用.
  • 等待一段时间后, 尝试连接 WiFi, 查看 WiFi 属性

    可以看到这里已经成功拿到公网 IPv6 地址和 192.168.1.0/24 网段的 IPv4 地址.
这样的配置在两台路由器上都需要进行

2. 启用 FakeMesh

FakeMesh 是 OpenWrt 提供的一个轻量级, 软件模拟的 Mesh 组网功能. 它能够做到在多台 AP 设备中进行统一的配置管理, 实现无缝漫游, 并且简化多路由网络管理.

2.1 主路由配置

  • 进入 Mesh -> FakeMesh 页面, 勾选 Enable 启用功能
  • 在 Mesh ID 处创建当前 Mesh 会话的标识符. 这里建议不要填写英文字母, 下划线, 数字以外的特殊字符, 以免出现编码错误.
  • 在 Key 中创建当前 Mesh 会话的加密密钥
  • 在 Band 中选择 5G
  • 在 Role 处切换至 Controller (AC) 模式

    模式解释

    • Wired AP 表示该设备为被控制有线 AP
    • Agent 表示该设备用于无线 Mesh 组网
  • 勾选 Sync Configuration 同步配置
  • Band Steering Helper 中选择 usteer

    • usteer: OpenWrt 官方的轻量级漫游辅助工具, 简单稳定
    • DAWN: 一个功能更强大的第三方漫游辅助工具, 算法更复杂. 这里考虑到路由器的性能, 不做选择.
    • None: 关闭漫游辅助功能
关于 Controller Access IP: 这个地址是 FakeMesh 控制器设置的一个固定 IP, 方便你在局域网内访问它的 WebUI. 通常情况下不需要修改, 保持默认值 10.10.10.1 即可. 这个 IP 是 FakeMesh 在内部网络中用于服务发现的, 不会和你的主路由 LAN 口 IP 产生冲突. 平时管理主路由还是使用 LAN 口的 IP 去管理. 当然, 如果你的网络环境中 10.10.10.1 这个地址存在冲突, 那你当然可以换掉它. 但请记住在 AP 中配置时也要填写相应的 IP.
关于 Disable Fronthaul: 该功能用于开关当前节点的 SSID 广播功能. 如果你不希望当前节点发射 SSID 信号, 则可以勾选它. 在博主的配置场景中, 主路由不具备 WiFi 信号发射功能, 所以这里可以勾选

  • 配置完成后点击 Save&Apply. 应用成功后, 下方的 Wireless Management 板块会出现一个 WiFi SSID. 这里我们点击编辑
  • 在弹出的对话框中配置你想要的 SSID, 加密方式, 频段和密码. 填写完成后再次点击保存并应用.

到这里为止, 主路由 FakeMesh 的配置就结束了

2.2 AP 配置

  • 进入 Mesh -> FakeMesh 页面, 勾选 Enable 启用功能
  • 在下面的信息中填入你刚才在主路由中配置的信息, 并将 Role 切换为 Wired AP (Ethernet backhaul) 模式
  • 信息填写完成后单击保存并应用.
    届时, AP 设备原有的 IP 地址将会失效, 此时需要进入主路由的 Mesh -> Usteer 页面查看

可以看到这里有一台 AP 已经上线. 我们使用页面中所给的 192.168.1.182 访问 AP 的后台

  • 登录后台, 切换到 Network -> Interface 页面
  • 点击 meshx0 接口的编辑按钮, 将其从 DHCP Client 切换到 Static Address 协议
  • 输入你之前设定的 IP 地址信息, 然后点击保存并提交. 之后使用你设置的新 IP 访问 AP 后台.
  • 切换到 Network -> Wireless 查看 WiFi 发射信息. 如果看到刚才在主路由上配置的 SSID 有正确发送, 则证明配置成功.

如果你配置完成后, AP 侧已经同步了相关配置信息, 但是就是没有发送 WiFi 信号. 别急, 这不是你的问题.
经过分析, 这是由于主路由 FakeMesh 控制器的 wifim 配置中缺少 band 选项. 在 AP 侧, 生成 WiFi 信号的主要逻辑在 agent_sync_config 函数中:

  while uci get fakemeshac.@wifim[$J] &>/dev/null; do
          ssid=$(uci get fakemeshac.@wifim[$J].ssid)
          encryption=$(uci get fakemeshac.@wifim[$J].encryption)
          key=$(uci get fakemeshac.@wifim[$J].key)
          bands=$(uci get fakemeshac.@wifim[$J].band)    # ← 关键!
          enabled=$(uci get fakemeshac.@wifim[$J].enabled || echo 1)

          [ "$bands" = "2g5g" ] && bands="2g 5g"

          [ "$enabled" = "1" ] && {
              for band in $bands; do                      # ← band 为空则循环不执行!
                  for wbandstr in $(uci show wireless | grep .band=\'${band}\'$); do
                      radio=$(echo $wbandstr | cut -d\. -f2)
                      uci set wireless.wifinet$K=wifi-iface
                      uci set wireless.wifinet$K.device="${radio}"
                      # ... 设置 SSID、加密、802.11r/k/v 等
                      K=$((K+1))
                  done
              done
          }
          J=$((J+1))
      done

控制器的 wifim 配置没有 band 选项, 导致 AP 同步配置后无法匹配任何 radio, 客户端 WiFi 接口从未被创建. 初步判断这可能是 OpenWrt 系统的 Bug. 现在来进行修复

  • 登录主路由 SSH, 执行以下指令

    uci set fakemesh.@wifim[0].band="2g5g"
    uci commit fakemesh
  • 登录 AP SSH, 执行以下指令

    uci delete fakemesh.default.wifim_md5
    uci commit fakemesh
    /etc/init.d/fakemesh restart
  • 等待 20s 左右, 让 FakeMesh 完成同步. 届时你就应该能看到 WiFi 信号正确创建.

至此, AP 侧配置完成.

相应的配置在两台 AP 上都需要执行.

3. 测试

在两台 AP 上都配置完成后, 再次打开主路由的 Network -> Usteer 页面. 应当能看到两台 AP 接入

此时打开手机的 WiFi 页面检查, 理应能看到 4 个 AP 接入点. (双 2.5G, 双 5G)

连接上网络后, 四处走动观察首选 AP 连接状况变化

AP 1

AP 2

可以看到, AP 确实有在按照信号强度切换.

最后使用 SpeedTest 对网络速率进行测试

博主家里是 2000Mbps 宽带, 路由器的接口速率为 1Gbps, 这里局限于路由器性能, 跑到 700Mbps 属正常水平, 故测试正常!

至此, 配置全部结束


后记

本人非专业人士, 如有错误或疏漏请直接指出! 感谢您的阅读!

家庭网络优化: 利用 FakeMesh + 802.11k/v/r 漫游做到全屋 WiFi 无死角覆盖
https://blog.nanami.tech/archives/344/
本文作者 Madobi Nanami
发布时间 2026-07-27
许可协议 CC BY-NC-SA 4.0
发表新评论