在群晖虚拟机上安装 OpenWRT 来解决网络问题

之前我都是使用 OBABY 的教程 通过 CF 自建 Docker 镜像 🔗 来解决群晖上拉取镜像难的问题,可今天收到 Cloudflare 的邮件说请求超额了。

您好,

您已经超出了 Cloudflare Worker 和/或 Pages Functions 每天最多 100000 个请求的限制。

如果您不采取任何措施,您的最终用户可能会收到错误,直到 2025-05-01 at 00:00:00 UTC 重置此限制为止。

您可以通过在计划页面 🔗上将您的帐户升级到付费计划来恢复服务。 该级别的每月最低计费金额为 5 美元,超出 1000 万个请求后,每 100 万个请求 0.50 美元。

如果您在现有域之前使用 Worker,则可以将其禁用,或者在仪表板中将路由设置为失败时打开,来继续将请求传递到您的源服务器。

谢谢, Cloudflare 团队

查看日志得知,请求几乎全是来自这个自建的 Docker 镜像服务。再三考虑,决定重新部署 OpenWRT 来解决网络问题。

以下内容仅为个人笔记,方便查阅。

在群晖虚拟机上安装 OpenWRT

从官网上下载 OpenWRT

https://downloads.openwrt.org/releases/24.10.1/targets/x86/64/ 🔗

选择 generic-ext4-combined-efi.img.gz 🔗

解压 gunzip openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img.gz

打开 Virtual Machine Manager -> 映像 -> 硬盘映像 -> 新增,将解压后的 img 文件添加进来。

新建虚拟机,导入 -> 从硬盘导入 -> 硬盘选择刚才添加的硬盘 -> 配置网络时进入高级选项,型号选择 e1000 -> 引导选择 uefi。

启动虚拟机,画面卡住时按回车 -> 修改 OpenWRT 默认管理页面地址,vi /etc/config/network -> 修改 config interface 'lan' 模块下的 option ipaddr '10.10.10.88' -> /etc/init.d/netwrok reload -> 在浏览器上输入刚才的修改的 IP 访问 OpenWRT 的管理页面。

OpenWRT 没有初始密码,直接登陆后会提示设置密码 -> Interfaces -> lan -> 点击 Edit 按钮 -> 根据实际情况给接口设置网关 IPv4 gateway 与 Advanced Settings 选项卡里的 DNS,确保 OpenWRT 可以成功连接外网。

System -> Software -> Configure opkg -> 修改 /etc/opkg/distfeeds.conf

https://downloads.openwrt.org 修改成 http://mirrors.ustc.edu.cn/openwrt

src/gz openwrt_core http://mirrors.ustc.edu.cn/openwrt/releases/24.10.1/targets/x86/64/packages
src/gz openwrt_base http://mirrors.ustc.edu.cn/openwrt/releases/24.10.1/packages/x86_64/base
src/gz openwrt_kmods http://mirrors.ustc.edu.cn/openwrt/releases/24.10.1/targets/x86/64/kmods/6.6.86-1-af351158cfb5febf5155a3aa53785982
src/gz openwrt_luci http://mirrors.ustc.edu.cn/openwrt/releases/24.10.1/packages/x86_64/luci
src/gz openwrt_packages http://mirrors.ustc.edu.cn/openwrt/releases/24.10.1/packages/x86_64/packages
src/gz openwrt_routing http://mirrors.ustc.edu.cn/openwrt/releases/24.10.1/packages/x86_64/routing
src/gz openwrt_telephony http://mirrors.ustc.edu.cn/openwrt/releases/24.10.1/packages/x86_64/telephony

更多国内源可查看:https://zhuanlan.zhihu.com/p/632641259 🔗

Update lists -> Filter 处输入 chinese -> 安装 luci-i18n-base-zh-cn -> 安装完成后刷新管理页面。

如果是旁路由,网络 -> lan -> 点击编辑按钮 -> DHCP 服务器 -> 常规设置 -> 勾选忽略此接口 -> IPv6 设置 -> 禁用“RA 服务、DHCPv6 服务、NDP 代理”。

