Skip to content

用 fknock 搭建反代访问

这篇教程适合谁

这篇教程面向下面这类典型用户:

  • 没有公网 IP
  • 想通过 FRPCloudflared 从外网访问内网服务
  • 想把多个服务统一挂到一个入口下
  • 希望访问前先经过 fknock 的认证

这篇教程的目标不是讲清每一个功能页的全部细节,而是把它们按可落地的顺序串起来。

最终会完成什么

完成后,你通常会得到这样一条链路:

  1. 外部用户访问你的公网入口
  2. 请求先进入 fknock 的 7999
  3. 先完成认证
  4. 再通过路径访问不同服务,例如 /alist/jellyfin

教程前提

在开始前,建议先准备:

  1. 已安装 敲门 knock
  2. 至少一个要接入的本地服务
  3. 一台可用的身份验证器 App
  4. 决定你准备使用 FRP 还是 Cloudflared

如果你还没准备身份验证器,先看:

第 1 步:安装并进入后台

如果你还没安装完成,先看:

安装完成后,进入飞牛桌面的 敲门 knock 图标,确认后台可打开。

第 2 步:切换到反代模式

路径:系统设置 → 模式

请选择:

  • 反代模式

这是反代教程最关键的前提。因为只有在反代模式下:

  • 7999 才会真正以统一网关的思路工作
  • 映射、FRP、Cloudflared 才成为主流程

如果你切到反代模式后还在想着“每个 Web 服务都有独立子域”,那说明你更适合子域模式。

如果你真正想要的是“登录后继续开放 5666、8080 这类原始端口”,才需要再评估直连模式。

第 3 步:先完成认证准备

路径:认证配置

建议顺序:

  1. 先绑定一个 TOTP
  2. 如有需要,再给自己的常用设备绑定 Passkey

为什么这里一定要先做认证

因为反代模式下,你最终是要把多个服务挂到公网入口后面的。

如果你先做隧道、先做映射,却还没有管理员认证能力,最后仍会卡在无法顺利登录和验证。

推荐阅读:

如果你准备把登录页的人机验证切到 Cloudflare,而不是继续使用内置 PoW,建议这里就把专题页一起看完:

第 4 步:优先给入口配证书

路径:SSL 证书

为什么这一步在反代教程里要提前

尤其是 FRP 场景,外部通常会直接以:

  • https://公网地址:远端端口

的方式访问 fknock 的 7999。如果你不给 fknock 本身配好证书,后面会出现:

  • 浏览器持续提示不安全
  • Passkey 体验不稳定
  • 你难以判断问题到底是链路、认证还是证书

怎么选证书方案

  • 已有正式证书:直接上传
  • 只是测试:先用自签证书
  • 有域名并长期用:走 ACME

详细步骤见:

第 5 步:添加映射

路径:路径映射

推荐做法

第一轮只接 1 到 2 个最常用服务,不要一次性把全部内网服务都挂出来。

方式一:一键发现

适合机器上已经跑了多个本地服务的情况。

操作顺序:

  1. 点击 一键发现
  2. 等待扫描完成
  3. 勾选要接入的服务
  4. 检查建议路径
  5. 添加选中项

方式二:手动添加

适合你已经知道目标地址的情况。

例如:

  • 触发路径:/alist
  • 目标地址:http://127.0.0.1:5244

如果目标应用接入后资源路径异常,再回头决定是否打开:

  • 重写 HTML
  • 去除前缀
  • 根目录模式

详细说明见:

第 6 步:确认默认服务保持为飞牛 OS

默认路由一般不需要你手动设置。

推荐做法是:

  • 使用服务发现或一键发现接入服务
  • 让系统自动把 飞牛 OS 保持为默认服务
  • 一般不要主动把默认服务改成别的应用

这意味着,对大多数用户来说:

  • 访问根地址 / 时,默认先进入飞牛 OS
  • 你真正需要重点维护的是子路径映射,而不是根路径跳转

只有当你非常确定要把根路径交给别的服务时,才建议再考虑手动改默认路由。

第 7 步:选择外部接入方式

