最近帮公司落地了一套内网大模型方案,Ollama 跑模型、OpenWebUI 做界面,再用 内网穿透 把服务安全穿透到公网,外部应用和同事不用拉 VPN 就能直接调用。整套部署五步搞定,还叠加了 IP 白名单和地址围栏做安全加固。把完整流程和踩过的坑整理成这篇教程,供有类似需求的团队参考。

部署步骤:

  1. 本机部署 Ollama — 安装、拉模型。
  2. 安装 ZeroNews Client — 绑定控制台 Token,以系统服务常驻。
  3. 控制台建 HTTPS 隧道 — 内网指向 127.0.0.1:11434,分配或绑定公网域名。
  4. 配置访问控制 — IP 白名单、Basic 认证、路由白名单等,弥补 Ollama 无 API Key 的缺口。
  5. 外网验证 — 用 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
装完后一般会自动注册 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 的方式安装

2.2 拉模型并交互测试

进入到 ollama 容器中

docker exec -it ollama bash
选一个在显存/内存里跑得动的模型,例如 7qwen3.5:9b :
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
常用接口(兼容 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 所在主机执行。

4.1 安装 Client

ZeroNews文档安装客户端,选择对应系统的一键脚本或安装包。Linux 示例:

curl -fsSL https://download.zeronews.cc/install.sh | bash
装完后终端里应有 zeronews 命令。

4.2 绑定 AuthToken

  1. 登录 ZeroNews控制台 → 快速开始,复制 AuthToken。
  2. 在 Ollama 所在机器执行:
zeronews authtoken {TOKEN}

绑定成功后,控制台 客户端 页面应出现一台在线设备(主机名与当前机器一致)。

4.3 ZeroNews client 以系统服务常驻后台

以后台服务运行 ZeroNews client

zeronews service install
zeronews service start
zeronews service status
开发机临时联调可以用 zeronews start 前台跑,关终端前记得 Ctrl+C 或 zeronews service stop。

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
OLLAMA_BASE_URL 为 Ollama 容器的内网IP访问URL地址,openwebui 启动完成,同内网IP地址就可以正常访问了

接下来在 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 隧道和安全策略叠加,让暴露公网这件事不再像裸奔那样让人提心吊胆。如果你也在为企业内网大模型的对外访问发愁,不妨照着这篇教程试一遍,有问题欢迎评论区交流。

更多推荐