OpenWrt 系列优化 1
Opkg
更换源
这里为数不多的可以支持 snapshots 版本的源是南京大学(NJU)的
# src/gz immortalwrt_core https://mirror.nju.edu.cn/openwrt/snapshots/targets/qualcommax/ipq60xx/packages
src/gz immortalwrt_base https://mirror.nju.edu.cn/openwrt/snapshots/packages/aarch64_cortex-a53/base
src/gz immortalwrt_luci https://mirror.nju.edu.cn/openwrt/snapshots/packages/aarch64_cortex-a53/luci
src/gz immortalwrt_packages https://mirror.nju.edu.cn/openwrt/snapshots/packages/aarch64_cortex-a53/packages
src/gz immortalwrt_routing https://mirror.nju.edu.cn/openwrt/snapshots/packages/aarch64_cortex-a53/routing
src/gz immortalwrt_telephony https://mirror.nju.edu.cn/openwrt/snapshots/packages/aarch64_cortex-a53/telephony
更新所有软件包
类似于
apt upgrade
# 更新软件包源
opkg update
# 仅更新LuCI相关软件包
opkg list-upgradable | grep luci- | cut -f 1 -d ' ' | xargs opkg upgrade
# 更新全部可更新软件包,包含OpenWRT内核等
opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade
参考:https://panfake.com/2022/05/upgrade-openwrt-opkg/
SSH
官方教程:https://openwrt.org/docs/guide-user/services/ssh/openssh_instead_dropbear
Dropbear 对于 EcDSA 没有支持,且没办法使用SFTP。可以更换为 OpenSSH。
好在官方已经给出教程了,这样就优雅多了
1. 改变原有端口
uci set dropbear.@dropbear[0].Port=2222
uci commit dropbear
重启 dropbear
/etc/init.d/dropbear restart
2. 安装 OpenSSH server
opkg install openssh-server
opkg install openssh-sftp-server
3. 配置 OpenSSH server
允许 root 登陆
sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
把 Dropbear 的 ssh key 映射过来。这样就可以和Dropbear公用一套,且可以通过图形界面配置
mkdir /root/.ssh/
ln -s /etc/dropbear/authorized_keys /root/.ssh/authorized_keys
4. 重启 OpenSSH server
/etc/init.d/sshd enable
/etc/init.d/sshd restart
# 可以选择禁用 dropbear
/etc/init.d/dropbear disable
/etc/init.d/dropbear stop
HomeProxy
HomeProxy 虽然非常棒,但是有个毛病,一定要劫持 DNS,这就让我的 AdGuardHome 统计不准。
所以 得整
1. 删除基于 nftables 的劫持
vim /etc/init.d/homeproxy
在 start_service
方法的最后一行执行删除 dstnat
链的规则。
# Remove fucking DNS hack.
nft delete chain inet fw4 dstnat
2. 如果删除劫持后无法正常出国
需要在 HomeProxy 的管理页面设定 DNS服务器
和 国内DNS服务器
。
Tailscale
immortalwrt 内置了 tailscale,但是 如果当成交换机使用,是有问题的。
有两种办法:
- a. 改造luci版的tailscale,让它以最简的方式运行
- b. 卸载luci版的tailscale,安装官方版
a. 最简化运行
最简化运行的好处就是仍然可以通过luci来查看ip,log等,不需要改变任何包。变更成本最低。
编辑服务
vim /etc/init.d/tailscale
#!/bin/sh /etc/rc.common
START=90
USE_PROCD=1
PROG=/usr/sbin/tailscale
PROGD=/usr/sbin/tailscaled
PROGD_ARGS="--port=41610"
start_service() {
procd_open_instance
procd_set_param command $PROGD $PROGD_ARGS
procd_set_param respawn
procd_close_instance
}
reload_service() {
stop
start
}
接下来正常的启动服务就可以了
b. 官方版
所以需要先卸载
# https://github.com/asvow/luci-app-tailscale
# luci-app-tailscale
# luci-i18n-tailscale-zh-cn
opkg remove luci-app-tailscale
然后再安装 CLI 版
opkg install tailscale
配置和启动
# 通过 auth key 连接到 tailscale 网络
tailscale up --auth-key=tskey-auth-kDcvuKz9dy11CNTRL-Mfcjetrmcb27FJEv2uJjb2STwm123456
# 设置为开机启动
service tailscale enable
tailscale 并不需要配置什么,所以并不需要在 Luci 界面配置。
shell
默认使用了 zsh,但是 zsh 并没有集成,所以每次用 ssh 登入之后都会报个错
在 profile 中的最后一行能找到 zsh 启动的命令,删掉即可
vim /etc/profile
# 最后一行
/usr/bin/zsh # 删除这一行
其实安装了 zsh 也不行,目录上显示的有问题。
DNS (AdGouardHome)
我买这个路由器刷 OpenWrt 就是为了能让 DNS 独立的提供服务,所以 对我来说 DNS 的优雅配置,至关重要。
1. 安装 AdGouardHome
安装 AdGouardHome 软件包
opkg update
opkg install adguardhome
安装完成暂时还不会占用 53 端口,所以这一步之后,需要配置 dnsmasq 让 AdGouardHome 接管 DNS 功能。
2. 配置 dnsmasq
因为 dnsmasq 同时负责 DHCP 和 DNS,想要关闭 DNS 服务 只保留 DHCP,有点难度,但是有个更好的变通方法。
就是把 dnsmasq 的 dns server 的端口改掉,让它不监听 53 端口,然后让 AdGuardHome 监听 53 端口。这样就可以让 AdGuardHome 接管 DNS 功能,而 dnsmasq 就只负责 DHCP 了。
- 在 luci 界面中找到 dnsmasq 配置,找到
DCHP
选项,把DNS 服务器端口
改成530
。(我自己习惯在后面加个0,当然你可以改成其他的端口号,只要是个未被占用的端口就可以) - 一定要注意:安装好 AdGouardHome 之后,再应用保存。(否则 openwrt会没网,后面没办法安装 AdGouardHome)
3. 配置 AdGouardHome
注意:2024/10/26 测试新的软件包,AdGuardHome的配置默认是不启用的,再怎么 service adguardhome start
也是没用的。
首先需要先 启用 :
vim /etc/config/adguardhome
config adguardhome config
# Enable or disable AdGuard Home (这里要改成1)
option enabled '1'
# Where to store persistent data by AdGuard Home
option workdir /var/adguardhome
option config /etc/adguardhome.yaml
然后手动启用服务: service adguardhome start
访问 http://{openwrt_ip}:3000
即可看到 AdGouardHome 的界面。然后在界面上继续配置。
配置完成之后 AdGouardHome 会占用 53 端口。(需要在界面上配置)
WebServer
Caddy 是个非常强大的 Web Server,配置简化,程序轻量,还可以免配置打开 HTTPS,对于私有部署简直太好用了。
uhttpd 远远达不到我想要的需求,所以还是得把它换掉。
uhttpd
uhttpd 是 OpenWrt 默认的 WebServer,但是 即使安装了 luci 的 Web 界面,也没办法任意配置。所以还是需要用 其他的 WebServer 来接管控制。
和配置 DNS Server 的思路一样,uhttpd 监听其他端口,让 Caddy 来接管。
- 安装
luci-app-uhttpd
- 配置 HTTP 监听,修改为 800,(我自己习惯在后面加个0,当然你可以改成其他的端口号,只要是个未被占用的端口就可以)
- 应用保存。
caddy
caddy 没有软件包,所以下个最新的,放到 /usr/bin
下
1. 下载 caddy
记得对应你的架构,我这里是
Linux arm64
cd /usr/bin
curl -o caddy 'https://caddyserver.com/api/download?os=linux&arch=arm64'
chmod +x caddy
2. 创建配置文件
mkdir /etc/caddy
touch /etc/caddy/Caddyfile
vim /etc/caddy/Caddyfile
写入以下内容:
# LuCI Dashboard
:80 {
reverse_proxy :800
}
# AdGuardHome Dashboard
dns.lan:80 {
reverse_proxy :3000
}
# 其他WebUI
abc.lan:80 {
root * /www/abc-webui
file_server
}
3. 启动服务
因为 Caddy 自带守护进程,所以不需要额外再添加服务了
手动执行运行
# 启动
caddy run --config /etc/caddy/Caddyfile
# 后台启动
caddy start --config /etc/caddy/Caddyfile
可以直接写个启动脚本,自动化运行
# 此处为 /etc/rc.local 的内容。启动脚本插入到“exit 0”之前即可随系统启动运行。
# caddy web server
if [ -x "/usr/bin/caddy" ]; then
caddy start --config /etc/caddy/Caddyfile
fi
正常访问 http://{openwrt_ip}
即可看到 LuCI 的 Web 界面。不用再去管 uhttpd 的 800 端口了。
EMMC
查看寿命
两种办法:
mmc-utils
先安装 mmc-utils
opkg update
opkg install mmc-utils
查看寿命:
mmc extcsd read /dev/mmcblk0 | grep Life
0x03:就是表示当前的损耗是 20%-30%, 还很健康,数值越大,则损耗越严重。
参考:https://www.right.com.cn/forum/thread-8283518-1-1.html
sys kernel
cd /sys/kernel/debug/mmc0/mmc0:0001
cat ext_csd
537-538 字符位就是寿命
和 mmc-utils 一样,数值越大,则损耗越严重。
扩容
因为我还没有搞定,所以可能会晚点单独一个文章。