Ollama远程访问FRP内网穿透完整配置教程
适用场景与准备工作
如果你本地跑着 Ollama,却想在公司、手机或另一台服务器上调用它,FRP 内网穿透是成本最低的方案之一。
本文基于 frp v0.60.0 和 Ollama 0.5.x 测试通过,步骤同样适用于其他版本。
你需要提前准备:
- 一台有公网 IP 的服务器(称为服务端),OS 建议 Ubuntu 22.04 / CentOS 7+。
- 一台运行 Ollama 的内网机器(称为客户端),可以是你的个人电脑或本地服务器。
- 两者都能正常访问网络,且防火墙放行对应端口。
第一步:服务端(公网机器)部署 FRP
登录公网服务器,下载 FRP 并解压:
wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
tar -xzf frp_0.60.0_linux_amd64.tar.gz
cd frp_0.60.0_linux_amd64
编辑服务端配置文件 frps.toml(新版 FRP 使用 toml 格式):
bindPort = 7000
# 下面两行用于 web 管理后台,按需启用,本例不强制
# webServer.addr = "0.0.0.0"
# webServer.port = 7500
# webServer.user = "admin"
# webServer.password = "your_password"
启动服务端:
./frps -c frps.toml &
确认监听端口 7000 已启动:
ss -tlnp | grep 7000
如果系统开启了防火墙,记得放行 7000 端口,以及后续代理用的端口(本例使用 11434)。
第二步:客户端(Ollama 所在机器)安装 FRP 并配置代理
同样下载 FRP 客户端(frpc),解压后编辑 frpc.toml:
serverAddr = "你的公网服务器IP"
serverPort = 7000
[[proxies]]
name = "ollama-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 11434
remotePort = 11434
启动客户端:
./frpc -c frpc.toml &
如果客户端和服务端在同一台机器测试,serverAddr 填 127.0.0.1 即可。
启动后看到 start proxy success 说明连接正常。
第三步:让 Ollama 监听所有网络接口(关键!)
默认 Ollama 只绑定 127.0.0.1,本地代理无法穿透。
需要修改环境变量或直接重启:
# 停止 Ollama 服务(systemd 方式)
sudo systemctl stop ollama
# 设置监听地址
export OLLAMA_HOST=0.0.0.0
# 前台启动(测试用)
ollama serve &
如果是 systemd 服务,编辑 /etc/systemd/system/ollama.service,在 [Service] 下添加:
Environment="OLLAMA_HOST=0.0.0.0"
然后重载并启动:
sudo systemctl daemon-reload
sudo systemctl start ollama
验证本机是否可从 127.0.0.1:11434 访问:
curl http://127.0.0.1:11434/api/tags
若返回 JSON 列表,说明 Ollama 工作正常。
避坑指南与安全建议
- 端口冲突:确保公网服务器的 11434 端口未被占用。如果已经被其他服务使用,修改
remotePort为其他值(例如 11435),同时客户端访问时也要调整端口。 - 防火墙放行:公网服务器需要放行
bindPort(7000)和代理端口(11434)。 - 不要暴露给所有人:建议在
frpc.toml中加上encryption = true和compression = true。更稳妥的做法是搭配 Nginx 反向代理添加 Basic Auth 或 IP 白名单。 - Token 隔离:Ollama 本身没有身份验证,暴露到公网后任何人都能调用你的模型。如果只是临时调试,结束后立即关闭。
效果验证
在外网其他机器(例如手机或另一台电脑)上执行:
curl http://你的公网IP:11434/api/tags
或者通过浏览器访问 http://你的公网IP:11434,应该看到 Ollama 的 API 响应。
如果返回 JSON 数据,说明 Ollama 远程访问成功。
你也可以用 ollama run 命令跨网络调用,例如:
OLLAMA_HOST=http://你的公网IP:11434 ollama run llama2
若报错 connection refused,请回退检查:服务端 frps 是否运行、客户端 frpc 是否连上、防火墙是否放行。
高频问题解答
Q:启动 frpc 后日志显示 login to server success,但 curl 无法连接?
A:检查服务端 remotePort 是否被防火墙拦截,或者客户端 localIP 是否填了 127.0.0.1 而 Ollama 监听的是 0.0.0.0(矛盾)。推荐客户端 localIP 与 Ollama 绑定地址保持一致。
Q:可以只用一个端口同时穿透多个 Ollama 模型吗?
A:Ollama API 本身是多模型共享端口 11434,无需多余配置。如果要穿透多个不同的服务,请在 frpc.toml 中增加多个 [[proxies]] 条目。
Q:每次重启后 frp 需要手动启动?
A:可以编写 systemd 服务自启,或者使用 nohup 结合 @reboot 定时任务。具体请参考 FRP 官方文档的 systemd 配置。
完成以上步骤后,你的 Ollama 已经可以通过公网 IP 远程调用了。
建议保留本文的避坑部分,下次换环境时对照操作可减少很多排查时间。