你在服务器或台式机上跑好了模型,本机命令行一切正常,但同一局域网里的笔记本、手机、同事的电脑怎么都连不上,报连接被拒绝。多数情况不是防火墙的锅,而是 Ollama 默认只绑在本机回环地址上,压根没对外开端口。这篇把默认监听为什么这样设计、改哪几个环境变量、改完怎么逐层验证、以及开放后要注意什么,按顺序讲一遍。
你在服务器或台式机上把模型跑起来了,本机命令行怎么问都答得挺顺,可是同一局域网里的笔记本、手机、同事那台机器一连接就被拒。这种情况十有八九不是防火墙的问题,而是 Ollama 默认只把端口绑在本机回环地址上,对外压根没开。这篇就按「先搞懂为什么、再动手改、改完怎么验、开完怎么收」的顺序讲一遍。
需要说明的是,这篇讲的是内网场景下的访问放开,不是让你把它丢到公网上。判断标准很简单:如果只有本机能连、同一网段的其他设备连不上,那基本就是监听地址的问题;如果连本机的另一个网卡地址都连不上,先别急着改配置,按后面第三节的顺序逐层排。
为什么默认只能本机访问
回环地址是操作系统给进程留的一条内部通道,数据包不经过物理网卡,所以别的机器从网络上根本看不到它。这是刻意设计的安全默认值,不是装坏了,也不是模型没加载成功。Ollama 这种本地推理服务大多没有账号体系,谁连上谁就能白用你的显卡和内存,所以默认不开外网口是合理的。
- 本机 curl 通、别的机器不通 → 先怀疑监听地址,不是模型本身
- 本机 curl 也不通 → 先看进程有没有起来、端口有没有被占
- 另一台机器能 ping 通 IP 但连不上端口 → 大概率是监听地址或防火墙,不是网络断
- 容器里跑的服务,宿主机本机通、外部不通 → 优先查端口映射,而不是改 Ollama 配置
把监听放到 0.0.0.0:改哪个变量、怎么重启
这里最容易踩的坑,是把「服务监听哪个地址」和「客户端去连哪个地址」这两个变量搞混。前者决定服务对外开在哪儿,后者只影响命令行工具默认连谁。很多人改了客户端变量,服务端其实一点没变,当然没用。改之前先把这两个概念分清。
- 服务端监听变量
- 决定 Ollama 服务绑在哪个地址上,改成通配地址才会对局域网开放
- 客户端目标变量
- 只告诉命令行工具去连哪个地址,不改服务端的话纯属自娱自乐
- 生效时机
- 环境变量要在进程启动前就设好,改完必须重启进程,热改无效
- 临时前台启动验证思路前台直接带环境变量启动服务,观察启动日志里监听的地址和端口。这只用于验证配置方向对不对,不适合长期跑。
- 常驻服务改法把服务交给系统的服务管理器时,环境变量要写进对应的服务配置或启动项里,而不是写在你的登录 shell 里。写完重载配置并重启服务。
- 重启后先本机自查在本机查看监听状态,确认端口绑在通配地址上,而不是仍然只在回环地址。这一步不过,后面的测试都白做。
- 换一台机器再试从同网段的另一台设备发起请求,成功才说明开放生效。失败就去下一节按层排查。
| 现象 | 大概率原因 | 先查什么 |
|---|---|---|
| 本机通,别的设备连接被拒 | 服务只监听回环地址 | 本机监听状态里的绑定地址 |
| 本机也不通 | 进程没起来或端口被占 | 进程状态与端口占用 |
| 端口能连但请求报错 | 客户端目标地址写错或路径不对 | 客户端请求的完整地址 |
| 容器内通、宿主机外不通 | 端口映射没做 | 容器的端口映射配置 |
连不上的排查顺序(从近到远)
别一上来就怀疑路由器或交换机。按「本机 → 同网段另一台 → 跨网段或容器」这个顺序试,能把问题快速压缩到某一层。每层都用一个最简单的请求去测,不要用复杂的业务调用,避免把配置问题和业务问题搅在一起。
# 第一层:本机自测
curl http://127.0.0.1:端口/
# 第二层:用本机在局域网的那个 IP 自测
curl http://本机局域网IP:端口/
# 第三层:从同网段另一台机器测
curl http://服务机局域网IP:端口/- 第一层不通:服务没起来、端口不对,和网络无关
- 第二层不通:监听地址没放开,回到上一节改配置
- 第三层不通:查两端防火墙、网段划分、是否同一 VLAN
- 容器场景再加一层:容器内通、宿主机不通,查端口映射;宿主机通、外部不通,查宿主机防火墙
对外开放之后要顺手做的事
端口一旦对内网开放,任何能连到这个网段的设备都能调用你的模型,包括不该用的设备。所以开放只是第一步,顺手做几件收窄的事,成本很低但省心很多。
- 能只限定单个网段就别写通配地址,范围越小越好
- 别把端口直接映射到公网,只在内网放行
- 能在前面加一层反向代理和鉴权就加,多一道门槛
- 记录改过哪些配置、改在哪台机器上,换设备或升级时能照着复现
- 定期看一眼谁在连,发现陌生地址就去站内工具页做一次连通与安全自查
什么时候不适用这套做法?如果你的机器本身就在公网可达的环境里,或者多人共用一台机器且没有隔离,那就不该用「开放监听」这种简单办法,应该走反代加鉴权,或者干脆只让服务在本机跑、由上层应用去转发请求。
下一步改完配置、验证通过之后,建议顺手对着站内的接口与模型资料页核一下你实际调用的路径和参数,避免监听开了但请求打得不对;另外也可以到工具目录里挑一个连通性自测的小工具,把内网访问这件事固化成一条可复用的检查项。→常见问题
改了绑定地址还是连不上怎么办?
先确认进程真的重启过,旧进程没退出的话配置不生效;再在本机看端口到底绑在哪个地址上。本机通、别的机器不通,多半是系统防火墙没放行该端口。容器场景还要检查端口映射方向是不是写反了。
局域网开放后别人能看到我的对话内容吗?
服务本身没有账号体系,同网段内谁知道地址和端口谁就能调,请求内容不经过你确认。所以只在信任的内网放行,能用网段限定就别用通配地址,有条件的在前面加一层带鉴权的代理。
为什么本机测试能通,容器里调不通?
容器有自己的网络命名空间,容器里的本机地址指的是容器自己,不是宿主机。要么用宿主机的可达地址,要么把两边放到同一网络里。先分清请求是从容器发出还是从宿主机发出,问题就清楚了一半。