-
Notifications
You must be signed in to change notification settings - Fork 293
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='mesh-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 地址
ext4-combined(-efi) 先在 PVE 后台虚拟机硬件配置将硬盘大小增大, 重启虚拟机
opkg update
opkg install fdisk tune2fs resize2fs
fdisk /dev/sda
依次输入命令:
p
d
2
n
p
2
33792
N
w
fdisk /dev/sda
依次输入命令:
i
2
记下输出的 /dev/sda2 UUID
如果有 /boot 目录检查 /boot/grub/grub.cfg 中 UUID 是否和 /dev/sda2 UUID 一致
如果没有 /boot 目录, 执行命令
mkdir /boot
mount /dev/sda1 /boot
并检查 /boot/boot/grub/grub.cfg 中 UUID 是否和 /dev/sda2 UUID 一致
如果不一致(2处) 都要换成 /dev/sda2 UUID, 否则重启后无法再连接
然后执行命令, 有提示就按回车键
mount -o remount,ro /
tune2fs -O^resize_inode /dev/sda2
fsck.ext4 /dev/sda2
e2fsck -f /dev/sda2
reboot
重新连接后执行
resize2fs /dev/sda2
参考文档
先新建虚拟机快照, 以防出错
在
系统
-备份/升级
保存下载配置, 你可以重新新建虚拟机安装新版本 openwrt, 或者按下面步骤升级, 简单一点点, 升级还是会删除所有配置文件, 记得先保存配置!
从 ext4-combined.img.gz 中提取 boot.img, 可以插一块 U 盘到 mac 上
diskutil list
# 看到 U 盘是 /dev/disk2
diskutil unmountDisk /dev/disk2
gzip -d openwrt-xx.xx.x-x86-64-generic-ext4-combined.img.gz
sudo dd if=openwrt-xx.xx.x-x86-64-generic-ext4-combined.img of=/dev/rdisk2 bs=1m
sudo dd if=/dev/disk2s1 of=boot.img
在 PVE 后台虚拟机硬件配置增加一块 1G 硬盘
# 你应该看到有 /dev/sdb
fdisk -l
mkdir /mnt/sdb
mkfs.ext4 /dev/sdb
mount /dev/sdb /mnt/sdb
cd /mnt/sdb
上传上面得到的 boot.img 到虚拟机 /mnt/sdb 下
上传 openwrt-xx.xx.x-x86-64-generic-ext4-rootfs.img.gz 到虚拟机 /mnt/sdb 下
fdisk /dev/sda
依此输入命令:
i
2
记下输出的 /dev/sda2 的 UUID
执行命令
dd if=boot.img of=/dev/sda1
如果有 /boot/ 目录, 查看 /boot/grub/grub.cfg 中 UUID 是否和 /dev/sda2 UUID 一致
如果没有 /boot/ 目录, 执行命令
mount /dev/sda1 /boot
并查看 /boot/boot/grub/grub.cfg 中 UUID 是否和 /dev/sda2 UUID 一致
如果不一致(2处)修改成 /dev/sda2 的 UUID, 否则无法再连接
然后执行
gzip -d openwrt-xx.xx.x-x86-64-generic-ext4-rootfs.img.gz
dd if=openwrt-xx.xx.x-x86-64-generic-ext4-rootfs.img of=/dev/sda2
reboot(pve 后台强制关虚拟机重启)
默认网关又变成 192.168.1.1
访问后台恢复之前保存的配置
如果以前扩容过硬盘, 还需按下面设置
opkg update
opkg install fdisk tune2fs resize2fs
fdisk /dev/sda
依次输入命令:
p
d
2
n
2
33792
回车
N
i
2
w
重新校对 grub.cfg 中 UUID 是否和 /dev/sda2 UUID 一致, 否则无法重连
然后执行命令, 有提示就按回车键
mount -o remount,ro /
tune2fs -O^resize_inode /dev/sda2
fsck.ext4 /dev/sda2
e2fsck -f /dev/sda2
reboot
重新连接后执行
resize2fs /dev/sda2
- 旁路由(openwrt)尽量不改变当前网络拓扑, 完全没必要将 DHCP 服务器设置在旁路由上, 这很关键, IPv6 设置也简单很多
- 在主路由 DHCP 设置中, 将默认网关和dns设置为旁路由地址, 在旁路由中将网关设置为主路由地址即可
- IPv6 只需要在主路由中设置就可以
- 旁路由无需设置
MASQUERADE
具体到不同的主路由
Merlin 主路由
高级设置 - 内部网络(LAN) - 默认网关
和 DNS server 1
修改成旁路由地址. IPv6 设置选择类型 Native
Openwrt 主路由
LAN 设置 - DHCP 服务器 - DHCP 选项 - 添加 6,192.168.2.1
和 3,192.168.2.1
这两项(指定dns和网关的意思), 192.168.2.1 替换成你的旁路由地址. IPv6 设置 默认即可
旁路由(openwrt)
- 只需要设置 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.5
223.6.6.6
, 你可以使用命令resolveip dns.alidns.com
获得这些 IP
- DHCP 只是负责内网 ip 发放, 与网关、NAT 无关, 即使将旁路由设为 DHCP 服务器, NAT 转换也是主路由的工作, IPv6 也设置麻烦, 尤其是主路由下有多个二级路由, 旁路由接的是二级路由的情况, IPv6 在旁路由内的设置更是复杂
Armbian 或者 PVE 如果使用的是一键脚本, 不用往下看了, 因为 dnscrypt-proxy 都安装在了 host
opkg update
opkg install dnscrypt-proxy2
/etc/init.d/dnsmasq stop
uci set dhcp.@dnsmasq[0].noresolv="1"
uci -q delete dhcp.@dnsmasq[0].server
uci add_list dhcp.@dnsmasq[0].server="127.0.0.53"
uci commit dhcp
/etc/init.d/dnsmasq start
cd /etc/dnscrypt-proxy2/
echo "$(awk '!x{x=sub(/.*\[static\..*/," [static.\047alidns-doh-fix\047]")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
echo "$(awk '!x{x=sub(/.*stamp = .*/," stamp = \047sdns://AgAAAAAAAAAAACCY49XlNq8pWM0vfxT3BO9KJ20l4zzWXy5l9eTycnwTMA5kbnMuYWxpZG5zLmNvbQovZG5zLXF1ZXJ5\047")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
echo "$(awk '!x{x=sub(/.*server_names = \[.*/,"server_names = [\047dnspod-doh\047,\047alidns-doh-fix\047]")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
echo "$(awk '!x{x=sub(/^listen_addresses = .*/,"listen_addresses = [\047127.0.0.53:53\047]")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
echo "$(awk '!x{x=sub(/.*require_dnssec = .*/,"require_dnssec = true")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
echo "$(awk '!x{x=sub(/.*bootstrap_resolvers = .*/,"bootstrap_resolvers = [\047114.114.114.114:53\047, \0478.8.8.8:53\047]")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
echo "$(awk '!x{x=sub(/.*netprobe_address = .*/,"netprobe_address = \047114.114.114.114:53\047")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
# 如果要屏蔽 ipv6 dns 查询
echo "$(awk '!x{x=sub(/.*block_ipv6 = .*/,"block_ipv6 = true")}1' dnscrypt-proxy.toml)" > dnscrypt-proxy.toml
reboot