为什么需要 fn-knock
把 NAS 或自托管服务放到公网时,真正难的不是“能不能打开”,而是“哪些流量应该被允许到达服务”。服务本身可能有登录页、补丁和权限控制,但只要管理接口或应用端口直接暴露,扫描、误配置和上游服务漏洞都会成为日常风险。
fn-knock 把访问控制放在服务之前:请求先进入统一网关,再按身份、会话、IP 授权和映射规则决定是否转发到内网服务。它适合 NAS、家庭服务器和 Docker 主机上的私有 Web 服务,也能处理部分 TCP / UDP 服务。
它位于哪里
text
访问者
↓
DNS / 路由器 / CDN / 隧道
↓
fn-knock 网关
├─ 认证、会话、白名单、WAF、请求日志
└─ Host / 路径 / TCP-UDP 路由
↓
飞牛、文件服务、媒体服务或其他内网应用管理后台不在这条访问路径上。它用于保存映射、凭据、证书和运行设置;普通访问者走的是网关入口。
fn-knock 能解决什么
| 目标 | 对应能力 |
|---|---|
| 把多个 Web 服务收在一个入口 | 子域映射或路径映射 |
| 让访问者先验证身份 | TOTP、账号密码、Passkey、OIDC、验证码 |
| 按服务限制谁能访问 | 要求登录、凭据的子域范围 |
| 在无公网 IP 的环境发布服务 | FRP 或 Cloudflared |
| 管理域名和 HTTPS | DDNS、证书库、ACME |
| 观察和处置异常访问 | 登录日志、请求日志、WAF、黑名单、事件通知 |
它不替代什么
fn-knock 只处理确实进入网关的流量。下面几件事仍需要单独完成:
- 及时更新飞牛、容器镜像、系统和业务应用;
- 不把原始管理端口、数据库端口或绕过网关的回源端口暴露到公网;
- 为路由器、反向代理和 CDN 配置正确的防火墙与真实客户端 IP 传递;
- 定期备份,并把备份、令牌、证书私钥和恢复凭据保存在可信位置;
- 为不同用户和服务设置最小必要权限。
尤其要注意:局域网、回环和部分私网来源在网关中默认属于本地豁免。它方便家庭网络使用,但不能用局域网测试结果证明公网认证已经生效。请使用移动网络或其他真实外部网络完成验证。
选择 fn-knock 的方式
从一条简单的链路开始即可:选定部署方式,决定流量是公网直达还是经过隧道,用子域映射发布一个服务,再配置登录凭据、DNS 和证书。其余功能在需要时逐步加入。
