使用 Github Action 定制 LEDE Openwrt K2P 路由固件
前言
脱离了校园网环境了,家里白嫖了移动宽带,所以需要一个路由器来实现一些想要的功能。之前的 K2P 刚好拿来折腾一下下。然而,Hiboy 的固件功能过于丰富,ChongShengB 的固件中的 SmartDNS 和 AdGuard Home 在长时间(几个小时)的运行后,都会失效,出现没有 DNS 解析的问题,恩山论坛上倒是有个固件不错,但没有去广告功能,所以生出自己定制固件的想法,今天基本完成了,所以写个文章记录一下。
更新1.0:修改并简化操作
更新1.1:修复重启后 WiFi 未开启的 Bug
更新1.2:修改闪存部分勘误
路由基本信息
K2P 硬改,32M 闪存,512M 内存,USB 3.0
过程
之前定制 ChongshengB 的固件就不写了,这里写定制 LEDE 的 Openwrt.
本着不造轮子的想法,检索了一下,发现有现成的脚本,使用了 Github Action 功能进行云编译,不占用本地资源。
总的来说,需要 Fork 一下 P3terx 仓库,自行修改 .config
diy.sh
和 .yml
.
P3terx仓库
P3大佬又更新了仓库,我这文章不想改了,基本原理是一样的。
需添加 .config
文件以决定要不要软件,说明我就不写了,人家写得很清楚。
建议第一次云编译,保存种子配置之后好修改。
另外,对于没自定义却自己带的软件,可增添如下配置以取消:
1 | CONFIG_PACKAGE_luci-app-vlmcsd=n |
diy.sh
脚本还可以修改默认路由管理地址以避免和光猫冲突。
以下更改为了192.168.2.1,可自行更改。
1 | sed -i 's/192.168.1.1/192.168.2.1/g' package/base-files/files/bin/config_generate |
坑:我是 32M 闪存,然而 LEDE 那里编译的默认是 16M 闪存的,所以需要自行修改编译固件大小:
编辑 diy.sh
添加:
1 | sed -i 's/0xf60000/0x1f60000/g' target/linux/ramips/dts/mt7621_phicomm_k2p.dts |
第一行计算方式为:
32M 闪存 = 32x1024x1024 = 33554432k (16 进制为 0x2000000),
去除掉之前留给 u-boot 等的空间 (0x0 - 0xa0000),
剩余则为 0x1f60000
第二行为修改固件最大大小,避免生成固件失败,同样改为 32M,留一点空余的话:32488<32768
AdGuard Home luci app
由于 LEDE 没有 AdGuard Home,倒是有 Adbyby Plus,但实测不好用。所以我是要自定义去除 Adbyby Plus,添加 AdGuard Home.
在 P3terx 的 .config
里添加
CONFIG_PACKAGE_luci-app-adguardhome=y
然后在 diy.sh
里添加:
1 | git clone https://github.com/rufengsuixing/luci-app-adguardhome package/lean/luci-app-adguardhome/ |
PS: 这里和 P3 的说明不一样。 反正 git clone 后面不加目录就不会编译进去,那就加一个目录咯。
编译完成后的设置
SSH 连接并执行
df -h
可以看见是 32M 的固件大小了,不需要担心 AdGuard Home 的过滤器太多放不下。
AdGuard Home 设置
更新 AdGuard Home 内核。
使用 “作为 dnsmasq 的上游服务器”。
转到 手动设置
里,修改为:
1 | port: 5335 |
再启用。
进入 AdGuard Home 网页管理界面,更改 DNS 和过滤器:
DNS (个人用):
1 | https://dns.alidns.com/dns-query |
过滤器 (个人用):
1 | https://gitee.com/halflife/list/raw/master/ad.txt |
强烈建议:在测试 AdGuard Home 运行成功并且稳定之后,把 日志
关闭,否则闪存空间非常容易被塞满。
设定完成后,才可以启动 SSR.
IPV6的设置
只需要把光猫的拨号更改为桥接,使用 K2P 拨号,就会自动分配 IPV6 地址了。
然后在 网络----DHCP/DNS----高级设置
里,取消打钩 禁止解析 IPv6 DNS 记录
。
IPV6 的 DNS 可以添加在 AdGuard Home 里面。
最后,去 https://test-ipv6.com 测试一下就好了。
(因为目前 IPV6 的路由满世界瞎跑,所以我禁止掉了 IPV6 解析,只留下了分配 IPV6 地址,这样有时候需要 ping 一下,也不用麻烦。)
自动重启后,WiFi 未开启
这个问题在我 Build 固件后复现率非常高。
经过 Google 后,发现如果在启动项加入重启 WiFi 的几条命令后,问题得以解决。
步骤
手动添加
如果你已经编译好了,不想再折腾了,或者是用的其他人的固件,那么选择手动添加吧。
系统--启动项--本地启动脚本
添加如下命令,一定是要放在 exit 0
之前:
1 | ifconfig rax0 up |
在编译时的 diy.sh 添加
在 diy.sh
中,添加:
1 | # Fix WiFi disabled after reboot |
这样编译出来的固件就会带以上命令,无需手动添加了。
实现功能
定时重启
AdGuard Home 广告过滤
这里和谐了
UPnP
Turbo ACC
IPV6
管理页面为192.168.2.1
Q & A
Q: 为什么没有带 USB 功能?
A: 因为个人用不到 NAS、打印机、无线网卡等功能,精简之后更稳定且留出空间给过滤器。
Q: AdGuard Home 功能怎么样?
A: 添加以上 10 个列表之后,我访问的网站能过滤很多广告,在 https://checkadblock.ru 上能得到 71/100 的分数,对于防护网站默认开启的追踪功能也有一定作用。但对于 和谐视频网站
的网页和视频开头广告没有效果。对于 DNS 分流,基本没用,建议折腾 SmartDNS 去。 AdGuard Home 更新了一个 “最快的 IP 地址”
选项,可以查询并返回响应最快的地址,原理类似于 SmartDNS。SmartDNS 已经不更新了,使用 AdGuard Home 在一定程度上可以替代,且在开发组开发和大家的反馈下,功能应该会更好。
Q: 和谐功能
效果怎么样?
A: 由于 K2P 的 CPU 性能不足,无法发挥我的 和谐
线路的实力,开启多线程后,下载可以达到 3.3M/s 的速度,基本满足 1080P 视频和日常聊天的需要。
参考文档
https://github.com/coolsnowwolf/lede
https://p3terx.com/archives/build-openwrt-with-github-actions.html
使用 Github Action 定制 LEDE Openwrt K2P 路由固件