用 fknock 搭建反代访问
这篇教程适合谁
这篇教程面向下面这类典型用户:
- 没有公网 IP
- 想通过
FRP或Cloudflared从外网访问内网服务 - 想把多个服务统一挂到一个入口下
- 希望访问前先经过 fknock 的认证
这篇教程的目标不是讲清每一个功能页的全部细节,而是把它们按可落地的顺序串起来。
最终会完成什么
完成后,你通常会得到这样一条链路:
- 外部用户访问你的公网入口
- 请求先进入 fknock 的
7999 - 先完成认证
- 再通过路径访问不同服务,例如
/alist、/jellyfin
教程前提
在开始前,建议先准备:
- 已安装
敲门 knock - 至少一个要接入的本地服务
- 一台可用的身份验证器 App
- 决定你准备使用
FRP还是Cloudflared
如果你还没准备身份验证器,先看:
第 1 步:安装并进入后台
如果你还没安装完成,先看:
安装完成后,进入飞牛桌面的 敲门 knock 图标,确认后台可打开。
第 2 步:切换到反代模式
路径:系统设置 → 模式
请选择:
反代模式
这是反代教程最关键的前提。因为只有在反代模式下:
7999才会真正以统一网关的思路工作- 映射、FRP、Cloudflared 才成为主流程
如果你切到反代模式后还在想着“每个 Web 服务都有独立子域”,那说明你更适合子域模式。
如果你真正想要的是“登录后继续开放 5666、8080 这类原始端口”,才需要再评估直连模式。
第 3 步:先完成认证准备
路径:认证配置
建议顺序:
- 先绑定一个 TOTP
- 如有需要,再给自己的常用设备绑定 Passkey
为什么这里一定要先做认证
因为反代模式下,你最终是要把多个服务挂到公网入口后面的。
如果你先做隧道、先做映射,却还没有管理员认证能力,最后仍会卡在无法顺利登录和验证。
推荐阅读:
如果你准备把登录页的人机验证切到 Cloudflare,而不是继续使用内置 PoW,建议这里就把专题页一起看完:
第 4 步:优先给入口配证书
路径:SSL 证书
为什么这一步在反代教程里要提前
尤其是 FRP 场景,外部通常会直接以:
https://公网地址:远端端口
的方式访问 fknock 的 7999。如果你不给 fknock 本身配好证书,后面会出现:
- 浏览器持续提示不安全
- Passkey 体验不稳定
- 你难以判断问题到底是链路、认证还是证书
怎么选证书方案
- 已有正式证书:直接上传
- 只是测试:先用自签证书
- 有域名并长期用:走 ACME
详细步骤见:
第 5 步:添加映射
路径:路径映射
推荐做法
第一轮只接 1 到 2 个最常用服务,不要一次性把全部内网服务都挂出来。
方式一:一键发现
适合机器上已经跑了多个本地服务的情况。
操作顺序:
- 点击
一键发现 - 等待扫描完成
- 勾选要接入的服务
- 检查建议路径
- 添加选中项
方式二:手动添加
适合你已经知道目标地址的情况。
例如:
- 触发路径:
/alist - 目标地址:
http://127.0.0.1:5244
如果目标应用接入后资源路径异常,再回头决定是否打开:
重写 HTML去除前缀根目录模式
详细说明见:
第 6 步:确认默认服务保持为飞牛 OS
默认路由一般不需要你手动设置。
推荐做法是:
- 使用服务发现或一键发现接入服务
- 让系统自动把
飞牛 OS保持为默认服务 - 一般不要主动把默认服务改成别的应用
这意味着,对大多数用户来说:
- 访问根地址
/时,默认先进入飞牛 OS - 你真正需要重点维护的是子路径映射,而不是根路径跳转
只有当你非常确定要把根路径交给别的服务时,才建议再考虑手动改默认路由。
第 7 步:选择外部接入方式
反代场景下,最常见就是下面两条路线。
路线 A:FRP
适合:
- 你自己有 FRP 服务端
- 想完全控制公网入口和远端端口
推荐顺序:
系统设置 → FRP下载资源内网穿透 → FRP先用表单模式填写服务端地址、端口、Token、本地端口、远端端口- 如果你还要补更多
frpc.toml参数,再点击自定义进入源码模式 - 保存并启动
- 看运行日志
保存前会先执行一次 frpc verify,所以如果你写了自定义 TOML,最好先确保语法正确。
FRP 默认会把:
127.0.0.1:7999
映射出去,并启用 proxy protocol v2。这正是 fknock 设计好的默认配合方式。
FRP 场景的外部访问方式
通常你会这样访问:
https://你的 FRP 服务端地址:远端端口/https://你的 FRP 服务端地址:远端端口/alist
路线 B:Cloudflared
适合:
- 已在使用 Cloudflare
- 不想维护公网服务器
推荐顺序:
系统设置 → Cloudflared下载资源- 在 Cloudflare Zero Trust Dashboard 创建 Tunnel
- 把
--token后面的 Token 粘贴回 fknock - 启动 Tunnel
- 在 Cloudflare 侧继续配置 Public Hostname
Cloudflared 场景的外部访问方式
通常你会这样访问:
https://你的 Tunnel 域名/https://你的 Tunnel 域名/alist
Cloudflared 的关键细节较多,建议直接配合专题页操作:
第 8 步:明确这条教程通常不需要 DDNS
这是很多人第一次搭反代时最容易绕进去的误区。
请先记住:
- 这篇反代教程通常不需要先做 DDNS
原因是:
FRP场景下,外部入口来自 FRP 服务端Cloudflared场景下,外部入口来自 Cloudflare Tunnel
这两种都不是“让你的域名直接解析到你家里的公网 IP”。
如果你后续还有自己的直连公网入口,或者准备做 IPv6 直连,再去看 DDNS 页面即可。
第 9 步:从外部网络验证
建议按这个顺序测试:
- 先在本机验证目标服务可用
- 再在本机验证
http://127.0.0.1:7999/路径是否能命中映射 - 最后从真正的外部网络访问你的 FRP 地址或 Tunnel 域名
测试时重点看什么
- 登录页能否正常打开
- 人机验证能否先正常通过
- TOTP / Passkey 是否正常
- 登录后子路径能否打开
- 根路径是否仍按默认进入飞牛 OS
- 页面资源是否正常
如果这些都正常,你通常还会看到:
- 页面右下角出现
toolbar小组件
它可以帮助你在不同应用之间快速切换,也可以直接从里面退出登录。
如果你想确认当前到底有哪些在线会话,或者怀疑某次访问过程中来源 IP 发生了变化,可以再回到后台查看:
反代教程的标准完成状态
做到下面这些,才算真正完成:
- 外部用户能打开登录页
- 管理员能完成 TOTP 或 Passkey 登录
- 至少 1 个映射服务可用
- 根路径仍默认进入飞牛 OS
- 日志中没有明显持续报错
这篇教程做完后,最常回看的页面
| 你接下来要做什么 | 回看哪一页 |
|---|---|
| 想把登录页的人机验证切到 Cloudflare | 验证码设置、Cloudflare Turnstile 启用指南 |
| 想继续补映射细节 | 路径映射 |
| 想排查在线会话或 IP 变化 | 会话管理与 IP 轨迹 |
| Cloudflared 公网端协议拿不准 | Cloudflared 隧道配置 |
如果遇到问题,应该回到哪一页
| 问题 | 回看哪一页 |
|---|---|
| 登录方式、TOTP、Passkey 不清楚 | 认证体系总览、TOTP 与密码器 App、Passkey |
| 子路径打不开、页面资源错乱 | 路径映射 |
| FRP 起不来 | 内网穿透 |
| Cloudflared 起得来,但公网域名不通 | Cloudflared 隧道配置 |
| HTTPS 有问题 | SSL 证书 |
