OpenWrt/iStoreOS 进阶玩法:Emby 极致加速方案(CF优选IP + 混合分流模式)
凌晨四点,看着 Emby 面板上跳动的连接速率,原本一直在转圈的 4K 画面突然秒开,那一刻的成就感,大概只有折腾过软路由的人才懂。
这篇文章,记录我是如何解决 Emby 直连 Cloudflare 卡顿的“最后一公里”。
01 前言
对于我们这种 NAS 玩家兼影音爱好者来说,最痛苦的瞬间莫过于:零食准备好了,可乐倒好了,姿势摆好了,结果电影开始转圈圈。
很多 Emby 公益服为了节省成本,都套了 Cloudflare (CF) 的 CDN。但 CF 在国内的网络环境非常玄学:
- 直连:要么速度慢得像蜗牛,要么晚高峰丢包丢到怀疑人生。
- 全走代理:虽然稳,但流量跑得心疼,而且万一机场节点拥堵,体验依然不佳。
我一直在想,有没有一种“既要又要”的方案?
既能利用家里宽带的公网直连(省流量、跑满带宽),又能保证连接的稳定性?
经过几天的摸索和脚本调试,终于搞定了一套“混合加速模式”:
- 直连优选:脚本自动筛选最快 IP,走本地宽带。
- 强制代理:顽固域名走机场,确保连通性。
- 全自动:每天凌晨自动维护,零人工干预。
02 准备工作
在开始之前,请确保你具备以下条件:
- 硬件设备:一台安装了 iStoreOS 或 OpenWrt 的软路由。
- 核心插件:已安装并启用 Nikki (基于 Clash Meta/Mihomo 内核)。
- 基础工具:SSH 连接工具(如 Termius, Putty 或 Windows 终端)。
- 测速程序:
CloudflareSpeedTest(推荐 v2.2.5+ Linux amd64/arm64 版),上传至路由器的/root/cf_speedtest目录。
03 详细步骤
第一步:部署全自动优选脚本
我们需要一个脚本来完成“测速 -> 提取 IP -> 修改 Hosts -> 重启服务”的一条龙操作。
新建脚本文件 /root/cf_speedtest/auto_cf.sh,直接复制下面的代码:
#!/bin/bash
# ================= 配置区域 =================
# 1. 定义那些“直连还不错”的域名 (走本地宽带)
DOMAINS=("emby域名" "emby域名")
# 2. 测速地址 (使用 Cloudflare 官方大文件,确保测速准确)
URL="[https://speed.cloudflare.com/__down?bytes=50000000](https://speed.cloudflare.com/__down?bytes=50000000)"
# 3. 路径配置
CD_PATH="/root/cf_speedtest"
HOSTS_FILE="/etc/hosts"
# ===========================================
cd $CD_PATH
echo "🚀 开始测速 Cloudflare 优选 IP..."
# 1. 运行测速:测5次,取前5个结果
./cfst -t 5 -dn 5 -url $URL -o result.csv
# 2. 提取最佳 IP (取第2行第1列)
BEST_IP=$(sed -n '2p' result.csv | cut -d, -f1)
# 检查是否成功
if [ -z "$BEST_IP" ]; then
echo "❌ 测速失败,脚本终止。"
exit 1
fi
echo "✅ 测得最佳 IP: $BEST_IP"
# 3. 循环写入 Hosts
for domain in "${DOMAINS[@]}"; do
# 删除旧记录
sed -i "/$domain/d" $HOSTS_FILE
# 写入新记录
echo "$BEST_IP $domain" >> $HOSTS_FILE
echo " -> 已更新: $domain 指向 $BEST_IP"
done
# 4. 关键步骤:重启服务确保生效
# 重启 Dnsmasq 刷新系统缓存
/etc/init.d/dnsmasq restart
# 重启 Nikki 清除内核 DNS 缓存 (必须做!)
/etc/init.d/nikki restart
echo "🎉 优化完成!"第二步:配置 Nikki (Clash Meta)
这是最关键的一步。我们要告诉 Nikki:“虽然你接管了网络,但这几个域名请听我的话。”
在 Nikki 的配置文件中,做如下两处修改:
1. 开启读取系统 Hosts
这一步是为了让 Nikki 能读到我们脚本写入的优选 IP。
use-system-hosts: true- 设置混合分流规则
在 rules 区域添加以下规则(注意顺序):
rules:
# === 策略 A:强制直连 (走优选 IP) ===
# 这些域名会读取系统 Hosts 里的优选 IP,速度飞快且不费流量
- DOMAIN-SUFFIX,emby域名,DIRECT
- DOMAIN-SUFFIX,emby域名,DIRECT
# === 策略 B:强制代理 (救活卡顿服) ===
# 这个服直连太卡,怎么优选都没用,强制走代理节点
- DOMAIN-SUFFIX,emby域名,🎬 Emby
# ... 其他规则 ...第三步:设置定时任务
最后,给系统上个闹钟。输入 crontab -e,添加一行,让它在每天凌晨 4 点夜深人静的时候自动寻找全球最快 IP:
# 每天凌晨 4 点自动运行
0 4 * * * /root/cf_speedtest/auto_cf.sh > /dev/null 2>&104 踩坑与故障排除
在折腾过程中,我也踩过两个坑,这里分享出来,希望大家少走弯路:
直连不生效(明明跑了脚本还是卡)
- 原因:Nikki (Mihomo) 内核有自己的 DNS 缓存机制,即使
/etc/hosts变了,它可能还在用旧 IP。 - 解决:必须在自动化脚本的最后加入
/etc/init.d/nikki restart,强制重启 Nikki 以读取最新配置。
- 原因:Nikki (Mihomo) 内核有自己的 DNS 缓存机制,即使
日志报错
too many open files- 原因:下载 BT 或连接数过多时,超过了 Linux 默认的文件打开数限制(通常是 1024)。
- 解决:修改
/etc/init.d/nikki启动脚本,在start_service里加上ulimit -n 65535或procd_set_param limits nofile="65535 65535"。
Nikki 不识别域名只显示 IP
- 原因:电脑 DNS 缓存或浏览器开启了“安全 DNS”。
- 解决:开启 Nikki 的“域名嗅探 (Sniffer)”功能,并关闭浏览器的安全 DNS 选项。
05 总结
折腾软路由的过程,其实和生活很像。我们总是在寻找最优解,但往往没有完美的方案,只有最适合当下环境的方案。
通过这套方案,我实现了:
- 走直连优选域名的emby:利用早晨 4 点测出的黄金 IP 直连,4K 秒开,带宽跑满。
- 不支持优选域名的emby:走香港代理,虽然消耗一点流量,但胜在极其稳定,彻底告别晚高峰卡顿。
现在,这套系统每天凌晨默默运行,我再也不用操心线路问题。打开电视,就是高清流畅的画面,这或许就是技术带给生活的一点小确幸吧。
如果你也在折腾 Emby,或者有更好的优化思路,欢迎在评论区交流。
让我们一起,在这个带宽受限的世界里,榨干宽带的每一滴性能。
写的不错,很有用