路由器
1 刷机
1.1 斐讯K2
- 确定硬件版本,斐讯K2 PSG1218 硬件A2
- 更新到官方某个版本,来实现开 telnet、ssh
- 刷 breed,相当于 bootloader
- EEPROM、编程器固件备份
- 刷别人的固件,华硕、padavan(hiboy),见 刷机与固件列表,还可以考虑 自己编译
1.2 小米路由器3G
- 下载 开发板 miwifi_r3g_firmware_12f97_2.25.124.bin,登陆路由器页面,系统状态 -> 升级检测 刷入
- 开 SSH miwifi_ssh.bin。按照页面提示操作
- 刷 breed breed-mt7621-xiaomi-r3g.bin。放入 U 盘后,
mtd -r write /extdisks/sda1/breed-mt7621-xiaomi-r3g.bin Bootloader
- EEPROM、编程器固件备份。有线网卡 IP 192.168.1.x,断电、按住 reset、接电,路由灯狂闪的时候松开,电脑上在浏览器中输入192.168.1.1,进入 breed 控制台
- 刷 padavan(hiboy) 中的
MI-R3G_3.4.3.9-099.trx
1.3 红米 ac2100
- 原版固件网速快(500M 宽带,两级路由下面 5G WIFI 达到 610M 网速,与直连光猫拨号比少几十M网速),但功能少,无法解决二级路由下设备 IPv6 地址在 PPPoE 重拨后旧地址不消失的问题;而 OpenWrt(开 PPPoE 拨号,有线最高 430M 网速)网速慢,但插件多,支持 IPv6 PD 下发。目前 OpenWrt 固件是大分区单系统,无法双系统切换
- 刷 OpenWrt 参考
- 开 SSH。用官方修复工具降级到有漏洞版本 2.0.7 开 SSH
1
2
3
4
5
6
7替换 <STOK>
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B
root 密码 admin - 刷固件
- 下 OpenWrt 官方固件,openwrt-22.03.0-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-kernel1.bin、openwrt-22.03.0-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-rootfs0.bin
- 两个文件用 WinSCP 传到 /tmp 下
1
2
3
4
5
6
7
8# 看当前分区
cat /proc/mtd
nvram set flag_try_sys1_failed=1
nvram commit
cd /tmp
mtd write openwrt-22.03.0-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-kernel1.bin kernel1
mtd write openwrt-22.03.0-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-rootfs0.bin rootfs0
reboot - 另一种 breed 法,不推荐,还原原版要先还原 bootloader
- 刷 Breed,scp 传到 /tmp 下,
mtd -r write /tmp/breed-mt7621-xiaomi-r3g.bin Bootloader
- 进 Breed,固件更新,闪存布局选 OpenWrt,也可以刷老毛子 padavan,有些 padavan 能到 600M 以上,没测试
- 刷 Breed,scp 传到 /tmp 下,
- 开 SSH。用官方修复工具降级到有漏洞版本 2.0.7 开 SSH
- 刷回原版或原版降级:如果刷过 breed,要先通过 breed 恢复原版 bootloader(原版才能用修复工具),然后修复工具刷 2.0.7(台式网卡不行,USB 网卡可以)
- 想一直用原版固件,借鉴 autossh 的 方法 固化 SSH,在 firewall 配置添加一个自启脚本 autossh.sh,之后就可以升级官方固件了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 改密码
passwd
mkdir /data/auto_ssh
cd /data/auto_ssh
# WinSCP 传进来 auto_ssh.sh
chmod +x auto_ssh.sh
./auto_ssh.sh
# 应该存在 dropbear_rsa_host_key
ls
uci set firewall.auto_ssh=include
uci set firewall.auto_ssh.type='script'
uci set firewall.auto_ssh.path='/data/auto_ssh/auto_ssh.sh'
uci set firewall.auto_ssh.enabled='1'
# 确认修改
uci changes firewall
uci commit firewall
# 之后就可以更新官方固件到最新了
- 想一直用原版固件,借鉴 autossh 的 方法 固化 SSH,在 firewall 配置添加一个自启脚本 autossh.sh,之后就可以升级官方固件了
1.4 移动CR8808(红米AX3000)
- 开 ssh
进 uboot
- 拆两颗螺丝,撬棒打开顶盖,接上 TTL
- 网口朝上,从左开始依次是 电源、RXD、GND、TXD,因此从第 2 个开始依次接 TTL 模块 TXD, GND, RXD
- 修复工具刷 8806 固件。用笔记本的网卡(台式网卡不行,USB 网卡可以),关 defender 防火墙,禁用其它网卡,网线插 1 号 LAN 口,reset 按钮是凹进去的,别和 mesh 组网按钮搞混了
- 刷好后蓝灯闪烁,插电 5s 内按任意键
- 拆两颗螺丝,撬棒打开顶盖,接上 TTL
开启插电 5s 内任意键进串口,方便以后调试
1
2
3setenv boot_wait on
setenv uart_en 1
saveenv改 bdata.bin
1
2
3
4
5
6
7
8
9
10
11
12
13setenv ipaddr 192.168.1.2
setenv serverip 192.168.1.1
# 查看分区信息
smeminfo
# 打开 tftpd64.exe 后选择对应IP地址,回到命令窗口输入以下命令提取 bdata 分区
nand read 0x44000000 0x900000 0x80000
tftpput 0x44000000 0x80000 bdata.bin
# 备份后,用 WinHEX 修改 bdata.bin
# 修改方法见下方 详细步骤2
# 上传回去并写入
tftpboot bdata.bin && nand erase 0x900000 0x80000 && nand write 0x44000000 0x900000 0x80000
# 写入 ok 后重启
resettelnet 登录,密码通过 sn(包含斜杠/) 算出
可选:开 ssh,原理是给 firewall 配置加一个新的开机启动脚本,脚本放在不会被还原的 /data 下,脚本里面每次还原 ssh 密钥(也备份到 /data 下)并启动 ssh 服务
防火墙配置部分,参考 OpenWrt firewall 用 uci 命令 配,就像 这里 的 ssh 自启动一样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# 查看当前防火墙配置
uci show firewall
# 允许 ping 内网
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-ICMPv6-Forward'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest='*'
uci set firewall.@rule[-1].proto='icmp'
uci add_list firewall.@rule[-1].icmp_type='echo-request'
uci add_list firewall.@rule[-1].icmp_type='echo-reply'
uci add_list firewall.@rule[-1].icmp_type='destination-unreachable'
uci add_list firewall.@rule[-1].icmp_type='packet-too-big'
uci add_list firewall.@rule[-1].icmp_type='time-exceeded'
uci add_list firewall.@rule[-1].icmp_type='bad-header'
uci add_list firewall.@rule[-1].icmp_type='unknown-header-type'
uci set firewall.@rule[-1].limit='1000/sec'
uci set firewall.@rule[-1].family='ipv6'
uci set firewall.@rule[-1].target='ACCEPT'
# 确认修改
uci changes
# 让修改生效,用 ip6tables 也能配,但重启后会丢配置
uci commit firewall
/etc/init.d/firewall restart
# 查看配置
uci show firewall.@rule[-1]
cat /etc/config/firewall参考
- 装插件
- 刷固件:在 uboot 或 ssh 里面刷,目前固件 2.4G wifi 信号不稳,刷 openwrt1、刷 openwrt2
参考 烧写代码,
ubiformat /dev/mtd19 -f openwrt-ipq50xx-arm-redmi_ax3000-squashfs-nand-factory.ubi
,将 OpenWrt 烧到 system2,原版在 system1,为双系统,切换系统命令如下1
2
3
4
5
6
7
8
9
10
11
12
13# 显示 ubi.mtd=rootfs 说明当前为 system1,ubi.mtd=rootfs_1 为 system2
cat /proc/cmdline
# system1 切 system2,原版切到 OpenWrt
nvram set flag_last_success=1
nvram set flag_boot_rootfs=1
nvram commit
reboot
# system2 切 system1,OpenWrt 切到原版
fw_setenv flag_last_success 0
fw_setenv flag_boot_rootfs 0
reboot由于 ac2100 刷 openwrt 做一级路由拨号时,最大速度只有 450M,故将 CR8808 刷 openwrt 做一级路由(关 wifi,网线接二级路由,所以固件信号问题不影响),ac2100 刷回做二级路由,虽然原版 WIFI 速度快,但无法解决二级路由下设备 IPv6 地址在 PPPoE 重拨后旧地址不消失的问题(netsh interface ipv6 show siteprefixes,怀疑没有发送 RA 中 Router lifetime 为 0, Prefix information 中 Valid Lifetime 为 0 的报文,能确认 OpenWrt 发了,让旧的 prefix 失效),故也刷 OpenWrt
可改分区表 mtd1 MIBIB 实现增加 OpenWrt Flash 空间,未尝试,这样可能就是 OpenWrt 单系统,没有原版系统了
- 路由器无线加密方式“WPA3/WPA2”,Windows 查看是否支持 WIFI6(802.11ax) 和 WPA3 命令
netsh wlan show drivers
- 刷回原版或原版降级:见上面系统切换命令,原版系统已开 telnet。注意:如要用修复工具还原原版,则需要重新拆机开启 telnet
2 远程管理
2.1 WOL
- ip 和 mac 绑定,系统和 bios 要开启对应配置 wol 网络唤醒。如关机后网口灯不亮,说明网卡断电,更新网卡驱动解决。驱动配置中,关闭环保节能和节能乙太网路
- 配置 花生壳内网穿透(无公网 ip,无法 ddns 和端口映射)
- 一个账号只能一台设备,因此已有账号则需要使用子账号的方式,方便实名认证
- padavan(hiboy) 固件可能出现 /opt 目录未挂载,导致花生壳无法启动,尝试拔掉 U 盘或重启路由器,正常 /opt 挂载为 tmpfs 文件系统
- 也可以考虑购买开机棒,但不如买个树莓派了
- 手机测试使用 google play 中的 wake on lan,pc 测试使用 Wake On Lan 又名 aquilaWOL
2.2 U盘访问
- 页面 USB 应用程序开启 samba 后,win10 仍无法访问。运行 gpedit.msc,计算机配置 -> 管理模版 -> 网络 -> Laman 工作站,启动不安全的来宾登录
- 挂载 USB 可能出现 readonly,格式化 U 盘解决
2.3 内网穿透
- 正向代理、反向代理、内网穿透介绍
- 代理作为客户端,因此可用来隐藏客户端 IP
- 代理作为服务器,因此可用来隐藏服务器 IP
- 客户端部分用 proxychains
- 路由器
- 代理服务器端开内网穿透,注意是否提供源码(目前只有花生壳)或有路由器架构的程序
- 转发到本地的 HTTP 代理服务器,使用 tinyproxy
- 下载 openwrt 交叉编译工具
- 对 gcc 找不到 32 位
libz.so.1
,安装sudo apt-get install zlib1g:i386
又会提示有风险的情况- 手动下载包
sudo apt-get download zlib1g:i386
- 解压到某个目录
dpkg-deb -R *.deb tmp
- 通过
export LD_LIBRARY_PATH=/tmp
指定库路径运行 gcc
- 手动下载包
- 对于提示程序 not found 的情况,gcc -static 静态链接 libc
- 对 gcc 找不到 32 位
- 考虑 免费 frp 服务,为了保证内网服务的安全,应开启 TLS、STCP,为效率可开启 KCP。参考 内网渗透代理之frp的应用与改造
- 如从简单考虑,或内网要求严格,可识别出 frp 流量特征,可用 ssh,见 1.1.3 隧道/端口转发
3 网络
3.1 IPv6
- 问题:一级路由 IP 前缀改变(PPPoE 重播)后,怀疑光猫配置为 DHCPv6 stateful 导致,二级路由的 IP 无法及时更新
- 一级路由用 OpenWrt 以支持 PD 下发和对 DHCPv6 的精确控制
- 对上级不下发 PD 时(一般为校园网),二级路由器的配置
- IPv6 中继是 3 层,桥接是 2 层,报文进 3 层配置的防火墙和路由才能生效,因此想简单就用中继,更细的可以只让配置包(SLAAC 与 NDP 包)走 2 层桥接
- 参考:中继、中继或桥接、数据包中继+配置包桥接
- 防火墙,配置防火墙暴露 windows 设备、配置防火墙暴露 linux 设备 token address、使用不连续掩码
- 像小米原生固件,没有配置界面的,可用 uci 命令来配,见 CR8808 防火墙部分
- IPv6 DDNS,考虑用一个猜不到的长域名来隐藏 IP
- 查看上级是否下发 IPv6-PD 方法,
ip -6 r
,default 两条,其中一条 ::/60
3.2 ShellClash
- ShellClash 装在外置存储(OpenWrt 是 /mnt),订阅必须经过在线转换才能用,Nft基础/Nft混合 都可以(新版 OpenWrt 没有 iptables)
- clash 资源占用高,偶尔需要全局透明代理时再开启
4 无线桥接
4.1 padavan(老毛子)
- 无线2.4GHz,无线桥接,AP 工作模式 “AP-Client + AP”,无线 AP-Client 角色 “WAN(Wireless ISP)”,选择 SSID,输入密钥
- 外部网络(WAN),外网连接类型 “IPoE动态 IP”
4.2 openwrt
- openwrt 无线桥接,master 向外发射信号,client 接收信号。openwrt 接口名、红米 ac2100 无线中继 client 模式
- 红米 ac2100 的固件中,无线中继后会生成接口 apcli0 (对于 5G 是 apclii0)。在接口设置中,把这个接口设置成 wan 口的物理接口,替换调原来的 eth0.1
- apcli0 (wan 口) 的网关和 dns 设置成上级的 ip(如 192.168.0.1),接口 ip 设置成与上级同一网段(如 192.168.0.2)
- lan 口是 eth0.2、ra0、rai0 的桥接,ip 设置为内网要分配的网段,网关、dns 设为 wan 口的 ip(如 192.168.0.2)
- 接口设置完后可能要在无线中“重启无线”,接下来 lan 口的桥接可能又把 apcli0、apclii0 加回来了,再去掉