路由器

1 刷机

1.1 斐讯K2

  1. 确定硬件版本,斐讯K2 PSG1218 硬件A2
  2. 更新到官方某个版本,来实现开 telnet、ssh
  3. 刷 breed,相当于 bootloader
  4. EEPROM、编程器固件备份
  5. 刷别人的固件,华硕、padavan(hiboy),见 刷机与固件列表,还可以考虑 自己编译

1.2 小米路由器3G

  1. 下载 开发板 miwifi_r3g_firmware_12f97_2.25.124.bin,登陆路由器页面,系统状态 -> 升级检测 刷入
  2. 开 SSH miwifi_ssh.bin。按照页面提示操作
  3. 刷 breed breed-mt7621-xiaomi-r3g.bin。放入 U 盘后,mtd -r write /extdisks/sda1/breed-mt7621-xiaomi-r3g.bin Bootloader
  4. EEPROM、编程器固件备份。有线网卡 IP 192.168.1.x,断电、按住 reset、接电,路由灯狂闪的时候松开,电脑上在浏览器中输入192.168.1.1,进入 breed 控制台
  5. padavan(hiboy) 中的 MI-R3G_3.4.3.9-099.trx

参考1参考2

1.3 红米 ac2100

  • 原版固件网速快(500M 宽带,两级路由下面 5G WIFI 达到 610M 网速,与直连光猫拨号比少几十M网速),但功能少,无法解决二级路由下设备 IPv6 地址在 PPPoE 重拨后旧地址不消失的问题;而 OpenWrt(开 PPPoE 拨号,有线最高 430M 网速)网速慢,但插件多,支持 IPv6 PD 下发。目前 OpenWrt 固件是大分区单系统,无法双系统切换
  • 刷 OpenWrt 参考
    1. 开 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
    2. 刷固件
      • 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,要先通过 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
      # 之后就可以更新官方固件到最新了

1.4 移动CR8808(红米AX3000)

  • 开 ssh
    • 进 uboot

      • 拆两颗螺丝,撬棒打开顶盖,接上 TTL
        • 网口朝上,从左开始依次是 电源、RXD、GND、TXD,因此从第 2 个开始依次接 TTL 模块 TXD, GND, RXD
      • 修复工具刷 8806 固件。用笔记本的网卡(台式网卡不行,USB 网卡可以),关 defender 防火墙,禁用其它网卡,网线插 1 号 LAN 口,reset 按钮是凹进去的,别和 mesh 组网按钮搞混了
      • 刷好后蓝灯闪烁,插电 5s 内按任意键
    • 开启插电 5s 内任意键进串口,方便以后调试

      1
      2
      3
      setenv boot_wait on
      setenv uart_en 1
      saveenv
    • 改 bdata.bin

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      setenv 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 后重启
      reset
    • telnet 登录,密码通过 sn(包含斜杠/) 算出

    • 可选:开 ssh,原理是给 firewall 配置加一个新的开机启动脚本,脚本放在不会被还原的 /data 下,脚本里面每次还原 ssh 密钥(也备份到 /data 下)并启动 ssh 服务

    • 防火墙配置部分,参考 OpenWrt firewalluci 命令 配,就像 这里 的 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

  1. ip 和 mac 绑定,系统和 bios 要开启对应配置 wol 网络唤醒。如关机后网口灯不亮,说明网卡断电,更新网卡驱动解决。驱动配置中,关闭环保节能和节能乙太网路
  2. 配置 花生壳内网穿透(无公网 ip,无法 ddns 和端口映射)
    • 一个账号只能一台设备,因此已有账号则需要使用子账号的方式,方便实名认证
    • padavan(hiboy) 固件可能出现 /opt 目录未挂载,导致花生壳无法启动,尝试拔掉 U 盘或重启路由器,正常 /opt 挂载为 tmpfs 文件系统
    • 也可以考虑购买开机棒,但不如买个树莓派了
  3. 手机测试使用 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
    • 考虑 免费 frp 服务,为了保证内网服务的安全,应开启 TLS、STCP,为效率可开启 KCP。参考 内网渗透代理之frp的应用与改造
    • 如从简单考虑,或内网要求严格,可识别出 frp 流量特征,可用 ssh,见 1.1.3 隧道/端口转发

3 网络

3.1 IPv6

  • 问题:一级路由 IP 前缀改变(PPPoE 重播)后,怀疑光猫配置为 DHCPv6 stateful 导致,二级路由的 IP 无法及时更新
    • 所以联系客服光猫改桥接,用自己的路由器来控制下级,改前关闭光猫的 WIFI,确认光猫 LAN 口速率,有的光猫只有 LAN1 为千兆
    • 和安装师傅确认,旧光猫桥接最大支持 500M,千兆网才考虑更换光猫
    • 测速时,笔记本从本地硬盘启动系统(不从 USB 启动)接到光猫 LAN1 口,设置 PPPoE 拨号,测速1测速2测速3IPv6 支持检测
    • 联通 500M 测速,ac2100 原版固件 5G WIFI,下行 > 620M,上行 > 40M
  • 一级路由用 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 加回来了,再去掉

5 HTTP/3 TLS 1.3