反代场景下,最常见就是下面两条路线。

路线 A:FRP

适合:

  • 你自己有 FRP 服务端
  • 想完全控制公网入口和远端端口

推荐顺序:

  1. 系统设置 → FRP 下载资源
  2. 内网穿透 → FRP 先用表单模式填写服务端地址、端口、Token、本地端口、远端端口
  3. 如果你还要补更多 frpc.toml 参数,再点击 自定义 进入源码模式
  4. 保存并启动
  5. 看运行日志

保存前会先执行一次 frpc verify,所以如果你写了自定义 TOML,最好先确保语法正确。

FRP 默认会把:

  • 127.0.0.1:7999

映射出去,并启用 proxy protocol v2。这正是 fknock 设计好的默认配合方式。

FRP 场景的外部访问方式

通常你会这样访问:

  • https://你的 FRP 服务端地址:远端端口/
  • https://你的 FRP 服务端地址:远端端口/alist

路线 B:Cloudflared

适合:

  • 已在使用 Cloudflare
  • 不想维护公网服务器

推荐顺序:

  1. 系统设置 → Cloudflared 下载资源
  2. 在 Cloudflare Zero Trust Dashboard 创建 Tunnel
  3. --token 后面的 Token 粘贴回 fknock
  4. 启动 Tunnel
  5. 在 Cloudflare 侧继续配置 Public Hostname

Cloudflared 场景的外部访问方式

通常你会这样访问:

  • https://你的 Tunnel 域名/
  • https://你的 Tunnel 域名/alist

Cloudflared 的关键细节较多,建议直接配合专题页操作:

第 8 步:明确这条教程通常不需要 DDNS

这是很多人第一次搭反代时最容易绕进去的误区。

请先记住:

  • 这篇反代教程通常不需要先做 DDNS

原因是:

  • FRP 场景下,外部入口来自 FRP 服务端
  • Cloudflared 场景下,外部入口来自 Cloudflare Tunnel

这两种都不是“让你的域名直接解析到你家里的公网 IP”。

如果你后续还有自己的直连公网入口,或者准备做 IPv6 直连,再去看 DDNS 页面即可。

第 9 步:从外部网络验证

建议按这个顺序测试:

  1. 先在本机验证目标服务可用
  2. 再在本机验证 http://127.0.0.1:7999/路径 是否能命中映射
  3. 最后从真正的外部网络访问你的 FRP 地址或 Tunnel 域名

测试时重点看什么

  • 登录页能否正常打开
  • 人机验证能否先正常通过
  • TOTP / Passkey 是否正常
  • 登录后子路径能否打开
  • 根路径是否仍按默认进入飞牛 OS
  • 页面资源是否正常

如果这些都正常,你通常还会看到:

  • 页面右下角出现 toolbar 小组件

它可以帮助你在不同应用之间快速切换,也可以直接从里面退出登录。

如果你想确认当前到底有哪些在线会话,或者怀疑某次访问过程中来源 IP 发生了变化,可以再回到后台查看:

反代教程的标准完成状态

做到下面这些,才算真正完成:

  1. 外部用户能打开登录页
  2. 管理员能完成 TOTP 或 Passkey 登录
  3. 至少 1 个映射服务可用
  4. 根路径仍默认进入飞牛 OS
  5. 日志中没有明显持续报错

这篇教程做完后,最常回看的页面

你接下来要做什么回看哪一页
想把登录页的人机验证切到 Cloudflare验证码设置Cloudflare Turnstile 启用指南
想继续补映射细节路径映射
想排查在线会话或 IP 变化会话管理与 IP 轨迹
Cloudflared 公网端协议拿不准Cloudflared 隧道配置

如果遇到问题,应该回到哪一页

问题回看哪一页
登录方式、TOTP、Passkey 不清楚认证体系总览TOTP 与密码器 AppPasskey
子路径打不开、页面资源错乱路径映射
FRP 起不来内网穿透
Cloudflared 起得来,但公网域名不通Cloudflared 隧道配置
HTTPS 有问题SSL 证书

QQ群:1081609274