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