前言:为什么你的内网穿透那么慢?
对于很多像我一样使用 NanoPi R2S 这种轻量级网关,且身处**移动宽带(无公网 IP)**环境的用户来说,Cloudflare Tunnel(Argo Tunnel)几乎是低成本实现内网穿透的唯一真神。它不需要公网 IP,也不需要去路由器做复杂的端口转发,就能通过安全隧道把内网服务发布到公网。
但理想很丰满,现实很骨感。默认模式下,Cloudflare 的 Anycast(任播)网络会将你的流量随机分配到全球边缘节点。对于国内移动线路,流量经常绕道美国、欧洲或新加坡,导致延迟高达 300ms 以上,Jellyfin 看个海报墙都要转半天圈。
本博文将记录如何通过“优选 IP”技术,将平均延迟降低至 60ms 以内,并实现“一次配置,终身受益”的子域名全自动化加速方案。
一、 核心武器:CloudflareSpeedTest 与提速原理
1. 什么是 CloudflareSpeedTest (CFST)?
CloudflareSpeedTest 是一款开源的、专为寻找 Cloudflare 优质节点而设计的测速工具。它不仅测试 Ping 延迟(ICMP),更支持 TCPing(端口延迟)和 HTTPing(下载测速),能真实反映出节点对网页访问和流媒体传输的实际贡献。
2. 加速原理:绕过“糟糕”的路由
Cloudflare 全球有成千上万个节点,但并非所有节点都对中国移动宽带友好。
- Anycast 的局限:运营商默认的 DNS 解析往往会将你带向拥堵的骨干网出口。
- Hosts 劫持与 Dnsmasq 泛解析:通过优选工具筛选出物理距离最近、带宽最充裕的直连 IP(如移动专线的香港/新加坡节点),并强行在 R2S 本地将你的域名指向该 IP。
- 原理:流量不再走“公海路由”,而是直接由 R2S 的 DNS 引擎导向最快节点,实现“直线超车”。
二、 进阶策略:从手动硬编码到“泛域名自动化”
在之前的版本中,我们通过脚本往 /etc/hosts 里写死域名。但这有一个巨大的短板:不支持通配符。每当你新增一个服务,就要改一次脚本。
终极方案:我们利用 OpenWrt 自带的 Dnsmasq 功能。在 Dnsmasq 配置文件中,一行 address=/.sirenyan.cn/IP 即可实现泛域名劫持。这样,除了根域名 sirenyan.cn 外,所有现有的和未来新增的子域名(如 *.sirenyan.cn)都会自动享受加速。
三、 第一阶段:环境准备与工具安装
1. 硬件与系统
- 硬件:NanoPi R2S。
- 系统:ImmortalWrt 24.10.4。
- 分区:Docker 分区已扩充至 20GB,足以应对后续各服务的缓存需求。
2. 工具安装
通过 SSH 连接到 R2S,创建目录并下载最新版 CloudflareST:
Bash
mkdir -p /opt/cf_speedtest && cd /opt/cf_speedtest
# 下载 arm64 架构版
wget -O CloudflareST_linux_arm64.tar.gz https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.2.5/CloudflareST_linux_arm64.tar.gz
tar -zxf CloudflareST_linux_arm64.tar.gz
chmod +x CloudflareST
四、 第二阶段:编写“未来就绪”自动化脚本 (cfst_hosts.sh)
请全选并替换你的脚本内容。此版本使用了 Dnsmasq 配置文件路径,确保全自动泛解析。
Bash
#!/bin/bash
# =========================================================
# 脚本名称:Cloudflare Tunnel 全自动泛域名加速脚本
# 适用环境:R2S (ImmortalWrt) + 移动宽带
# 特点:支持通配符,未来新增子域无需改动脚本
# =========================================================
WORK_DIR="/opt/cf_speedtest"
# Dnsmasq 额外配置文件路径 (OpenWrt 标准路径)
DNSMASQ_CONF="/etc/dnsmasq.d/cloudflare_speedtest.conf"
DOMAIN="sirenyan.cn"
cd $WORK_DIR
# 1. 清理旧缓存
rm -f result.csv
# 2. 运行优选 (针对 R2S 性能调优)
# -n 50: 降低线程保护 CPU;-tp 443: 必须测 HTTPS 端口;-ip: 移动宽带专用段
echo "正在为移动线路探测最快节点..."
./CloudflareST -n 50 -t 4 -tp 443 -tl 200 -dn 1 -ip 104.16.0.0/16
# 3. 提取最优 IP
best_ip=$(sed -n '2p' result.csv | cut -d',' -f1)
# 4. 判断并写入 Dnsmasq 泛域名配置
if [ -n "$best_ip" ] && [ "$best_ip" != "IP 地址" ]; then
echo "探测成功!最优节点 IP 为: $best_ip"
# 使用 address 语法实现泛域名劫持:*.sirenyan.cn 全部生效
# 这里加一个点表示包含子域,且不影响你可能在 hosts 里对主域名的特殊定义
echo "address=/.$DOMAIN/$best_ip" > $DNSMASQ_CONF
# 5. 重启 DNS 服务与隧道服务
/etc/init.d/dnsmasq restart
/etc/init.d/cloudflared restart 2>/dev/null
echo "全自动加速已生效,所有 $DOMAIN 的子域名已指向最优节点。"
else
echo "优选失败,保持现有配置。"
fi
赋予权限并初次运行
Bash
chmod +x /opt/cf_speedtest/cfst_hosts.sh
/opt/cf_speedtest/cfst_hosts.sh
五、 第三阶段:解决代理与防火墙的“深度碰撞”
很多用户提速后发现网络崩溃,通常是因为 R2S 内部的“交通管制”冲突。
1. 解决 Nikki (Clash) 劫持问题
现象:隧道连不上,报错 dial tcp 198.18.0.x:7844: i/o timeout。 原因:Nikki 尝试代理隧道自己的流量,导致死循环。 解决:在 Nikki 插件的“直连名单”中添加 sirenyan.cn 和 argotunnel.com。
2. 开启防火墙“通行证”
操作:进入 网络 -> 防火墙 -> 区域设置 -> lan。
- 勾选“IP 动态伪装” (Masquerading)。
- 勾选“MSS 钳制”。
- 意义:这是保证内网电脑能通过 R2S 转发访问优选 IP 的关键。
六、 最终验证:不仅是快,更是稳
优化完成后,你可以尝试 Ping 任意一个你从未在脚本里写过的子域名,比如: ping whatever.sirenyan.cn -c 4
数据分析:
- 延迟:平均延迟由原来的 300ms 降至 60ms 左右。
- 丢包率:从 10% 以上降至 0 丢包。
- 下载带宽:测速可达 14.94 MB/s,足以让 Jellyfin 里的 4K 电影像本地一样播放。
七、 总结与自动化运维
通过 Dnsmasq 泛域名映射,我们不仅解决了当前服务的卡顿问题,更一劳永逸地处理了未来扩容服务的加速需求。
自动化定时任务
进入 系统 -> 计划任务,添加:
代码段
0 4 * * * /opt/cf_speedtest/cfst_hosts.sh > /dev/null 2>&1
每天凌晨 4 点,R2S 会自动帮你找一次最快的节点,让你的内网穿透永远保持在“头等舱”速度。





