你的 NAS 还在公网裸奔?与其赌运气,不如把 NAS 收进内网,用 Claude Code 配合 TaoToken 写一个「家庭管家」App,远程管理所有设备。TaoToken 的官网和 Key 申请入口都在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。故事要从飞牛 FNOS 的漏洞说起:大量直接映射公网的 NAS 正被扫描器爆破,而我把跳板机的方案试通后,第一件事就是解决 Claude Code 的模型通道问题。官方额度在写长项目时会中断,多把 Key 来回切换更折腾。后来把接口 Base URL 指到 https://taotoken.net/api,用一把 Key 跑完整轮开发,会话稳定了,零编码的 App 也顺利落地。这篇就补上这关键一环。
1. NAS 开公网,等于在门口贴「欢迎光临」
1.1 飞牛 FNOS 漏洞事件,离我们并不远
飞牛 FNOS 被连续曝出安全漏洞,最典型的几类:不用登录就能进管理后台、特定请求可以执行任意命令、默认密码一猜就破。这听起来像电影里的黑客剧情,但真实情况是全网扫描器每分钟都在自动遍历公网 IP,只要你的 5000、8080、22 端口有响应,它就开始撞库和匹配漏洞利用脚本。
我身边就有人觉得“我密码设成 15 位了,怕什么”,结果还是被入侵了。原因不是密码不够长,而是漏洞利用往往绕过了登录环节。NAS 一旦暴露公网,攻击面就从一个局域网服务变成了一个全球服务,任何人都能对你的设备发起探测。家里照片、工作文档、Docker 容器里的业务数据,全都在同一条战线上。
1.2 公网裸奔的五大死穴
| 死穴 | 具体表现 |
|---|---|
| 暴力破解 | 全网扫描器对 22、5000、8080 这些端口重复尝试,弱口令几小时内就会被试穿。 |
| 弱口令重灾区 | admin/123456、root/root 这类组合在字典里排在最前面,扫描器几乎秒试。 |
| 零日漏洞 | 厂商还没来得及出补丁,攻击者已经利用公开 PoC 打进来了。 |
| 中间人风险 | 没有正确配置 HTTPS 时,登录密码可能被截获,局域网里的流量同样能被监听。 |
| 供应链污染 | 装过的第三方套件或 Docker 镜像若被投毒,你的内网就变成了下一个跳板。 |
结论很简单:别把 NAS 的端口映射出去。远程访问可以走跳板机,但 App 从哪来?我的答案是让 Claude Code 零编码写出来。
2. 方案选型:为什么先接一个稳定模型入口,再谈写 App
2.1 远程方案的取舍
当时我在表格里权衡了几条路:
- NAS 直接开公网:配置最省事,但安全性最低,漏洞和弱口令两个死穴直接暴露。
- 内网穿透工具:免费版速度不稳,付费版还要经过第三方服务器,数据链路多一跳。
- 商业远程控制:体验好,但厂商能看到你的操作,心里总有点别扭。
- 跳板机 + SSH 密钥:NAS 完全不出门,攻击面只剩一台功耗 2W 的电视盒子,安全性最高。
最终选了最后一种。电视盒子刷 Armbian 当跳板机,手机端用一个叫做「家庭管家」的原生 Android App 完成远程唤醒、终端管理和端口转发。这个 App 不是我手写的,而是靠 Claude Code 一句一句“聊”出来的。
2.2 Claude Code 需要的是稳定模型通道
真正开工前,一个容易被忽略的问题摆在面前:Claude Code 本身要能稳定调用模型,才能连续帮你写代码。
官方通道在额度用尽后直接 401,写一半断掉,上下文全部丢失;多把 Key 来回切换又很容易搞混环境变量。更别提不同模型的账号不互通,想换个更强模型还得重新登录。后来我把模型通道统一指到 TaoToken,它是统一 API 兼容通道,用一个 Key 就能接入多个模型,Base URL 固定为https://taotoken.net/api,模型 ID 在模型广场随时切换。对 Claude Code 来说,它只认这一个入口;对开发者来说,不用再关心这把 Key 到底属于哪个平台。
简单总结:TaoToken 负责让 Claude Code 一直“在线”,Claude Code 负责把「家庭管家」写出来。两条腿缺一不可。
3. 开工前先做一件事:让 Claude Code 连上 TaoToken
3.1 拿 Key 和 Base URL
打开 TaoToken,注册后进入控制台,创建 API Key,保存为YOUR_API_KEY。Base URL 是https://taotoken.net/api,注意末尾没有/v1。模型 ID 不要自己编,去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场,按当时的列表选择。
我一开始就在这上面犯了迷糊。记成了很多兼容 API 都要加/v1,结果 Claude Code 拼出来的请求路径直接 404。后来把 Base URL 改成不带/v1的地址,一次通过。
3.2 用环境变量配置 Claude Code
在终端里执行:
export ANTHROPIC_BASE_URL=https://taotoken.net/api export ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY export ANTHROPIC_MODEL=YOUR_MODEL_ID然后运行claude。Claude Code 官方读取这三个环境变量,把请求发到 TaoToken 的兼容接口。这里的YOUR_MODEL_ID必须以模型广场当前列表为准,不同时期可用模型会调整,别直接抄教程里的旧 ID。
3.3 长期配置:写入 ~/.claude/settings.json
如果不想每次开终端都 export,可以写进配置文件:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID" } }保存后重新打开 Claude Code,先用一句话验证:“用 100 字介绍你自己。”如果能看到回复,说明通道已经通了。这一步走通再进入开发,否则后面每轮对话都会卡在认证上。
4. 零编码开发「家庭管家」App,Claude Code 是这样干活的
4.1 SSH 连接管理模块:先生成,再本地编译验证
我给 Claude Code 的第一个需求是:“做一个 SSH 连接管理界面,支持保存多个连接配置,密钥认证方式,列表页展示主机名和端口,点击后进到会话页。”
Claude Code 直接生成了一套 Android 工程结构:连接列表的 RecyclerView 和 Adapter、添加连接的表单 Activity、JSch 的 Session 管理类。我不需要手写 Kotlin 语法,只需要在关键位置补充需求,比如“这里要支持私钥密码”。它生成代码后,我在 Android Studio 里编译,遇到报错就把日志贴回对话。整个过程就是“生成—编译—贴报错—再生成”的循环,我一行代码都没手写。
这个步骤里,TaoToken 的作用很实在:每一轮对话的上下文必须完整保留。如果中途断连,之前的代码结构和报错历史全得重来,能连续聊几个小时不断线,才写得完这种多模块 App。
4.2 终端模拟器:不是聊天框,是 ANSI 解析
家庭管家 App 里最容易被低估的是终端模拟器。我要的是能在手机上跑 vim 和 htop,但完全没接触过 ANSI 转义序列、256 色、CJK 字符宽度这些概念。
对话大概是这样的:
- 我:“终端里跑 htop 时颜色乱了,顶部还有乱码。”
- Claude Code:“需要支持 ANSI 256 色和 CJK 字符宽度,我会重新实现解析器,你把这版代码放到 Android Studio 里跑一下,然后把崩溃日志贴回来。”
我照做,把日志粘给它,它再改,我再编译。来回五六轮,终端终于能正常显示。如果没有稳定的模型通道,这么长的迭代早就被官方额度中断打断了。
4.3 端口转发和 WOL 唤醒:两个最值钱的模块
端口转发是让我惊喜的功能。原计划只是“在手机上能敲命令就行”,后来发现很多场景需要浏览器直接访问 NAS 管理界面。Claude Code 基于 JSch 的setPortForwardingL实现了本地转发,把手机localhost:5000映射到 NAS192.168.x.x:5000;还做成了可持久化的规则列表,App 重启后自动重连。
远程唤醒则要求发送 WOL 魔术包到 NAS 的 MAC 地址。我告诉 Claude Code:“点击按钮后发 magic packet,等 60 秒自动 SSH 探测 NAS 是否启动。”它直接从零实现了 UDP 广播逻辑。
只看结果,这像是一个小团队做出来的工具。但过程里真正的门槛不是代码,而是让 Claude Code 稳定地用同一个上下文连续对话几个小时。这就是我把通道切到 TaoToken 的目的——统一 API 入口,省去多 Key 切换和额度中断的折腾。
5. 落地到电视盒子:把 App 部署成「家庭安全堡垒」
5.1 电视盒子刷 Armbian 的三步准备
闲置电视盒子(功耗 2W)刷 Armbian 后,就是一台低功耗 Linux 服务器。需要三步基础工作:
- 光猫改桥接,让路由器拿到公网 IP。
- 电视盒子刷 Armbian,配置好网络。
- 加固 SSH:只允许密钥登录,开启 Fail2ban。
这三步都在本地操作。完成后,跳板机的公网 IP 就是家庭管家 App 的服务器地址。
5.2 手机安装 App 并添加 SSH 连接
打开家庭管家 App,点击“添加连接”,填入跳板机公网 IP、SSH 端口,选择之前生成的私钥文件,然后登录。登录后 App 会自动保存会话,下次直接点击连接,不用重复输入。
5.3 远程唤醒、终端、端口转发的实际顺序
出门在外需要家中 NAS 上的文件时,操作流程是:
- 打开家庭管家,点击“唤醒 NAS”,跳板机发送 WOL 魔术包。
- 等待 1—2 分钟,打开 SSH 终端登录 NAS,检查服务是否启动完成。
- 在“端口转发”里把 NAS 的 5000 端口映射到手机本地,浏览器打开
localhost:5000就能进管理界面。
全程 NAS 的公网端口是关闭的。攻击者就算扫到跳板机,也只能撞 SSH 密钥,撞不开就触发 Fail2ban 封禁。
6. 跑通之后,去控制台对一下这次调用
6.1 用模型对话页快速验证模型 ID
配置保存后,先在 TaoToken 模型对话 里用同一把 Key 发一条消息,确认 Key 有效、模型 ID 没有填错。如果网页对话正常但 Claude Code 报鉴权失败,那问题大概率出在 Base URL 或环境变量上。
6.2 在控制台确认调用已经记账
Claude Code 每完成一轮对话,TaoToken 控制台都会记录调用次数和 token 消耗。打开 TaoToken 控制台 可以看到这把 Key 的用量记录。若你打算长期写代码,建议看一眼 Coding Plan 的套餐余量,避免写到一半被限额打断。
7. 排障:这次我只遇到三种错
7.1 401:Key 复制不完整
最常见的是复制 Key 时漏掉末尾字符,或多了换行。检查ANTHROPIC_AUTH_TOKEN是否严格等于控制台创建的YOUR_API_KEY。我习惯先执行echo $ANTHROPIC_AUTH_TOKEN看一眼格式。
7.2 model not found:模型 ID 过期
Claude Code 配置里填的模型 ID,必须和 TaoToken 模型广场当前提供的模型完全一致。不要参考旧教程里的固定 ID,直接打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 看最新列表。如果填了一个不存在的模型名,API 会返回模型不存在,不会自动降级到别的模型。
7.3 连不上 API:Base URL 末尾多了 /v1
TaoToken 的 Base URL 是https://taotoken.net/api,不是https://taotoken.net/api/v1,也不是官网首页 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。Claude Code 会在 Base URL 后面拼自己的路径,如果 Base URL 多写了/v1,最终会变成/api/v1/v1/messages之类的错误地址,连接自然失败。
8. 写在最后:数据安全不该交给侥幸
8.1 一年下来的真实感受
跳板机跑了一年,最常见的是 Fail2ban 每天拦截几十次扫描。NAS 因为从不暴露公网,几乎没有被主动探测的机会。这个方案的安全感不是“我觉得安全”,而是攻击面本身就不存在。
8.2 AI 编程把门槛从「学 Android」变成了「说清楚需求」
回头再看,Claude Code + TaoToken 最大的意义不是省掉键盘,而是把开发过程的上下文稳定留在会话里。你不需要懂 Java/Kotlin,但你要能清楚描述“点击按钮后 60 秒自动探测端口”。AI 生成代码,你在本地编译贴报错,它再修。这种循环只要通道稳定,就能一直持续。
8.3 下一步
如果你想复制这套方案,建议先走通模型通道,再去谈 App 功能。想先试试模型能力可以进 模型对话,长期写代码选 Coding Plan,创建 Key 在 控制台 API Keys,Claude Code 环境变量的完整对照表在 接入文档。把这些配置保存好,剩下的就是让 Claude Code 写 SSH、WOL 和端口转发,让 NAS 安安静静待在家里。