私人AI第二部:使用Tailscale Aperture实现安全远程访问
本文介绍如何通过Tailscale私有网络和Aperture AI网关,安全地远程访问自托管的大语言模型,避免暴露在公共互联网上。
在《私人AI》系列的第一部分中,我们成功在GB10 NVIDIA DGX Spark上运行了Qwen3.6-35B-A3B-FP8模型,并通过vLLM提供了兼容OpenAI的API。然而,该服务仅在本地主机(localhost:8000)可访问。本第二部分将带你完成后续步骤,使模型能够从任何授权设备安全访问,而无需暴露在公网。
核心思路:采用两层保护机制——Tailscale(私有网格网络)和Aperture(AI网关)。Tailscale在设备间建立加密的直接连接,如同位于同一局域网;Aperture则通过请求者的Tailscale身份进行认证,并集中记录所有使用情况。
第三阶段:将服务器加入私有网络
首先,在AI服务器(例如DGX Spark)上安装并启动Tailscale:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up浏览器打开输出的URL,使用你的Tailscale账号登录。记下服务器的Tailscale IP(如100.92.0.10),后续配置需要。如果服务器启用了防火墙(如ufw),记得允许Tailscale接口上的8000端口。
第四阶段:部署Aperture网关
前往aperture.tailscale.com申请访问(测试版免费)。成功后在Tailscale管理控制台可看到名为gateway的节点,其仪表盘地址为http://gateway/ui。
在Aperture仪表盘的Configuration中编辑原始的HuJSON配置,在providers块内添加自定义提供商:
"sovereign": {
"baseurl": "http://100.92.0.10:8000",
"apikey": "local-no-auth",
"models": ["Qwen/Qwen3.6-35B-A3B-FP8"]
}注意:baseurl仅包含主机和端口,不要添加/v1;apikey可为任意字符串;models必须与vLLM提供的模型ID完全一致。
然后,在grants块中添加访问规则,例如允许所有用户访问所有模型:
"grants": [
{
"src": ["*"],
"app": {
"tailscale.com/cap/aperture": [
{ "role": "admin" },
{ "models": "**" }
]
}
}
]保存配置后,在Models选项卡中点击Play按钮测试,绿色表示连接成功。
第五阶段:客户端连接
在客户端(如笔记本电脑)同样安装并登录Tailscale,确保使用与服务器相同的账号。然后测试连接:
curl http://gateway/v1/models若返回模型列表,则MagicDNS生效。接着发起真实请求:
curl http://gateway/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen3.6-35B-A3B-FP8","messages":[{"role":"user","content":"hello from my laptop"}]}'无需API密钥,Tailscale身份即认证凭证。请求日志将在Aperture仪表盘中可见。
常见故障排除
- Play按钮显示红X:检查Tailscale ACL是否允许Aperture节点访问服务器的8000端口。
- 路径错误:确保baseurl不含/v1。
- 模型未显示:确认apikey非空且模型ID正确。
- 无法解析gateway:启用MagicDNS或使用Aperture节点的Tailscale IP。
- 访问被拒:检查grants配置。
现在,你已经拥有一个私密、安全、可远程访问的AI模型。后续可将各类应用指向http://gateway/v1,API密钥随意填写,模型选择相应ID即可。