DocsByRcDocsByRc
OpenClash 双节点智能路由
OpenClash · 新手向

OpenClash 双节点智能路由

OpenClash 从零搭建:VLESS/Reality 双节点、DNS 防泄漏、故障自动切换,远程管理三通道(WireGuard/Tailscale/Cloudflare Tunnel)。

适用OpenWrt / iStoreOS
难度入门
阅读—

这是一份从零开始的新手教程,每一步具体点哪个菜单、敲哪行命令都会写清楚。跟着做完,你会得到一套这样的系统:

  • 两个 VLESS + Reality 节点,主节点正常时用主节点,失效或被限速到 1Mbps 以下时自动切到备用节点,恢复后自动切回
  • DNS 走加密解析,不会被运营商 DNS 污染劫持,也不会绕过代理泄漏真实请求
  • 看起来像"全局代理"(几乎所有流量都走节点),但管理流量不受影响
  • 两条完全独立的远程管理通道(WireGuard + Tailscale),其中一条失效时另一条兜底,就算节点全挂了也能远程登录路由器后台
全文中所有需要你手动替换成自己真实信息的地方(服务器地址、UUID、密钥、IP等)都用这种黄色底色标出,照着改就行,其余命令原样复制即可。

开始前你需要准备好这些

  1. 一台已经刷好 OpenWrt 固件、并且已经安装了 OpenClash 插件的路由器(本教程不讲怎么刷机和装插件,只讲配置)
  2. 两个 VLESS + Reality 节点的信息:服务器地址、端口、UUID、public-key、short-id、servername(伪装域名)—— 这些一般是你购买节点的机场/自建服务器提供给你的,找不到的话联系提供方要
  3. 一台可以正常用 SSH 连上的 VPS(境外服务器),用于做远程管理的跳板,需要知道它的公网 IP、root 密码或密钥
  4. 电脑一台(Windows/Mac 均可,教程两种都会讲),手机一部(用于装 Tailscale App)
如果你还没有 VPS,随便一台海外便宜的云主机(阿里云国际版、Vultr、DigitalOcean、Linode 等都行)配置要求很低,1核1G 内存就够用来做跳板。

第一步:用 SSH 登录你的路由器

SSH 是一种远程登录电脑/路由器的方式,就是通过命令行敲命令来操作它。先确认路由器的局域网 IP(一般是 192.168.1.1,具体看你路由器背面标签或 LuCI 后台地址栏)。

Windows 10/11 自带终端已经能直接用 SSH,不需要额外装 PuTTY:

  1. 按 Win + R,输入 cmd 回车,打开命令提示符(或者搜索"Windows Terminal"打开也行)
  2. 输入下面命令并回车,把 IP 换成你路由器的实际地址
CMD / POWERSHELL
ssh root@192.168.1.1

第一次连接会提示"是否信任这台主机的指纹",输入 yes 回车,然后输入路由器的登录密码(输入时屏幕不会显示字符,属正常现象,直接打完回车即可)。

Mac / Linux 系统自带终端:

  1. Mac 上打开"启动台" → 搜索"终端"(Terminal)并打开;Linux 直接打开自带的终端应用
  2. 输入下面命令并回车
TERMINAL
ssh root@192.168.1.1

同样,第一次连接输入 yes 信任指纹,然后输入密码登录。

第二步:安装后面脚本要用到的工具

登录进路由器后,依次执行下面两条命令(每行敲完回车执行):

路由器命令行
# 更新软件包列表
opkg update

# 安装测速脚本需要用到的两个小工具
opkg install curl bc

执行过程中如果提示已经安装过(Package curl is already installed),直接忽略,说明这一步不用做了。

本教程默认你的路由器已经装好了 OpenClash 插件(能在 LuCI 后台看到"服务(Services) → OpenClash"这个菜单)。如果还没装,需要先去 OpenClash 官方仓库按你的固件版本装好插件,本教程不涉及插件安装本身。

这份配置怎么实现"看起来像全局代理"