群晖虚拟机默认分配了 10G 的硬盘,这时我们可以通过终端、Xshell、Putty 等工具登录 Open­Wrt,安装磁盘分区工具将这 10G 的硬盘挂载到 OpenWRT。

可选项:为了方便登陆,可将公钥添加到 OpenWRT 里,入口如下。系统 -> 管理权 -> SSH 密钥 -> 粘贴或拖动 SSH 密钥文件 -> 添加密钥。

使用 ssh root@10.10.10.88 登陆 OpenWRT

opkg update
opkg install cfdisk fdisk e2fsprogs block-mount blkid

安装完成后运行 cfdisk 进入磁盘分区,该工具有简单的图形界面,可通过键盘的方向键来选择,按回车确认。

通过上下键来选择 Free space,通过左右键选择 New,按回车确认将剩余空间进行分区;分区类型选择 primary,再次按回车确认;选择 Write 并按回车键写入新分区;输入 yes 按回车键确认;最后选择 Quit 按回车退出界面。

将新分区的文件系统格式化为 ext4

mkfs.ext4 /dev/sda3

重启 OpenWRT

reboot

浏览器打开 OpenWRT 管理页面,系统 -> 挂载点 -> 生成配置 -> 挂载点 -> 选择刚刚分区的 /dev/sda3 -> 编辑 -> 勾选已启用 -> 挂载点,作为根文件系统使用 -> 复制提供的命令并进行修改,以供后续操作时使用。

将命令集中的 mount /dev/sda1 /tmp/extroot 修改成 mount /dev/sda3 /tmp/extroot

mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/sda3 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introot
umount /tmp/extroot

再次重启 OpenWRT

reboot

再次进入 OpenWRT 管理页面后就可以看到磁盘空间变成 10G 了。

安装 PassWall

使用 SSH 登陆 OpenWRT 并创建临时的 ipk 文件保存目录

mkdir -p /tmp/myipk && cd /tmp/myipk

https://github.com/xiaorouji/openwrt-passwall/releases 🔗

一般来说需要下载三个文件,本体、汉化、依赖。如:

luci-19.07_luci-app-passwall_25.4.20-1_all.ipk
luci-19.07_luci-i18n-passwall-zh-cn_25.4.20-1_all.ipk
passwall_packages_ipk_x86_64.zip

在网络允许的情况下,可直接在 OpenWRT 通过 wget 来进行下载对应的文件,当然也可以在本地下载好对应的文件,然后通过 scp 工具传输到 OpenWRT。

在本地终端上使用以下命令进行传输

scp -O luci-19.07_luci-app-passwall_25.4.20-1_all.ipk root@10.10.10.88:/tmp/myipk/
scp -O luci-19.07_luci-i18n-passwall-zh-cn_25.4.20-1_all.ipk root@10.10.10.88:/tmp/myipk/
scp -O passwall_packages_ipk_x86_64.zip root@10.10.10.88:/tmp/myipk/

切换回 OpenWRT 的终端界面,使用 unzip 工具解压依赖包,请确保当前路径为 /tmp/myipk

# 若未安装
opkg update
opkg install unzip

unzip passwall_packages_ipk_x86_64.zip -d .

解压完成后使用 opkg install *.ipk 将本体、汉化与全部依赖一次性全部安装。如若安装过程提示 dnsmasq-full 与 dnsmasq 文件冲突,opkg remove dnsmasq --force-depends 删除 dnsmasq 后再 opkg install *.ipk 重新安装即可。

网络不好的话可通过以下方法解决:打开 https://ghproxy.link/ 🔗 查看 GitHub Proxy 最新地址,通过最新地址加仓库上的下载地址即可下载。如:

https://ghfast.top/https://github.com/xiaorouji/openwrt-passwall/releases/download/25.4.20-1/luci-19.07_luci-app-passwall_25.4.20-1_all.ipk 🔗

https://ghfast.top/https://github.com/xiaorouji/openwrt-passwall/releases/download/25.4.20-1/luci-19.07_luci-i18n-passwall-zh-cn_25.4.20-1_all.ipk 🔗

https://ghfast.top/https://github.com/xiaorouji/openwrt-passwall/releases/download/25.4.20-1/passwall_packages_ipk_x86_64.zip 🔗