通过云服务器 + frp 使用远程 Windows 局域网的 Ollama 服务

概述

Ollama 是一个优秀的本地大模型运行工具,通常部署在内网 Windows 机器上。但有时我们需要在公网访问这些模型(例如出差时使用、分享给团队成员),而内网没有公网 IP 或无法直接端口映射。本文介绍如何使用一台有公网 IP 的云服务器作为跳板,通过 frp(Fast Reverse Proxy)将内网 Windows 上的 Ollama 服务安全地暴露到公网,实现远程访问。

整体架构

下图展示了公网用户通过云服务器访问内网 Windows Ollama 的流程:
注:以下公网环境的端口建议替换为非规则端口。

请求云服务器IP:11434

通过frp隧道
转发请求

内网Windows - frp客户端

转发到本地

frpc 连接服务端
server_addr, server_port, token

本地代理规则
local_port 11434

Ollama 服务
监听 0.0.0.0:11434

公网云服务器 - frp服务端

frps 监听端口
例如 7000

端口映射
将公网请求的 11434 端口
转发给内网客户端

外部用户/设备

核心思想:内网 Windows 主动连接云服务器上的 frp 服务端(frps),建立一条反向隧道;云服务器上的特定端口(如 11434)收到的请求会自动转发给内网 Windows 的 Ollama 端口。

准备工作

  • 一台具有公网 IP 的云服务器(Linux 系统,如 Ubuntu/CentOS),用于运行 frp 服务端。
  • 一台内网 Windows 机器(已安装 Ollama 并下载了需要的模型)。
  • frp 软件包:从 frp GitHub Releases 下载对应操作系统的版本(Linux 版用于服务器,Windows 版用于客户端)。
  • 确保云服务器的防火墙/安全组开放相应端口(见下文)。

第一步:配置 Windows 内网的 Ollama 监听外部请求

Ollama 默认只监听 127.0.0.1,需要修改环境变量使其监听所有网络接口,并允许跨域访问。

1. 设置环境变量

在 Windows 上,通过系统属性 → 环境变量(或使用命令提示符)添加以下两个系统变量:

变量名 变量值 说明
OLLAMA_HOST 0.0.0.0:11434 让 Ollama 监听所有网络接口的 11434 端口
OLLAMA_ORIGINS * 允许任意来源的跨域请求(如果通过 WebUI 访问则必须)

通过命令行快速设置(管理员权限):

setx OLLAMA_HOST "0.0.0.0:11434"
setx OLLAMA_ORIGINS "*"

其他:
修改 OLLAMA 模型存储位置:
1、终端启动方式:设置环境变量 OLLAMA_MODELS
2、ollama 客户端方式: setting
在这里插入图片描述

2. 重启 Ollama 服务

修改环境变量后,需要重启 Ollama 才能生效。可以通过任务管理器结束 Ollama 进程,然后重新启动(或在终端中再次运行 ollama serve)。

3. 验证本地访问

在 Windows 本机打开浏览器访问 http://127.0.0.1:11434,如果看到 Ollama is running 的提示,说明 Ollama 已正常启动。


4. 验证监听接口

在 Windows 上执行:

netstat -ano | findstr :11434

输出:

TCP    0.0.0.0:11434          0.0.0.0:0              LISTENING       17912
TCP    [::]:11434             [::]:0                 LISTENING       17912

说明 Ollama 已正确监听 0.0.0.0:11434。

第二步:在云服务器(Linux)上配置 frp 服务端

1. 下载并解压 frp

登录云服务器,执行以下命令(以 v0.61.2 为例,请替换为最新版本号):

wget https://github.com/fatedier/frp/releases/download/v0.61.2/frp_0.61.2_linux_amd64.tar.gz
tar -zxvf frp_0.61.2_linux_amd64.tar.gz
cd frp_0.61.2_linux_amd64

2. 编辑服务端配置文件 frps.toml

创建(或编辑)frps.toml,内容如下:

 # frp 客户端连接的端口;修改为自定义端口
bindPort = 7000               
auth.method = "token"
# 请修改为一个复杂的密码
auth.token = "your-strong-token"   

# 开启日志
log.to = "./log/frps.log"
log.level = "info"

# 可选:开启仪表盘,用于监控 frp 状态
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"        # 仪表盘登录用户名
webServer.password = "admin"    # 仪表盘登录密码

注意auth.token 是客户端连接服务端的凭证,务必设置为强密码。

3. 启动服务端

先在前台运行测试:

./frps -c frps.toml

如果日志显示 start frps success,说明服务端启动正常。按 Ctrl+C 停止后,使用 nohup 后台运行:

nohup ./frps -c frps.toml &

也可以配置为 systemd 服务实现开机自启,此处从略。