OpenClash 底层用的 Clash 内核有个真正的 mode: global 模式,但这个模式会导致所有流量(包括你后面配的远程管理隧道)都被强制塞进代理节点,一旦节点挂了,管理通道也会跟着断。

所以这份配置用的是 mode: rule(规则模式),但把规则设计成:先排除管理隧道相关的流量走直连,其余不管三七二十一全部丢进代理——效果上跟全局模式几乎一样,但保住了管理通道的独立性。

第一步:打开配置文件编辑页面

  1. 浏览器打开路由器管理后台,一般是 http://192.168.1.1
  2. 登录后,顶部菜单点 服务(Services) → OpenClash
  3. 在 OpenClash 页面里找到 配置文件管理(Config File Manage) 这个子菜单
  4. 点击"新建配置文件",起个名字(比如 my_config),格式选 yaml
  5. 新建后点"编辑",会打开一个文本编辑框

第二步:把下面完整内容粘贴进去

先把编辑框里原有的默认内容全部删掉(Ctrl+A 全选,Delete 删除),再粘贴下面这份完整配置:

下面标黄的地方是必须替换的:两个节点的 server / uuid / public-key / short-id / servername,以及 VPS 公网 IP(换成你 VPS 的真实公网 IP;等你做完第4节配好 WireGuard、拿到 VPS IP 之后再回来填。注意:这里必须填一个合法的 IP 地址,填 1.2.3.4 这样的假 IP 占位可以,但不能留空、不能写 your_vps_ip 之类的文字——Clash 解析到非法 IP 时整个配置文件加载失败,OpenClash 会无法启动)。
YAML
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
ipv6: false
external-controller: 0.0.0.0:9090
secret: ''
unified-delay: true
tcp-concurrent: true
find-process-mode: strict

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true
  override-destination: true
  sniff:
    TLS:
      ports: [443, 8443]
    HTTP:
      ports: [80, "8080-8880"]
    QUIC:
      ports: [443, 8443]
  skip-domain:
    - "+.push.apple.com"

# DNS:fake-ip 防泄漏,境内走国内DNS,境外走加密DNS防污染
dns:
  enable: true
  ipv6: false
  prefer-h3: false
  use-hosts: true
  use-system-hosts: false
  respect-rules: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - 'localhost.ptlogin2.qq.com'
    - '+.stun.*.*'
    - 'time.*.com'
    - 'time.*.apple.com'
    - 'ntp.*.com'

  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
    - 114.114.114.114

  nameserver-policy:
    'geosite:cn,private':
      - 223.5.5.5
      - 119.29.29.29
    'geosite:geolocation-!cn':
      - https://1.1.1.1/dns-query
      - https://8.8.8.8/dns-query

  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query

  fallback:
    - tls://8.8.4.4:853
    - tls://1.0.0.1:853
    - https://cloudflare-dns.com/dns-query
    - https://dns.google/dns-query

  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
    domain:
      - '+.google.com'
      - '+.facebook.com'
      - '+.youtube.com'

# 节点:把下面标记的地方换成你自己的真实信息
proxies:
  - name: "节点1-主力"
    type: vless
    server: your_server1_address.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    network: tcp
    udp: true
    tls: true
    flow: xtls-rprx-vision
    servername: www.microsoft.com
    client-fingerprint: chrome
    reality-opts:
      public-key: your_reality_public_key_1
      short-id: "your_short_id_1"

  - name: "节点2-备用"
    type: vless
    server: your_server2_address.com
    port: 443
    uuid: 11111111-1111-1111-1111-111111111111
    network: tcp
    udp: true
    tls: true
    flow: xtls-rprx-vision
    servername: www.microsoft.com
    client-fingerprint: chrome
    reality-opts:
      public-key: your_reality_public_key_2
      short-id: "your_short_id_2"

