玩转 R2S 家庭服务器:Cloudflare Tunnel + 优选 IP 全家桶提速终极实操指南(自动化进阶版)

前言:为什么你的内网穿透那么慢?

对于很多像我一样使用 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.cnargotunnel.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 会自动帮你找一次最快的节点,让你的内网穿透永远保持在“头等舱”速度。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注