无公网IP住宅机器部署AI中转完整流程
家里有一台闲置的Windows或Linux机器,想用它跑AI中转服务对外提供API,但宽带没有公网IP?
本文针对这个场景写一个零基础能照做的完整流程。
你需要准备什么
- 一台能正常运行的住宅机器(Windows或Linux均可),建议4GB以上内存、50GB硬盘。
- 一个域名(例如 example.com),并确认域名控制台能添加DNS解析记录。
- 如果是用Cloudflare Tunnel:需要注册Cloudflare账号,并且域名托管在Cloudflare。
- 如果是用frp:需要一台有公网IP的云服务器(最低配置1核2G即可),并提前安装好frps服务端。
- Docker或Podman(可选但推荐),用于快速部署中转服务软件,例如One API或New API。
第一步:选择并配置内网穿透方案
方案A:Cloudflare Tunnel(最简单,无需服务器)
- 登录Cloudflare,进入域名控制面板。
- 左侧菜单找到 Zero Trust → Networks → Tunnels。
- 点击 Create a tunnel,选择 Cloudflared,给隧道命名。
- 按要求安装cloudflared客户端到你的住宅机器:
- Linux/macOS:
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared && chmod +x cloudflared - Windows:下载exe后放入系统路径。
- 运行登录命令:
cloudflared tunnel login,浏览器授权后自动创建证书。 - 运行
cloudflared tunnel create mytunnel,会生成一个隧道ID。 - 配置域名解析:
cloudflared tunnel route dns mytunnel subdomain.example.com。 - 编辑配置文件
~/.cloudflared/config.yml(Windows在用户目录下),内容示例:
tunnel: mytunnel
credentials-file: /root/.cloudflared/.json
ingress:
- hostname: subdomain.example.com
service: http://localhost:3000
- service: http_status:404
- 启动隧道:
cloudflared tunnel run mytunnel,建议使用systemd或计划任务设为开机自启。
方案B:frp(需要一台公网服务器)
- 在公网服务器(假设IP为1.2.3.4)上安装frps:
- 下载frp(https://github.com/fatedier/frp/releases),解压。
- 编辑
frps.toml:bindPort = 7000。 - 启动:
./frps -c frps.toml。
- 在住宅机器上安装frpc:
- 编辑
frpc.toml:
serverAddr = "1.2.3.4"
serverPort = 7000
[[proxies]]
name = "ai-proxy"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000
remotePort = 8080
- 启动:
./frpc -c frpc.toml。
- 此时访问
http://1.2.3.4:8080即可转发到住宅机器的3000端口。 - 建议再用Nginx反代添加域名和HTTPS。
两种方式选一种即可,Cloudflare Tunnel无需单独申请HTTPS证书且自带安全防护,推荐新手优先使用。
第二步:在住宅机器上部署AI中转服务
以One API为例(支持OpenAI兼容接口代理、负载均衡等):
- 安装Docker(如已安装可跳过)
- Linux:
curl -fsSL https://get.docker.com | sh - Windows:下载Docker Desktop并安装。
- 启动One API容器:
docker run -d --name one-api -p 3000:3000 \
-e SQLITE_PATH=/data/one-api.db \
-e SESSION_SECRET=$(openssl rand -hex 32) \
-v one-api-data:/data \
justsong/one-api:latest
- 访问
http://localhost:3000,首次进入后设置管理员账号和密码。 - 在后台添加渠道:例如OpenAI、Azure、Claude等,填入对应API Key和地址。
- 创建一个令牌(Token),后续客户端连接时使用这个令牌。
第三步:避坑指南
- 端口冲突:如果住宅机器上已有其他服务占用3000端口,修改容器的映射端口,并在内网穿透配置中同步更改(例如 -p 3001:3000,穿透配置也改为
localhost:3001)。 - 防火墙设置:frp模式下,需确保服务器防火墙放开7000和8080端口。Cloudflare Tunnel模式无需放行入站端口(只出站到Cloudflare)。
- Docker容器重启:设置容器自动重启:
docker update --restart unless-stopped one-api。 - 域名解析延迟:添加新DNS记录后可能需要10分钟左右生效,耐心等待。
- Cloudflare Tunnel速度:免费版节点可能较慢,适合个人或低并发场景。
第四步:效果验证与常见问题
验证连通性
- 打开浏览器访问配置的域名(Cloudflare Tunnel)或服务器IP:端口(frp)。
- 如果看到One API的登录页面,说明内网穿透正常工作。
- 尝试用curl调用API:
curl https://subdomain.example.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"Hello"}]}'
- 如果返回正常的JSON响应,说明AI中转服务可对外使用。
常见问题解答
Q:家里域名解析后无法访问,可能是什么原因?
A:先检查cloudflared隧道是否正在运行;然后检查容器是否监听正确端口;最后确认DNS记录是否已生效(可ping域名看解析到的IP)。
Q:frp模式下如何添加HTTPS?
A:在公网服务器上使用Nginx反向代理frp暴露的端口(如8080),并配置Let's Encrypt证书。Nginx配置片段:
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
}
Q:内网穿透会不会影响家里网络速度?
A:主要消耗上行带宽,如果家里上行带宽较小(如30Mbps),并发请求多时会感觉卡顿。建议控制并发数量或升级带宽。
完成以上步骤后,你就成功在无公网IP的住宅机器上部署了可对外服务的AI中转服务。
如果遇到异常,优先检查隧道日志(cloudflared tunnel run 的控制台输出)和Docker容器日志(docker logs one-api)。
按照本文完整执行一遍,再根据自己环境做微调即可。