proxy-groups:
  # 主备自动切换:主节点异常自动用备用,恢复后自动切回
  - name: "自动故障转移"
    type: fallback
    proxies:
      - "节点1-主力"
      - "节点2-备用"
    url: "http://www.gstatic.com/generate_204"
    interval: 20
    timeout: 3000
    lazy: false

  # 顶层选择组,交由第3节的测速脚本通过 API 控制切换
  - name: "PROXY"
    type: select
    proxies:
      - "节点1-主力"
      - "节点2-备用"
      - "自动故障转移"
      - DIRECT

# 等效全局模式:管理隧道流量直连排除,其余全部走代理
# 下面 1.2.3.4 是占位:第4节拿到 VPS 真实 IP 后回来替换(必须合法 IP,不能留空或写文字)
rules:
  - IP-CIDR,1.2.3.4/32,DIRECT,no-resolve
  - IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
  - DOMAIN-SUFFIX,tailscale.com,DIRECT
  - DOMAIN-SUFFIX,tailscale.io,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - MATCH,PROXY

第三步:保存并启用

  1. 粘贴替换完成后,点页面上的保存(Save)按钮
  2. 回到 OpenClash 主页面,在顶部"配置文件"下拉框里选中你刚建的这个配置
  3. 点击"启动 OpenClash"或者把开关打开
  4. 等几秒钟,去"内核状态(Dashboard)"或者"运行日志"里检查两个节点是不是都显示已连接/延迟正常,颜色一般是绿色代表正常
两个节点都能看到延迟数字(不是显示超时或者叉号),就说明配置生效了,可以进行下一步。
如果节点显示连接失败,先检查 uuid、public-key、short-id 是不是复制完整(这几个字符串很长很容易漏字符),再检查 servername 是否和节点提供方给你的一致。

Clash 内核只能判断节点"通不通",判断不了"是不是被限速了"。这个脚本会定时下载一小段数据算出真实速度,速度不够就切到备用节点。

第一步:用 SSH 登录路由器(参考第1节的方法)

第二步:创建脚本文件

在路由器命令行里输入下面命令,会打开一个叫 vi 的文本编辑器:

路由器命令行
vi /root/clash_speed_switch.sh

vi 编辑器新手操作方式:

  1. 打开后先按一下键盘上的 i 键,进入"插入模式"(左下角会显示 -- INSERT --)
  2. 这时候可以正常粘贴内容了(终端里一般是鼠标右键粘贴,或者 Ctrl+Shift+V)
  3. 粘贴完下面这段完整脚本内容后,按一下 Esc 键退出插入模式
  4. 输入 :wq 然后回车,保存并退出(w=写入保存,q=退出)
脚本里 TEST_URL 和 THRESHOLD_KBPS 是标黄需要检查/替换的地方,其余变量保持默认即可。
SHELL · /root/clash_speed_switch.sh
#!/bin/sh
# Clash 节点测速自动切换脚本(OpenWrt / OpenClash)
# 已知局限:本脚本只测主节点速度、从不验证备用节点。
# 如果备用节点也挂了,会切过去卡 20 分钟,下次运行又测主节点、
# 可能再切回备用节点——两个坏节点之间横跳。如需更稳,切换到备用
# 节点后也应测一次,都不行则告警(可自行在 else 分支里加一次 test_node_speed "$NODE2")。

API="http://127.0.0.1:9090"
SECRET=""
MIXED_PORT="127.0.0.1:7890"
GROUP="PROXY"
NODE1="节点1-主力"
NODE2="节点2-备用"

# 建议换成你自己能稳定访问的直链,体积 2-5MB
TEST_URL="http://cachefly.cachefly.net/10mb.test"

THRESHOLD_KBPS=125
TIMEOUT=15

AUTH_HEADER=""
if [ -n "$SECRET" ]; then
  AUTH_HEADER="-H Authorization:\ Bearer\ $SECRET"
fi

switch_to() {
  node="$1"
  curl -s -X PUT "$API/proxies/$GROUP" \
    -H "Content-Type: application/json" \
    $AUTH_HEADER \
    -d "{\"name\":\"$node\"}" >/dev/null
}

