Ollama 内网部署 + ZeroNews 穿透实现大模型公网访问实战教程
一直在找一个能让内网大模型安全对外的方案,试了 VPN 和公网转发都不太理想,直到用 Ollama + OpenWebUI + ZeroNews 这套组合跑通了整个流程。从 Docker 部署 Ollama、拉取 qwen3 模型,到配置 OpenWebUI 界面,再用 ZeroNews 建 HTTPS 隧道映射到公网,最后叠上 IP 白名单和地址围栏做安全加固,四步搞定。本文把完整部署过程和实测中踩的坑都记录下来,给有同样需求的团队做个参考。
一、本机部署 Ollama
1.1 安装 Ollama
按 Ollama 指引安装,常见环境如下。
在线安装方式:
macOS / Windows: 下载安装包,一路下一步。装完菜单栏或系统托盘里会有 Ollama 图标,服务默认已在后台跑。
Linux:
curl -fsSL https://ollama.com/install.sh | sh
装完后一般会自动注册 systemd 服务:
sudo systemctl enable ollama
sudo systemctl start ollama
sudo systemctl status ollama
docker 安装方式
用 docker 安装,不侵入主机环境,做为调试/测试环境安装方式
services:
ollama:
image: ollama/ollama
container_name: ollama
restart: unless-stopped
user: "root"
ports:
- 11434:11434
volumes:
- ./ollama:/root/ollama
我们测试部署,就以 docker 的方式安装
1.2 拉模型并交互测试
进入到 ollama 容器中
docker exec -it ollama bash
选一个在显存/内存里跑得动的模型,例如 7qwen3.5:9b :
ollama pull qwen3:4b
ollama run qwen3:4b # 交互测试,Ctrl+D 退出

ollama list 能看到本地已有模型。
生产环境更推荐交给 systemd / 系统服务常驻,不要只靠一个前台终端窗口。
1.3 确认 API 正常
curl -s http://127.0.0.1:11434/api/tags
返回 JSON 模型列表,说明 HTTP API 已就绪。
本地对话接口自测:
curl -s http://127.0.0.1:11434/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.5:9b ",
"messages": [{"role": "user", "content": "你好,回复两个字:收到"}]
}'
能收到模型回复,就可以进入下一步。

二、Ollama 常用 API
Ollama 默认监听:
http://127.0.0.1:11434
常用接口(兼容 OpenAI 风格):
# 列出本地模型
curl http://127.0.0.1:11434/api/tags
# OpenAI 兼容对话
curl http://127.0.0.1:11434/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen2.5:7b",
"messages": [{"role": "user", "content": "你好"}]
}'
# 向量嵌入(RAG 场景常用)
curl http://127.0.0.1:11434/v1/embeddings \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen2.5:7b",
"input": "一段需要向量化的文本"
}'
vLLM、llama.cpp server 等也多是 HTTP API,只是端口不同(如 8000、8080)。本文以 Ollama 11434 为例,换端口即可套用。
注意Ollama 默认没有 API Key 鉴权。谁连上端口,谁就能调模型、拉模型列表。映射到公网时必须在 ZeroNews 层做 IP 白名单、Basic 认证、路由白名单等——不能只靠穿透把端口裸放出去。
三、安装 ZeroNews Client
Client 必须和 Ollama 跑在同一台机器上(或至少能访问 127.0.0.1:11434 的同网段机器)。以下步骤都在 Ollama 所在主机执行。
3.1 安装 Client
按 ZeroNews 文档 · 安装客户端 选择对应系统的一键脚本或安装包。Linux 示例:
curl -fsSL https://download.zeronews.cc/install.sh | bash
装完后终端里应有 zeronews 命令。
3.2 绑定 AuthToken
- 登录 ZeroNews 控制台 → 快速开始,复制 AuthToken。
- 在 Ollama 所在机器执行:
zeronews authtoken {TOKEN}
绑定成功后,控制台 客户端 页面应出现一台在线设备(主机名与当前机器一致)。
3.3 ZeroNews client 以系统服务常驻后台
以后台服务运行 ZeroNews client
zeronews service install
zeronews service start
zeronews service status
开发机临时联调可以用 zeronews start 前台跑,关终端前记得 Ctrl+C 或 zeronews service stop。
3.4 确认 Client 在线
在命令行提示 Session Connect 就说明客户端已经连接成功

在用户控制台中可以看到已经在线的客户端

四、根据应用场景建立 公网访问隧道
4.1 给公司员工办公使用,我可以采用 openwebui+ollama的方式直接提供 AI 服务
给公司员工办公使用,建议采用企业的自有域名来创建隧道,同时搭建部署 openwebui+ollama,来说实现 可视化的 AI 交互
我们采用 docker 方式部署 openwebui
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- 8002:8080
volumes:
- ./data:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://192.168.31.149:11434
OLLAMA_BASE_URL 为 Ollama 容器的内网IP访问URL地址,openwebui 启动完成,同内网IP地址就可以正常访问了


接下来在 ZeroNews 控制台上,添加 企业自有域名,并通过 ZeroNews 自动申请证书

自有域名添加完后, 就可以添加隧道,添加完成后,就可以在互联网上正常 OpenwebUI 了

考虑员工的访问范围,设计到外出出差,我们加一个 地址围栏 的访问策略,拒绝海外的用户访问

4.2 直接提供 Ollama API 服务 给第三方服务
当我们是以算力资源提供给第三方时,我们直接提供 ollama 的 API 接口给第三方
同样采用自有域名,添加一个二级域名, ZeroNews 自动申请证书

然后添加 Ollama 的 API 隧道,添加完成后, Ollama API 已经给公网调用

因为是给第三方调用,我们给隧道添加IP访问白名单的控制策略,要求用户添加固定的公网IP,只允许白名单内IP的方可以调用 API

同时,在添加 路由白名单,添加给用户提供的 API 路由地址, 将 ollama 暴露面限制到特定的 API 接口

因为 Ollama API 不提供 api key,所以我们再给 API 添加一个 BasicAuth 认证

从多个维度保障 Ollama 的访问安全
4.3 内部系统跟 ollam 之间的联调测试
对于 联调测试,我们主要随用随键,用完即删的一个使用策略,生命周期短,快速应用,用zeronews 的域名即可
直接添加随机域名隧道, zeronews 会自动分配随机访问地址

收尾
整套方案落地后用了一段时间,最满意的地方是【】轻量且安全】—— 三个工具各司其职,Ollama 管模型、OpenWebUI 管界面、ZeroNews 管穿透和防护,没有多余的架构负担。数据始终留在内网,公网访问有白名单和地址围栏兜底,异常还有健康检查告警,企业用着放心。
更多推荐

所有评论(0)