Skip to content

飞牛分享直通

飞牛分享直通 允许未登录访客直接打开经过飞牛 OS 校验的原生 /s/... 分享链接。它只为当前分享建立受限、短时的访问会话,不公开飞牛整站、其他 Host 或其他路径。

该功能可用于公网直连子域模式,以及内网穿透的子域映射或路径模式;直连模式不可用。

生效条件

  1. 外部请求必须先进入 fn-knock 网关。
  2. 系统必须能从当前路由配置中找到真正的飞牛 OS HTTP 上游。
  3. 链接必须是飞牛生成的标准 /s/{shareId} 分享入口。
  4. 系统设置 → 飞牛 开启 飞牛分享直通

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 只能验证当前飞牛版本返回的分享页面结构。上游不可达、响应过慢或结构变化时会拒绝,不会降级为公开访问。
  • 该能力不替代飞牛更新、权限设置、分享撤销和备份。

启用与验证

  1. 确认当前不是直连模式。
  2. Host 路由中保留飞牛映射;路径模式中确认默认路由指向飞牛。
  3. 从 fn-knock 运行环境直接打开飞牛 Target 和一个有效分享。
  4. 系统设置 → 飞牛 开启开关。
  5. 新建真实分享链接,用移动网络上的无痕窗口或未登录设备打开。
  6. 验证详情、预览、缩略图、下载,以及密码保护分享的输入流程。
  7. 再访问飞牛根路径和其他应用,确认仍进入正常登录或被拒绝。

不要在已登录浏览器或局域网中完成唯一一次验证;正常会话和 local_exempt 都会掩盖分享旁路是否真正生效。

排错

  1. 仍进入登录页或返回根入口:确认开关已启用,且系统能识别飞牛 Target。
  2. Host 路由失败:保留明确的飞牛 Host 映射,并检查 Target 可达性。
  3. 路径模式失败:把飞牛映射设为默认路由,再同步路由。
  4. 入口能开但资源失败:查看 /s/preview/s/thumb、静态或下载请求是否经过同一网关。
  5. 刚修改分享状态仍显示旧结果:等待约 30 秒缓存过期后重试。
  6. 偶发超时:先排查飞牛负载、Target 地址和中间代理,不要把整个 Host 改为公开。

运行模式步骤见 内网穿透上手子域模式上手;全局入口见 系统设置,隧道链路见 内网穿透

QQ群:1081609274