test_node_speed() {
  node="$1"
  switch_to "$node"
  sleep 2

  start=$(date +%s.%N)
  size=$(curl -s -o /dev/null -w "%{size_download}" -x "$MIXED_PORT" -m "$TIMEOUT" "$TEST_URL")
  end=$(date +%s.%N)

  if [ -z "$size" ] || [ "$size" = "0" ]; then
    echo 0
    return
  fi

  dur=$(echo "$end - $start" | bc)
  if [ "$(echo "$dur <= 0" | bc)" = "1" ]; then
    echo 0
    return
  fi

  speed=$(echo "$size / $dur / 1024" | bc)
  echo "$speed"
}

speed1=$(test_node_speed "$NODE1")
echo "$(date '+%F %T') $NODE1 实测速度: ${speed1} KB/s"

if [ "$speed1" -ge "$THRESHOLD_KBPS" ] 2>/dev/null; then
  switch_to "$NODE1"
  echo "$(date '+%F %T') 结果:$NODE1 正常,使用 $NODE1"
else
  switch_to "$NODE2"
  echo "$(date '+%F %T') 结果:$NODE1 限速/异常,已切换到 $NODE2"
fi

第三步:赋予执行权限

路由器命令行
chmod +x /root/clash_speed_switch.sh

第四步:先手动跑一次,确认脚本没问题

路由器命令行
/root/clash_speed_switch.sh

如果看到类似"节点1-主力 实测速度: xxx KB/s"、"结果:节点1-主力 正常,使用 节点1-主力"这样的输出,说明脚本工作正常。

第五步:设置定时任务

路由器命令行
crontab -e

同样会打开 vi 编辑器,按 i 进入插入模式,在最后一行加上:

CRONTAB
*/20 * * * * /root/clash_speed_switch.sh >> /var/log/clash_switch.log 2>&1

加完之后按 Esc,输入 :wq 回车保存退出。这一行的意思是每 20 分钟自动跑一次这个脚本。

测速本身也会消耗节点1的流量,间隔别设太短;测速文件强烈建议换成你自己 VPS 上放的直链,公共测速站国内访问不一定稳定,会影响判断准确性。另外注意:脚本只测主节点、不验证备用节点——如果两个节点都挂了,会在坏节点之间来回横跳(见脚本开头的注释)。

因为家里宽带大概率没有公网 IPv4,这里用你已有的 VPS 做跳板:VPS 和路由器之间建一条 WireGuard 隧道,你人在外面时先连到 VPS,再通过这条隧道访问到路由器。

第一步:SSH 登录你的 VPS

电脑终端
ssh root@你的VPS公网IP

第二步:在 VPS 上安装 WireGuard

VPS 命令行
apt update
apt install wireguard -y
VPS 命令行
yum install epel-release -y
yum install wireguard-tools -y

第三步:在 VPS 上生成密钥对

VPS 命令行
cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

# 分别查看这两个文件内容,等下要用
cat privatekey
cat publickey

把 cat privatekey 和 cat publickey 输出的两串字符先记下来(比如复制到电脑记事本里),一会儿要填到配置文件里。

上面 tee 会把私钥明文打到终端上,也会进 shell 历史。记完密钥后建议执行 history -c 清掉历史记录;讲究一点可以用 wg genkey > privatekey; wg pubkey < privatekey > publickey 这种不回显的写法代替。

第四步:创建 VPS 端配置文件

VPS 命令行
vi /etc/wireguard/wg0.conf

按 i 进入插入模式,粘贴下面内容(先留空 Peer 部分,等第五步生成完路由器的公钥后再回来补):

/etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
PrivateKey = 刚才 cat privatekey 看到的内容
ListenPort = 51820

粘贴完按 Esc,输入 :wq 回车保存。

第五步:在路由器上配置 WireGuard 客户端(通过 LuCI 网页操作)

  1. 浏览器打开路由器后台 http://192.168.1.1 并登录
  2. 如果还没装 WireGuard 相关插件,先 SSH 登录路由器执行:
