内网穿透FRP公网访问本地AI问答服务
家里部署了AI问答服务(比如Ollama上的本地大模型),但只能在局域网用,出门就访问不了。
用FRP做内网穿透,只需一台有公网IP的云服务器,就能把本地AI问答服务映射到公网,任何地方都能访问。
准备工作:需要什么
- 一台公网云服务器(Linux系统,如Ubuntu 20.04)。
- 一个域名(可选,但建议配置,避免记IP)。
- 本地运行AI问答服务的机器(Windows/Linux均可)。
- FRP软件包(GitHub Releases下载,服务端和客户端版本要一致)。
- 了解本地AI服务的端口(例如Ollama默认11434)。
公网服务器建议最低2核2G,带宽根据并发选择。
本地机器无需固定公网IP。
服务端配置:公网服务器上操作
登录云服务器,下载FRP并解压(以v0.58.0为例):
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
tar -xzf frp_0.58.0_linux_amd64.tar.gz
cd frp_0.58.0_linux_amd64
编辑服务端配置文件 frps.toml:
bindPort = 7000 # FRP控制端口
vhostHTTPPort = 8080 # HTTP访问端口(后续通过这个端口访问AI服务)
auth.method = "token"
auth.token = "your-secure-token-123" # 修改为强密码
启动服务端:
./frps -c frps.toml &
检查是否运行:ps aux | grep frps。
如果服务器有防火墙,记得放行7000和8080端口。
宝塔面板在安全中添加规则。
客户端配置:本地机器上操作
在本地机器上解压FRP客户端(Windows选windows_amd64版)。
编辑 frpc.toml:
serverAddr = "你的公网服务器IP"
serverPort = 7000
auth.method = "token"
auth.token = "your-secure-token-123" # 与服务端一致
[[proxies]]
name = "ai-ollama"
type = "tcp"
localIP = "127.0.0.1"
localPort = 11434 # 本地AI服务端口
remotePort = 11434 # 公网映射端口(也可自定义)
如果AI服务是HTTP API(如Ollama),也可以用HTTP类型做域名转发,但TCP更通用。
启动客户端:
./frpc -c frpc.toml &
Windows下用命令行窗口运行,不要关闭。
避坑指南:常见问题与解决
- 服务端启动报错端口占用:先用
lsof -i:7000检查是否被占用,或修改bindPort。 - 客户端连接不上:检查服务端IP、token是否一致,云服务器安全组/防火墙是否放行7000和8080端口。
- 公网访问超时:确认本地AI服务在127.0.0.1:11434能正常访问。可以本地
curl http://127.0.0.1:11434测试。 - Windows客户端运行后闪退:使用cmd窗口运行,不直接双击exe。
- 域名解析问题:如果用了域名,需A记录指向公网服务器IP,并在FRP服务端配置
subdomainHost或结合Nginx反向代理。
验证方法:外网访问AI问答服务
在外网电脑或手机上,访问 http://公网服务器IP:11434(或自定义的remotePort)。
对于Ollama服务,可以执行API请求:
curl http://公网服务器IP:11434/api/generate -d '{"model": "llama3", "prompt": "Hello"}'
正常返回JSON数据即成功。
也可以通过Web UI(如Open WebUI)连接这个地址使用。
如果配置了HTTP类型和域名,则访问 http://你的域名:8080 即可。
总结
FRP内网穿透是让本地AI问答服务上公网最灵活的方式之一。
按以上步骤配置好服务端和客户端,就能轻松实现外网访问。
遇到问题优先检查防火墙、端口映射和token一致性。
后续还可以通过HTTPS、Nginx反向代理升级安全性。