本帖最后由 Blzadx 于 2024-4-16 15:04 编辑
讲故事环节。
自己一直在用RM2100,虽然它已经成了很多人眼里的电子垃圾,但作为接入500M以下宽带的家庭主路由还是绰绰有余的。一直想找一个自己满意的固件,包括无线性能达标,有硬件NAT,有干净的DNS,最好还有KMS和游戏加速器。
padavan我其实很喜欢,很成熟的系统,就是古旧的内核和古老的asp让人膈应,看着就不想动它。也找到过一个只带adguardhome的4.14内核的固件,但是启动脚本太扯淡了,要把/usr/bin/下的执行文件复制到/var/(也就是tmp,吃内存)下运行(执行文件挺大的,我觉得做个硬链接也能理解啊),让本就捉急的内存更加窘迫,我一用域名文件分流整个路由器就卡死了。但padavan跟openwrt不一样,没有overlay,整个文件系统不可写,启动脚本甚至直接放在/usr/bin里,我啥也改不了。后来找到源码,原来是meisreallyba的,就自己学着编译了,顺便更新一下agh的版本。但一上机,内存还是吃不消,于是暂时放弃集成插件了。
在折腾padavan期间,我也搜到过别的固件,像是paldier的swrt,看上去很厉害,不仅驱动版本很新,还有smartdns和uu,甚至支持华硕app的所有功能,就是ipv6上不了网,也不知道什么原因。但最大的问题还是固件太庞大了,我只开了smartdns还每2小时崩溃一次,而且swrt和padavan一样,都是asuswrt体系,只有squash,没有overlay,我也没法直接删东西。看一下源码更是大得吓人,github自己都没index过来,我更看不过来,不得不放弃自行编译。
于是最后又不得不把目光放到openwrt上。我其实在5年前刚买RM2100挑固件时就听人说op固件不稳定,h大的padavan最适合日用,从那会儿起就对op固件有点偏见。但想起OP在x86小主机上用得又挺稳定,我又抱有一丝侥幸,如果能调整出一个稳定的op固件,那RM2100就真的完美了。然后去OP官网下载了最新的固件,马上当头一棒,开源驱动的无线性能大跌,虽然管理页面挺好看的,但我还是想要完整的无线性能。在收集闭源驱动信息的时候,发现lean的lede源码是集成了闭源驱动的,去试了一下,性能完整,但小问题真的很膈应,开机没有5G,调整网络配置就直接掉无线。但没办法,也将就用了一段时间。
在这段时间里看到有人用237的源码编译了据说很稳定的自用固件,也去尝试了一下,一开始确实很稳定,也没有lede的小问题,唯一美中不足的就是控制面板还是有显示错误,不过这个问题各大使用闭源驱动的源码都有,也没太纠结。但是用了半个月,突然发现5GWIFI很卡,各种排查下来,发现5G锁20MHZ了,无论怎么调整无线参数都会出现这个问题。为此又花了很长时间搜集信息,之前还发帖一边分享收集到的信息一边求助,可惜还是没解决。但是在坛友的指点下我找到了hanwckf的immotal798x里更新的控制面板,移植过来也没啥大问题,就是部分监控指标可能没被驱动实现,读取不到,其他能显示出来的参数都正常显示了。而5G的问题则在误打误撞中,用原厂的无线参数解决了。然后就这样又用了几个月。
不巧的是,在最近一次pull237的源码之后,编译出的固件内存会随时间自动减少,最终整个系统都卡死,我到现在也没排查出原因。不过幸运的是,在研究237的immortal源码期间,我找到了解决lede固件小问题的方法,其实只要改两处地方,所有的小问题就都解决了,具体我后面会讲。于是我又用回了lede源码,并且将这段时间里研究的所有成果集于一体,编译出了我自认为最完美的固件,闭源驱动+原厂参数带来的完整无线性能,全新的正常运作的控制面板,联发科SDK的硬件NAT,用国内分流和DOT实现了防污染防泄漏的smartdns,还有从原厂移植过来的支持PC和手机的UU加速器。如果不出意外,这个固件应该会一直用到机器淘汰。不过如果237那里把内存泄漏问题解决的话,我还是乐意换回他的源码,因为内核比较新,虽然我也不知道新内核好在哪,但是开机后占用的内存确实更少。
固件链接:https://pan.baidu.com/s/1Ynz3_DFlWhYozek6bPQxaQ 提取码: gewn
发现有部分坛友不会使用这个固件,可能是我没说明清楚。这个固件是sysupgrade固件,是在页面里直接升级刷入的。因为我自己在折腾的过程中每个版本都是直接从页面升级的,所以只保存了sysupgrade固件,factory和kernel以及rootfs我没保存。只要原先是openwrt主线固件或者lede固件就能直接在页面里升级刷入,如果原先不是这两种类型的,请先到op官网下载initramfs刷入再升级。
下面是对固件的说明。
系统特性:闭源驱动(7603E:4.1.2.0,7615E:5.1.0.0),官方固件2.0.23提取的无线参数(5G有KV,MIUI可以在无线设置里直接跳转后台页面,也可以直接看到WIFI后面的MI标识),mtk-sdk的硬件NAT, 新的无线控制面板(第一次打开会报错,不用管,刷新页面后就再也不会出现了,下面的监控面板时而正常时而不正常,大概是驱动太久远了)。 IPV6,ZRAM(128M内存直开smartdns还是吃不消,得加ZRAM)。
软件特性:已经配置好了分流域名列表自动更新和分流服务器组的smartdns(国内外都是DOH和DOT,防污染防泄漏,有能力可以自己在custom里把本地运营商的DNS加上,还可以享受国内CDN加速),
灵缇加速器(游戏加速器,比UU便宜,但依旧只能加速主机),UU加速器(花了点时间从官方固件里移植过来了,支持加速PC和手机),
KMS服务器(批量激活服务器),upnp(P2P需要用),ddns(我用不到),TTYD(网页终端)
截图里最底下的带宽监控(nlbwmon)我给删了,开启硬件NAT后是测不准的,应该没人想关闭硬件加速留着这个吧?
默认WIFI(无密码):Openwrt,Openwrt-5G
关于smartdns,有一点提醒一下(其实我觉得应该不需要我提醒的,但还是怕有些人不清楚),第一次打开smartdns的之前,请手动更新一下域名分流文件(或者等第二天五点自动更新),这东西我没有预置在固件里,因为我觉得预置这东西很奇怪。
没有这份文件其实smartdns也能运行,只是根据我写的规则,所有的查询都走国际DOT了,国内网站的解析速度可能会有折扣,除非你本来就全局使用8.8.8.8这种国际DNS。
下面说明一下我写的规则,都写在costum.conf里了,可以在下图输入框直接改。
我设计的查询规则大致是,设置两组服务器,第一组国内服务器,专门查询国内域名,并允许返回IPV6地址;第二组国际服务器,专门查询其余域名,并仅允许IPV4地址。
我先说明一些smartdns的查询逻辑,再说明我写的配置文件。详细的可以自己看官网文档。
- smartdns有服务器和服务器组的概念,你可以为每个服务器设定它所属的服务器组,这个框架在设计查询规则的时候很有用。
- smartdns自己会自动创建一个“默认组”,每个服务器,不论你给不给它设定服务器组,或者将它设定到哪个服务器组,smartdns都会自动将其加入“默认组”,除非你设定不要将其加入“默认组”。
- 当smartdns收到客户端的查询请求时,会根据配置文件中的规则一条条匹配处理(主要就是决定用什么服务器或组去查询),如果最终没有适用的规则,就使用“默认组”进行查询。
第一行的测速模式不是我写的,是仓库内置的,这个不用管。
第二大行开始带server的是各个服务器。 我分了两组,第一组是国内DOH,并且将它排除默认服务器组;第二组是国际DOT;最后一个server是用阿里公共DNS,用于解析DOH。
domain-set,就如字面意思是域名集合,我引入的就是设定好了每天5点自动更新的国内域名列表。
domain-rules,对刚才的domain-set设定规则:其中的域名仅通过国内DOH进行解析,并且允许返回IPV6(我在“高级设置”的页面那里全局停用了IPV6解析)。
打#的是注释内容,不起作用。其中domain-set是广告域名集合,因为RM2100内存太小了,我就停用了。
其余下面所有带#的是仓库内置的服务器,因为国内连接质量不佳,就停用了。
因为全是加密查询,即使泄漏也不会泄漏查询内容,就更不可能被污染。
我其实是想全用DOH的,但怪的是,国际DOH全都用不了,DOT反而能用,明明DOT更好封堵的。
因为运营商不大可能污染国内域名,所以大可放心地把运营商的DNS加入国内组,以优化解析质量,反正smartdns会自己测速,有污染也无所谓。
想允许国际域名返回IPV6的朋友只需要去“高级设置”页面取消勾选“停用IPV6地址解析”即可。
lean的lede的闭源驱动固件的小毛病(开机没WIFI,改网络设置后WIFI不分配IP)的解决办法:
先说原因,其实就是lan口默认没有ra0和rai0这两个无线接口,所以开机的时候,这两个接口默认是关闭的。网上的解决办法是加一个开机自启脚本,但这样会发现一个新问题,改网络设置后连WIFI的设备拿不到IP,然后机器就自动断开了。这是因为LUCI页面读取不到ra0和rai0,所以保存的时候又把lan口的ra0和rai0删掉了。解决这个问题一共只需要改两个地方:
1. 找到源码的target\linux\ramips\base-files\etc\board.d\02_network,在这个文件中找到redmi-router-ac2100,改成下面的内容,开机的时候WIFI就会自启了。具体原因可以看 这篇文章。
- xiaomi,redmi-router-ac2100)
- ucidef_set_interfaces_lan_wan "eth0 ra0 rai0" "eth1"
- ucidef_add_switch "switch0" \
- "2:lan:1" "3:lan:2" "4:lan:3" "0:wan" "6u@eth0" "5u@eth1"
- ;;
复制代码2. 安装完feeds之后,找到package/feeds/luci/luci-base/luasrc/model/network.lua,将其中的get_interfaces函数替换为下面文件里的代码(帖子的代码块模板有点问题,发不上来)。具体分析可以看我在 ISSUE上的回答。
最后再问一句,nossiac这哥的们谁呀,研究闭源驱动的时候总是能搜到他,整个无线控制面板基本就是他写的(虽然还是很粗糙),全是他的署名,但论坛里和交流群里从没见过。跑到他 主页去看更是莫名其妙。
|