路由器命令行
opkg update
opkg install luci-app-wireguard wireguard-tools kmod-wireguard
  1. 装完后回到网页后台,刷新页面,顶部菜单点 网络(Network) → 接口(Interfaces)
  2. 点击"新建接口",接口名字填 wgvps,协议选 WireGuard VPN
  3. 点提交后会进入配置详情页,在"常规设置"里:
    • 私钥(Private Key):先在路由器命令行执行 wg genkey | tee /etc/wg_router_private | wg pubkey,把输出的私钥填进去,公钥记下来待会要用
    • 监听端口可留空
    • IP 地址填 10.0.0.2/24
  4. 下拉到"对等端(Peer)"部分,点"添加对等端":
    • 公钥(Public Key):填 VPS 上 cat publickey 看到的内容
    • 允许的IP(Allowed IPs):填 10.0.0.0/24
    • 端点主机(Endpoint Host):填你的 VPS公网IP
    • 端点端口(Endpoint Port):填 51820
    • 持续保活(Persistent Keep Alive):填 25
  5. 点击底部"保存并应用"

第六步:回到 VPS,补全 Peer 配置

把路由器刚才生成的公钥填回 VPS 配置文件:

VPS 命令行
vi /etc/wireguard/wg0.conf

按 i,在文件末尾追加下面内容:

追加到 /etc/wireguard/wg0.conf
[Peer]
PublicKey = 路由器上生成的公钥
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24

Esc → :wq 保存退出。

第七步:VPS 上开启 WireGuard 并放行防火墙端口

VPS 命令行
# 开启并设置为开机自启
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

# 检查状态,能看到 interface: wg0 说明启动成功
wg show

# 放行 UDP 51820 端口(ufw 防火墙示例,如果用其他防火墙面板去对应界面放行即可)
ufw allow 51820/udp
如果你的 VPS 服务商有独立的"安全组"设置(比如阿里云、AWS、Vultr 的控制台里),别忘了也去控制台把 UDP 51820 端口放行,光服务器内部防火墙放行还不够。

第八步:手机/电脑装 WireGuard 客户端连接测试

  1. 手机应用商店搜索并安装 WireGuard 官方 App
  2. 新建隧道,参照 VPS 端 wg0.conf 的格式手动填写,或者用二维码方式(进阶技巧,需要在 VPS 上用 qrencode 生成)
  3. 连接成功后,浏览器访问 http://192.168.1.1 应该能直接打开路由器后台
断开家里 WiFi,用手机流量连接 WireGuard,还能打开路由器后台,说明这条通道搭建成功。

这条通道完全不依赖你的 VPS,走的是 Tailscale 官方的免费协调服务器,就算 VPS 挂了,这条路一般还是通的。

第一步:注册 Tailscale 账号

打开 https://tailscale.com,用 Google / GitHub / Microsoft 账号任选一个登录注册(免费版够个人使用)。

第二步:在路由器上安装 Tailscale

路由器命令行
# 先看软件源里有没有现成的包
opkg update
opkg install tailscale luci-app-tailscale
如果提示找不到这个包,说明你的固件版本软件源没收录,需要去 Tailscale 官网下载对应 CPU 架构的静态二进制手动安装,执行 uname -m 能看到你路由器的架构,把这个结果告诉我,我可以给你更精确的安装步骤。

第三步:启动并登录

路由器命令行
service tailscale start
tailscale up

执行后命令行会打印一个类似 https://login.tailscale.com/a/xxxxxxxx 的链接,复制到电脑浏览器打开,用刚才注册的账号登录授权即可。

第四步:确认路由器已加入你的 Tailscale 网络

路由器命令行
tailscale status

能看到自己路由器的名字和一个 100.x.x.x 开头的地址,说明加入成功,这个地址就是你之后远程访问要用的地址。

第五步:手机/电脑也装上 Tailscale

  1. 手机应用商店搜索安装 Tailscale App,用同一账号登录
  2. 电脑也可以装桌面客户端,同样账号登录
  3. 登录后设备会自动出现在同一个 tailnet(Tailscale 的私有网络)里

