飞牛分享直通
飞牛分享直通 允许未登录访客直接打开经过飞牛 OS 校验的原生 /s/... 分享链接。它只为当前分享建立受限、短时的访问会话,不公开飞牛整站、其他 Host 或其他路径。
该功能可用于公网直连子域模式,以及内网穿透的子域映射或路径模式;直连模式不可用。
生效条件
- 外部请求必须先进入 fn-knock 网关。
- 当前请求必须命中一条真正指向飞牛 OS 的 HTTP 路由。
- 链接必须是飞牛生成的标准
/s/{shareId}分享入口。 - 在
系统设置 → 飞牛开启飞牛分享直通。
Host 路由中,应保留一条明确指向飞牛的业务映射,例如:
fnos.example.com -> http://127.0.0.1:5666网关会使用当前请求实际命中的 Target、Host 和路由标识探测飞牛上游,不再从其他映射中猜测后端。路径模式不要求飞牛成为默认路由,但 /s/... 及其资源路径必须命中同一条飞牛路由;若被其他路径规则或默认路由接管,分享直通会拒绝处理。
请求链路
访客打开 /s/{shareId}
-> fn-knock 请求飞牛上游校验分享
-> 有效或需要分享密码:签发仅用于 /s 的短时分享会话
-> 放行该分享的页面、预览、缩略图、下载和静态资源
-> 无效、超时、无法识别或访问越界:清理会话并返回 /校验不是只看 URL 外形。fn-knock 会请求飞牛上游的同一分享入口并解析分享数据;上游确认有效,或确认这是需要分享密码的合法链接时,才进入分享流程。无法确认时默认拒绝。
会话范围
合法分享会写入 fn-knock-fnos-share-session Cookie,其路径限制为 /s。会话记录同时绑定一个 shareId 和当前命中的飞牛后端,只允许该后端上该分享需要的路径族,包括:
/s/{shareId}及其子路径/s/preview/{shareId}/s/thumb/{shareId}/s/static/...、/s/busstatic/...和/s/download/...
访问匹配资源时会续期。带着该 Cookie 访问其他分享、另一个 Host 或路由后端,或越出允许路径时,网关会清理 Cookie;分享会话不能跨后端复用。
这套会话与 fn-knock 正常登录会话分离,不能用于打开管理页、飞牛桌面或其他应用。
与其他访问方式的关系
- Host 的
要求登录和已有严格白名单规则仍保护普通请求;只有合法分享路径进入旁路。 local_exempt是另一条更早的来源例外:网关识别到回环、私网或链路本地来源时,本来就会跳过常规登录。局域网测试不能证明分享直通在公网有效。Basic Auth 跳过是 Host 向上游注入目标服务凭据,不是分享授权,也不会让任意/s/...自动通过。- 飞牛分享自身的密码、有效期和撤销状态仍由飞牛 OS 决定;fn-knock 不替代这些设置。
默认参数与界面边界
当前页面只提供启用开关。后端使用以下默认值,普通用户不能在页面修改:
| 行为 | 默认值 | 作用 |
|---|---|---|
| 上游校验超时 | 2500 ms | 等待飞牛分享页返回 |
| 校验缓存 | 30 s | 减少同一分享的重复探测 |
| 并发校验锁 | 5 s | 合并同一分享的并发探测 |
| 分享会话 | 300 s | 保持连续浏览;匹配资源会续期 |
可明确解析的有效和无效结果会缓存;上游超时或页面无法解析等不确定结果不缓存。刚撤销分享后,短时间内可能仍看到缓存结果,但分享会话仍只限原分享路径。
平台边界
- 这是网关能力,不依赖宿主机防火墙,可用于飞牛 FPK、Docker、OpenWrt、Linux、群晖 DSM 7 SPK 和 Windows 支持的 Host / 路径网关。
- 直连模式只处理登录后端口放行,没有可供分享旁路接管的统一代理链路,因此不可用。
- Docker 中
127.0.0.1:5666指容器自身。飞牛运行在宿主机时,Host Target 必须改为容器可达的宿主机地址。 - fn-knock 只能验证当前飞牛版本返回的分享页面结构。上游不可达、响应过慢或结构变化时会拒绝,不会降级为公开访问。
- 该能力不替代飞牛更新、权限设置、分享撤销和备份。
启用与验证
- 确认当前不是直连模式。
- Host 路由中保留飞牛映射;路径模式中确认
/s/...及相关资源路径实际命中飞牛 Target。 - 从 fn-knock 运行环境直接打开飞牛 Target 和一个有效分享。
- 在
系统设置 → 飞牛开启开关。 - 新建真实分享链接,用移动网络上的无痕窗口或未登录设备打开。
- 验证详情、预览、缩略图、下载,以及密码保护分享的输入流程。
- 再访问飞牛根路径和其他应用,确认仍进入正常登录或被拒绝。
不要在已登录浏览器或局域网中完成唯一一次验证;正常会话和 local_exempt 都会掩盖分享旁路是否真正生效。
排错
- 仍进入登录页或返回根入口:确认开关已启用,且系统能识别飞牛 Target。
- Host 路由失败:保留明确的飞牛 Host 映射,确认当前 Host 实际命中该路由,并检查 Target 可达性。
- 路径模式失败:检查
/s/...是否被其他路径规则或默认路由接管,调整顺序或匹配范围后再同步路由。 - 入口能开但资源失败:查看
/s/preview、/s/thumb、静态或下载请求是否经过同一网关。 - 刚修改分享状态仍显示旧结果:等待约
30秒缓存过期后重试。 - 偶发超时:先排查飞牛负载、Target 地址和中间代理,不要把整个 Host 改为公开。