4. 开放云服务器防火墙/安全组

需要在云服务商的控制台(如阿里云、腾讯云)的安全组规则中,入方向开放以下端口:

  • 7000:供 frp 客户端连接。
  • 11434(或你在 remotePort 中设置的其他端口):供公网用户访问 Ollama。
  • 7500(可选):如果开启了仪表盘,用于访问 Web 管理界面。

同时,如果云服务器内部防火墙(如 firewalld/iptables)开启,也需要放行这些端口。


第三步:在 Windows 内网配置 frp 客户端

1. 下载 Windows 版 frp

从相同 GitHub 地址下载 Windows 版本(如 frp_0.61.2_windows_amd64.zip),解压到指定的 frp 目录。

2. 编辑客户端配置文件 frpc.toml

C:\frp 下创建 frpc.toml,填入以下内容:

serverAddr = "你的云服务器公网IP"   # 替换为实际 IP
serverPort = 7000
auth.method = "token"
auth.token = "your-strong-token"   # 必须与服务器端的 token 一致

[[proxies]]
# frp 唯一名称 name 不能冲突,否则服务会被覆盖
name = "ollama"
type = "tcp"
localIP = "127.0.0.1"
# Windows 本地 Ollama 端口
localPort = 11434      
 # 云服务器上对外开放的端口           
remotePort = 11434                

说明remotePort 可以与 localPort 相同,也可以不同。如果不同,公网访问时使用 remotePort

3. 启动客户端

打开命令提示符(管理员),切换到 frp 目录,执行:

frpc.exe -c frpc.toml

若看到类似 login to server successstart proxy success 的日志,说明客户端已成功连接到云服务器,并且代理已建立。

4. 设置开机自启(可选)

可将上述命令添加到 Windows 任务计划程序或创建快捷方式到启动文件夹,确保每次开机自动连接。


第四步:验证与测试

1. 验证隧道连通性

在任意能上网的设备上(不要在内网),打开浏览器访问:

http://你的云服务器公网IP:11434

如果看到 Ollama is running 的文本响应,说明穿透成功,Ollama API 已可通过公网访问。

2. 测试 API 调用

使用 curl 命令测试模型调用(假设已有模型 llama2):

curl http://你的云服务器公网IP:11434/api/generate -d '{
  "model": "llama2",
  "prompt": "Hello, who are you?"
}'

应该能正常收到模型生成的响应。


安全加固(非常重要)

将 Ollama 直接暴露在公网存在安全风险(任何人可调用你的模型,消耗资源甚至滥用)。建议至少采取以下措施之一:

1. 使用带身份验证的前端(如 Open WebUI)

  • 在内网部署 Open WebUI(或其他支持登录的 WebUI),并通过 frp 仅暴露 WebUI 的端口。
  • Open WebUI 本身带有用户认证,可有效防止未授权访问。

2. 使用 Nginx 反向代理 + 基础认证

在云服务器上安装 Nginx,配置反向代理到 http://127.0.0.1:11434,并添加 Basic Authentication:

server {
    listen 11434;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;

        # 基础认证
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

使用 htpasswd 工具创建密码文件。

3. frp 的 Stcp 模式(更安全但配置稍复杂)

frp 支持 stcp(秘密 TCP)模式,需要客户端和服务端都配置密钥,仅允许持有密钥的客户端访问,适合点对点场景。

4. IP 白名单

如果只有固定 IP 需要访问,可以在云服务器防火墙或 frp 配置中限制来源 IP。


常见问题

Q1:客户端连接失败,提示 login to server failed

  • 检查云服务器防火墙/安全组是否开放了 7000 端口。
  • 检查 serverAddrtoken 是否正确。
  • 在云服务器上使用 netstat -tulnp | grep 7000 确认 frps 是否在监听。

Q2:公网访问 11434 超时或连接拒绝

  • 确认云服务器安全组开放了 remotePort(如 11434)。
  • 检查 frpc 日志是否有 proxy started 的提示。
  • 在 Windows 本地尝试 telnet 127.0.0.1 11434 确认 Ollama 是否正常监听。

Q3:访问时返回 403 或跨域错误

  • 检查 Ollama 环境变量 OLLAMA_ORIGINS 是否设置为 *,并已重启。
  • 如果是通过 WebUI 访问,可能需要配置 WebUI 的跨域设置。

总结

通过 frp 将内网 Ollama 服务穿透到公网,只需要简单的几步配置即可实现远程访问。核心要点是:

  1. 修改 Ollama 环境变量,允许外部访问。
  2. 在云服务器上部署 frps,开放必要的端口。
  3. 在 Windows 上部署 frpc,将本地端口映射到云服务器。
  4. 务必加强安全防护,避免服务被滥用。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