第六步:测试远程访问

手机切到流量网络(关掉 WiFi),打开 Tailscale App 确认已连接,然后浏览器访问:

手机浏览器
http://路由器的100.x.x.x地址
能打开路由器后台登录页,说明 Tailscale 这条备用通道也搭建成功了。现在你有两条完全独立的远程管理路径。

这是目前最优雅的备用穿透方案。因为它只需要一条出站连接,你既可以直接安装在 iStoreOS 等软路由系统上,也可以直接利用现有的容器环境,把它作为旁路部署在跑着应用或媒体库的 Docker 环境中。终端设备只需打开浏览器,无需安装任何 App 即可安全访问。

第一步:域名与基础准备

  1. 确保你拥有一个属于自己的域名。
  2. 将域名的 DNS 解析托管给 Cloudflare,并在控制面板中点亮该域名的“小黄云”(开启代理状态)。
Cloudflare 在 2026 年上半年把整套后台改名整合进了「Cloudflare One」,中文界面的菜单层级也跟着变了。下面按 2026 年 8 月的实际中文界面重新写了一遍,如果你打开后发现个别名字对不上,大概率是账号更新进度不同,思路和顺序不会变。

第二步:创建 Tunnel 隧道并获取 Token

先建隧道拿到 Token,这样后面配置身份验证的时候,域名下拉框里才能直接选到它。

  1. 登录 Cloudflare 后进入 Cloudflare One(原来叫 Zero Trust,部分账号左侧菜单可能还是显示旧名字)。
  2. 左侧菜单找 网络 → 连接器(Connectors)→ Cloudflare Tunnels;如果没有"连接器"这一层,直接找 网络 → Tunnels。
  3. 点击 创建隧道,连接方式选 Cloudflared,下一步。
  4. 给隧道起个名字(比如 home-router),点 保存隧道。
  5. 页面会跳到"安装连接器"环节,选择设备的操作系统和架构。OpenWrt / immortalwrt 路由器不要选 Windows——路由器内核是 Linux,操作系统选 Linux,架构按你路由器 CPU 实际架构选(见下方第五步的说明)。
  6. 无论选了什么系统,命令行框里都会出现一条带 --token 的命令,把 --token 后面那一长串字符复制记下来,这就是你的 隧道 Token。

第三步:配置公开访问的域名(发布应用)

  1. 紧接上一步,切到 已发布的应用程序 标签页(也可能显示为"公开主机名")。
  2. 子域:填 router。
  3. 域:下拉选择你托管在 Cloudflare 的域名。
  4. 服务类型:选 HTTP。
  5. URL:填入内网服务的真实 IP 和端口(路由器后台填 192.168.1.1:80;如果想顺便映射 Jellyfin 之类的服务,可以再加一条,比如 192.168.1.x:8096)。
  6. 点击 保存。
做完这一步后,这个域名默认是任何人都能直接打开的,还没有身份验证门槛,必须紧接着做第四步加上验证,不要跳过。

第四步:给域名加上身份验证(Access 应用程序)

这一步用于设置一道"安全门",只有通过验证的人才能看到你的内网登录页。

  1. 左侧菜单找 访问控制 → 应用程序(老版本可能直接显示为 Access → 应用程序)。
  2. 点击 新建自托管应用程序。
  3. 在 目标 卡片的"公共主机名"里:子域 填 router,域 下拉选你的域名,路径 留空。这里应该能直接选到你在第三步已经发布的那个域名。
  4. "允许通过基于浏览器的 RDP、SSH 或 VNC 会话进行访问"这个开关保持关闭即可,这是给远程桌面/SSH 用的高级功能,访问路由器网页后台用不到。
  5. 在 Access 策略 卡片里,点右上角 构建器:
    • 策略名称:随便起,比如"仅限本人"。
    • 操作:选 允许。
    • "包含"规则选择 电子邮件,在右侧填入你自己的常用邮箱地址。
  6. 保存这条策略,确认页面底部"策略尚未保存"的提示消失。
  7. 如果还有"其他设置"标签页(比如会话时长),默认值一般够用,不用改,直接保存整个应用程序即可。
