-
Notifications
You must be signed in to change notification settings - Fork 286
openwrt
-
同一 AC + 多个 AP , 如果多个 AP 在不同房间, 只是需要客户端(比如手机)在移动到不同房间时能快速在不同 AP 间漫游, 这种情况下只需要配置 AC 和 AP 的 openwrt 802.11r , 使用官方默认配置. 在后台
无线-无线安全-802.11r 快速切换打开就可以. 需要注意的是不同 AP 的无线通道不能相同 国内5G通道可选 149,153,157,161,165 部分路由器刚刷完 openwrt 固件看不到这几个通道, 可以在无线的高级设置里国家代码选择 US 就可以看到这几个通道了. -
上面这种情况要求事先布好网线才能 AC + 多个 AP, 很多情况是要求加几个路由器扩展主路由器的无线覆盖范围, 这种情况就要用 802.11s mesh (batman-adv). 路由器最好选择能开启
防火墙-硬件加速(Hardware flow offloading)选项的, 所以至少是 mt7621, 一查洋垃圾里 网件 netgear r6220 比较合适, 几十一个, 市场存量也大. 主路由和扩展路由都必须是 r6220. 为什么不能不同型号混用? 实测无线不稳定, 原因有很多. 担心 r6220 无线弱? 因为用多个路由扩展无线范围, 单个路由的无线强弱并不重要, 实测也不弱, 不用担心. 另外要注意用了 802.11s mesh (batman-adv) 就不要开启 802.11r 了.
参考 文档
这里用命令行设置 主路由和扩展路由, 几分钟设置完
# 设置路由名称, 用于区分
uci set system.@system[0].hostname='mesh1'
# 设置路由时区
uci set system.@system[0].zonename='Asia/Shanghai'
# 主路由设置网关
uci set network.lan.ipaddr='10.0.1.1'
# 禁用 ipv6, 国内 ipv6 还是慢, 可以设置
uci set network.@device[0].ipv6='0'
uci del dhcp.lan.dhcpv6
# 下面是开启路由器硬件加速
uci set firewall.@defaults[0].flow_offloading='1'
uci set firewall.@defaults[0].flow_offloading_hw='1'
# 下面是允许外部访问访问路由器, 建议设置, 方便以后连接路由器修改配置
uci set firewall.@defaults[0].forward='ACCEPT'
uci del firewall.@defaults[0].syn_flood
uci set firewall.@defaults[0].synflood_protect='1'
uci set firewall.@zone[1].input='ACCEPT'
uci set firewall.@zone[1].forward='ACCEPT'
# 保存配置
uci commit
reload_config
# 如果更改了网关你可能需要重新连接路由器
# 注意: batman 要求主路由和所有 mesh 结点路由的无线通道等各项参数相同. 假设 5G无线是 radio1 (路由器刷完 openwrt, 5G 无线可能是 radio0 或 radio1, 你可以到后台看 5G 无线是第一个还是第二个, r6220 是默认 5G 无线 radio1), 名称设置为 `mesh-5G`, 密码是 12345678, 通道选择 149, 按需修改
# 下面这些行都要在主路由和 mesh 节点路由设置
opkg update
opkg remove wpad-basic-wolfssl
opkg install zoneinfo-asia kmod-batman-adv wpad-mesh-openssl batctl-default
uci set network.bat0=interface
uci set network.bat0.proto='batadv'
uci set network.bat0.routing_algo='BATMAN_IV'
uci set network.bat0.aggregated_ogms='1'
uci set network.bat0.ap_isolation='0'
uci set network.bat0.bonding='0'
uci set network.bat0.fragmentation='1'
uci set network.bat0.gw_mode='off'
uci set network.bat0.log_level='0'
uci set network.bat0.orig_interval='1000'
uci set network.bat0.bridge_loop_avoidance='1'
uci set network.bat0.distributed_arp_table='1'
uci set network.bat0.multicast_mode='1'
uci set network.bat0.network_coding='0'
uci set network.bat0.hop_penalty='30'
uci set network.bat0.isolation_mark='0x00000000/0x00000000'
uci set network.nwi_mesh0=interface
uci set network.nwi_mesh0.mtu='2304'
uci set network.nwi_mesh0.proto='batadv_hardif'
uci set network.nwi_mesh0.master='bat0'
uci set network.@device[0].igmp_snooping='1'
uci set network.@device[0].mtu='2304'
uci add_list network.@device[0].ports='bat0'
uci set wireless.mesh0=wifi-iface
uci set wireless.mesh0.device='radio1'
uci set wireless.mesh0.ifname='mesh0'
uci set wireless.mesh0.network='nwi_mesh0'
uci set wireless.mesh0.mode='mesh'
uci set wireless.mesh0.mesh_fwding='0'
uci set wireless.mesh0.mesh_id='mymesh'
uci set wireless.mesh0.encryption='psk2+ccmp'
uci set wireless.mesh0.key='12345678'
uci set wireless.mesh0.mesh_rssi_threshold='-80'
uci del wireless.radio1.disabled
uci set wireless.radio1.country='US'
uci set wireless.radio1.channel='149'
uci set wireless.radio1.cell_density='0'
uci set wireless.default_radio1.ssid='12345678-5G'
uci set wireless.default_radio1.encryption='psk2+ccmp'
uci set wireless.default_radio1.key='12345678'
uci commit
reload_config
reboot
# 上面面这些行都要在主路由和 mesh 节点路由设置
# 下面面这些行只在 mesh 节点路由设置
uci set dhcp.lan.ignore='1'
uci del dhcp.lan.ra
uci del dhcp.lan.ra_flags
uci add_list dhcp.lan.ra_flags='none'
uci commit
reload_config
reboot
-
batctl o和batctl n就能看到生效了 -
提示: 如何连接各个节点路由器来修改配置? 将节点路由器的 lan 口连接主路由的一个 lan 口, 然后在主路由网络中可以查到节点路由器的 IP 地址
- 旁路由(openwrt)尽量不改变当前网络拓扑, 完全没必要将 DHCP 服务器设置在旁路由上, 这很关键, IPv6 设置也简单很多
- 在主路由 DHCP 设置中, 将默认网关和dns设置为旁路由地址, 在旁路由中将网关设置为主路由地址即可
- IPv6 只需要在主路由中设置就可以
- 旁路由无需设置
MASQUERADE
具体到不同的主路由
高级设置 - 内部网络(LAN) - 默认网关 和 DNS server 1 修改成旁路由地址. IPv6 设置选择类型 Native
LAN 设置 - DHCP 服务器 - DHCP 选项 - 添加 6,192.168.2.1 和 3,192.168.2.1 这两项(指定dns和网关的意思), 192.168.2.1 替换成你的旁路由地址. IPv6 设置 默认即可
- 只需要设置 LAN 口, 关闭 IPv6 即可.
- 关键问题 LAN 口 DNS 设置什么? 指定 dns 可以设置为主路由 IP. 当然如果你用的是一键脚本, host(Armbian/PVE) 都安装了 dnscrypt proxy, 所以你可以指定为 host 的 IP
- 如果你的 host(Armbian/PVE) 网关指定的是主路由 IP, 设置就到此为止. 如果 host 网关指定的是旁路由(你可能因为需要在 host 访问外网) IP, 这时候就需要注意 DNS 查询死循环的情况. 旁路由中的 v2ray 需要添加
额外的直连列表IP, 比如一键脚本使用的 dnscrypt proxy 服务器是 dns.alidns.com, 你就要添加 IP223.5.5.5223.6.6.6, 你可以使用命令resolveip dns.alidns.com获得这些 IP
- DHCP 只是负责内网 ip 发放, 与网关、NAT 无关, 即使将旁路由设为 DHCP 服务器, NAT 转换也是主路由的工作, IPv6 也设置麻烦, 尤其是主路由下有多个二级路由, 旁路由接的是二级路由的情况, IPv6 在旁路由内的设置更是复杂