企业想把大模型用起来,数据安全是第一道坎。把模型部署在内网没问题,但同事和外部应用要调用时,要么拉 VPN 体验差,要么买公网服务器成本高,直接暴露端口更是不敢想。我最近帮团队落地了一套 Ollama + OpenWebUI + ZeroNews 的组合方案,四步就能把内网大模型安全映射到公网,还能叠加 IP 白名单和地址围栏做加固。本文从 Docker 部署到隧道配置再到安全策略,完整记录整个落地过程。
第一步,本机部署 Ollama
安装 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 的方式安装
拉模型并交互测试
进入到 ollama 容器中
docker exec -it ollama bash
选一个在显存/内存里跑得动的模型,例如 7qwen3.5:9b :
ollama pull qwen3:4b
ollama run qwen3:4b # 交互测试,Ctrl+D 退出

ollama list 能看到本地已有模型。
生产环境更推荐交给 systemd / 系统服务常驻,不要只靠一个前台终端窗口。
确认 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 所在主机执行。
安装 Client
按 ZeroNews 文档 · 安装客户端 选择对应系统的一键脚本或安装包。Linux 示例:
curl -fsSL https://download.zeronews.cc/install.sh | bash
装完后终端里应有 zeronews 命令。
绑定 AuthToken
-
登录 ZeroNews 控制台 → 快速开始 ,复制 AuthToken。
-
在 Ollama 所在机器执行:
zeronews authtoken {TOKEN}
绑定成功后,控制台 客户端 页面应出现一台在线设备(主机名与当前机器一致)。
ZeroNews client 以系统服务常驻后台
以后台服务运行 ZeroNews client
zeronews service install
zeronews service start
zeronews service status
开发机临时联调可以用 zeronews start 前台跑,关终端前记得 Ctrl+C 或 zeronews service stop。
确认 Client 在线
在命令行提示 Session Connect 就说明客户端已经连接成功

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

第四步,根据应用场景建立 公网访问隧道
给公司员工办公使用,我可以采用 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 了

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

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

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

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

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

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

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

收尾
这套方案的核心价值不在于技术有多新,而在于【够用且安全】------Ollama 负责模型运行、OpenWebUI 负责交互体验、ZeroNews 负责安全穿透,三者各司其职,组合起来刚好解决了企业内网大模型对外访问的痛点。数据不出内网、访问有白名单管控、异常有健康检查告警,用起来心里踏实。如果你也在为类似场景发愁,建议照着步骤走一遍,部署过程中有任何问题欢迎评论区交流,后续我也会继续分享 RAG 对接和多模型管理的进阶玩法。