保存后,任何访问这个域名的人都会被要求输入一次性邮箱验证码,只有你允许的邮箱能通过。

第五步:在内网部署 cloudflared 客户端

你可以根据你的实际环境,选择在路由器原生系统安装,或者跑在单独的 Docker 里。任选其一即可:

如果你已经有配置好的 Docker 环境(如 PVE 下的虚拟机环境),一条命令即可搞定,独立运行不影响路由主系统:

DOCKER / SSH
docker run -d --name cloudflared \
  --restart unless-stopped \
  cloudflare/cloudflared:latest tunnel \
  --no-autoupdate run --token 在这里粘贴你刚刚复制的_TOKEN

去 Docker 管理界面看一眼,如果容器正在运行且不报错,就说明连接成功了。

先确认路由器的 CPU 架构,这一步决定你后面该装哪个版本:

路由器命令行
uname -m

常见结果对应关系:aarch64 = ARM 64位,arm 系列 = ARM 32位,x86_64 = 常见软路由/虚拟机,mips 系列 = 老款/低端路由器芯片。

方式 A:软件源直接安装(优先尝试)

路由器命令行
opkg update
opkg install cloudflared
如果提示找不到这个包,说明你固件版本的官方源没收录,直接跳到下面"方式 B"手动安装,不用纠结。

方式 B:手动下载对应架构的二进制文件

去 Cloudflare 官方 GitHub Releases 页面(github.com/cloudflare/cloudflared/releases),根据 uname -m 查到的架构下载对应的 linux 版本,比如架构是 aarch64 就下 cloudflared-linux-arm64,用 scp 或路由器自带的下载工具传到路由器上,赋予执行权限后放到 /usr/bin/cloudflared 即可,后续命令和方式 A 装完之后的步骤相同。

安装完成后(不管方式 A 还是 B),编辑配置启动服务:

路由器命令行
vi /etc/config/cloudflared

按 i 进入编辑模式,将你的 Token 填进去,并确保 enabled 为 1。修改后按 Esc 然后输入 :wq 保存:

/etc/config/cloudflared
config cloudflared 'main'
    option enabled '1'
    option token '在这里粘贴你刚刚复制的_TOKEN'

最后执行以下命令启动并设置开机自启:

路由器命令行
/etc/init.d/cloudflared enable
/etc/init.d/cloudflared start

第六步:测试免客户端远程访问

手机关闭 WiFi,仅用 5G 流量打开系统自带浏览器。
  1. 在浏览器地址栏输入你配置好的域名:https://router.yourdomain.com
  2. 此时你不会看到路由器登录页,而是会被重定向到 Cloudflare 的白色盾牌界面,要求你输入邮箱。
  3. 输入你在第二步允许的那个邮箱地址,点击 Send code。
  4. 去邮箱查收一串 6 位数字验证码,填入网页。
  5. 验证通过!网页将立刻呈现出你原本的内网系统后台界面。
只要你不在其他设备上授权,黑客哪怕爆破出了你的路由器后台密码,也根本摸不到路由器的网络边界。
LuCI 后台和 SSH 都不要用默认端口对外开放;如果你没有额外开放公网端口(本教程走的是 WireGuard/Tailscale 隧道访问局域网地址),可以不用改端口,但密码一定要够强。
建议 SSH 改用密钥登录并禁用密码登录,能有效防止暴力破解。
WireGuard 协议本身对未授权探测是直接丢包不回应的,不容易被扫描发现,安全性较高。
  • VPS 的 SSH 端口、WireGuard 端口都建议加防火墙来源限制,不是必须对所有公网 IP 开放
  • 定期检查 /var/log/clash_switch.log,确认测速切换脚本按预期工作
  • OpenClash 建议开启自带的"内核崩溃自动重启"选项,避免内核异常导致断网
  • WireGuard 和 Tailscale 两条通道建议定期各自测试一次,确保真正出问题时能用