Ollama + OpenWebUI + ZeroNews 实战:企业内网大模型公网安全访问部署教程
最近帮公司落地了一套内网大模型方案,Ollama 跑模型、OpenWebUI 做界面,再用 内网穿透 把服务安全穿透到公网,外部应用和同事不用拉 VPN 就能直接调用。整套部署五步搞定,还叠加了 IP 白名单和地址围栏做安全加固。把完整流程和踩过的坑整理成这篇教程,供有类似需求的团队参考。
部署步骤:
- 本机部署 Ollama — 安装、拉模型。
- 安装 ZeroNews Client — 绑定控制台 Token,以系统服务常驻。
- 控制台建 HTTPS 隧道 — 内网指向 127.0.0.1:11434,分配或绑定公网域名。
- 配置访问控制 — IP 白名单、Basic 认证、路由白名单等,弥补 Ollama 无 API Key 的缺口。
- 外网验证 — 用 curl 或 OpenAI 兼容 SDK 确认公网地址与内网行为一致。
下面从环境准备开始, 开始部署。
动手之前确认这几件事:
- 一台能跑 Ollama 的机器(开发机或服务器都可以,需要出站连 ZeroNews 云端节点),能访问互联网。
- 已有 ZeroNews控制台账号。
- 本机有终端权限,能执行 curl、安装软件。
- 若走企业自有域名,需提前在 DNS 侧能添加 CNAME 记录(控制台会给出目标值)。

二、本机部署 Ollama
2.1 安装 Ollama
按 Ollama官网 指引安装,常见环境如下。
在线安装方式:
macOS / Windows: 下载安装包,一路下一步。装完菜单栏或系统托盘里会有 Ollama 图标,服务默认已在后台跑。
Linux:
curl -fsSL https://ollama.com/install.sh | sh
sudo systemctl enable ollama
sudo systemctl start ollama
sudo systemctl status ollama
用 docker 安装,不侵入主机环境,做为调试/测试环境安装方式
services:
ollama:
image: ollama/ollama
container_name: ollama
restart: unless-stopped
user: "root"
ports:
- 11434:11434
volumes:
- ./ollama:/root/ollama
我们测试部署,就以 docker 的方式安装
2.2 拉模型并交互测试
进入到 ollama 容器中
docker exec -it ollama bash
ollama pull qwen3:4b
ollama run qwen3:4b # 交互测试,Ctrl+D 退出

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

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

五、根据应用场景建立 公网访问隧道
5.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


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

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

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

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

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

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

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

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

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

整套方案跑下来最大的感受是:本地大模型 + 内网穿透的组合,确实能在数据不出内网的前提下解决公网访问的痛点。 HTTPS 隧道和安全策略叠加,让暴露公网这件事不再像裸奔那样让人提心吊胆。如果你也在为企业内网大模型的对外访问发愁,不妨照着这篇教程试一遍,有问题欢迎评论区交流。
更多推荐
所有评论(0)