Quartus 连接被拒:Connection refused 速查
更新时间:2026-10-25。FAQ 速查页,属于 FPGA 工具排错系列。Quartus 报 Connection refused 有三个完全不同的现场:连 JTAG 硬件服务器下载比特流时被拒、连 license server 取授权时被拒、连远程编译主机时被拒。三个现场共用一个报错文案,但根因和修法各走一条路,先认现场再动手。license 授权本身的失败(连得上但取不到)见 Quartus license checkout 失败,同族问题在开源工具链侧见 nextpnr 连接被拒。
本文要回答的问题
- 三个 Connection refused 现场怎么从报错里区分?
- 「连接被拒」和「连接超时」为什么是两个方向?
- license server 的端口怎么查、怎么确认它在听?
- 防火墙怎么验证是不是它拦的?
- 容器/虚拟机里跑 Quartus,连接问题有什么特殊性?
一、报错原文与现象
Error (213031): Can't connect to JTAG server -- connection refused.
Check that the jtagd server is running on the remote host.Can't connect to license server system (-15,570)
The license server manager (lmgrd) has not been started yet第一段是 Programmer 连 JTAG 服务的现场;第二段是启动 Quartus 或编译时连 license server 的现场(FlexNet 的 -15 错误码是「连不上服务端」的标志性输出)。远程编译主机场景的报错措辞类似、目标换成编译节点的地址与端口。
二、可能原因总览
| 现场 | 可能原因 | 处置 |
|---|---|---|
| JTAG 连接被拒 | 远端 jtagd 进程没在跑 | 远端启动 jtagd 并确认监听 |
| JTAG 连接被拒 | 主机名/端口写错 | 核对 Programmer 里的 server 配置 |
| license -15 | lmgrd 未启动 | license 机上启动 lmgrd |
| license -15 | 端口被防火墙拦 | 放行 lmgrd 与 vendor daemon 两端口 |
| license -15 | 客户端 LM_LICENSE_FILE 指向错 | 核对端口与主机名拼写 |
| 远程编译被拒 | 编译主机服务未起或 ssh 隧道断 | 重连隧道,查远端服务 |
| 全部连接被拒 | 容器内服务只绑了容器网卡 | 绑定地址改为对外可见接口 |
| 时好时坏 | 服务进程崩溃后未拉起 | 加守护,查崩溃日志 |
三、逐条排查展开
「拒绝」和「超时」是两个方向,先分清。 Connection refused 的含义很具体:你的包到了目标主机,目标主机告诉你「这个端口没人听」。这排除了网络不通(那是超时),把问题锁定在两端——要么服务没起/没监听,要么你连错了主机或端口。防火墙在这个语义里有个细节:配置为 DROP 的防火墙表现为超时,配置为 REJECT 才表现为拒绝,所以 refused 一般指向服务本身而非防火墙,但不能完全排除。
第一问永远是「端口有人在听吗」。 到目标主机上(本机或经 SSH)看监听状态:
ss -ltnp | grep <端口号>有输出、且绑定在对外可达的地址上(不是只绑回环)才算真的在服务;没输出就是服务没起——JTAG 场景去启动 jtagd,license 场景去启动 lmgrd。绑定只挂回环地址是容器和最小化系统里的高频坑:服务在跑、本机连得上、外面全被拒,处置是把监听地址改成对外接口。
license server 有两个端口,只放一个不够。 FlexNet 授权体系里 lmgrd 自己听一个端口(license 文件 SERVER 行指定),厂商守护进程(alterad 等)另听一个端口。客户端连接流程是先敲 lmgrd 的门、再被转介到 vendor daemon——防火墙只放行 lmgrd 端口,就会出现「lmstat 能查、Quartus 却取不到授权」的半通状态。两个端口都要确认监听、都要放行。客户端侧的指向也要核对:
echo $LM_LICENSE_FILE # 形如 端口@主机名
lmstat -a -c $LM_LICENSE_FILE # 能返回授权清单即链路通主机名这里有个老坑:客户端机器解析不了 license 文件里写的主机名(内网 DNS 缺失),表现也是连接失败。处置是在客户端 hosts 里补一条解析,或统一改用规范主机名。
JTAG 服务器场景按链路分段验证。 链路是「Quartus Programmer → 网络 → 远端 jtagd → USB 下载线」。先在被连的机器上确认 jtagd 在跑且 jtagconfig 能列出本地电缆,再确认它的远程服务端口在监听;然后从 Quartus 所在机器用端口连通性工具探测那个端口。本机 cable 正常、远端 refused,问题在 jtagd 的远程访问配置或中间网络;远端能连但看不到电缆,问题在 jtagd 到 USB 这一段,与本篇的连接问题无关了。jtagd 的远程访问需要在服务器侧显式开启(jtagconfig --enableremote 相关配置并设访问口令),只启动进程、不开远程开关,外部连接一律被拒——这是新机部署最常漏的一步。另外注意 USB 下载线插在服务器上需要对应驱动与 udev 规则就位,否则 jtagd 起了也枚举不到电缆,排查顺序是先 jtagconfig 列本地电缆、再谈远程。
容器与虚拟机多一层 NAT。 在 Docker/WSL/虚拟机里跑 Quartus 相关服务时,容器内监听的端口要显式映射到宿主机才能被外界连到;反过来,容器里的 Quartus 去连宿主机或局域网服务时,localhost 指的是容器自己——这两个方向的错位都表现为 Connection refused。处置:画清楚「服务在哪个网络命名空间里监听、客户端在哪个命名空间里发起」,对不上的加端口映射或改用主机网络模式。
端口连通性探测有个顺手动作法。 在客户端侧用 timeout 5 bash -c 'cat < /dev/null > /dev/tcp/<host>/<port>' 这类 shell 内建写法(或 nc)探测目标端口:立即返回是通的,等满超时是链路被 DROP,立刻报拒绝是 REJECT 或服务未起。三种结果对应三种处置方向,比反复重启 Quartus 试错快得多。
连得上但取不到授权是另一个问题。 如果 lmstat 正常、端口全通,但 Quartus 报授权相关的其它错误码,那就不是连接问题,转到 Quartus license checkout 失败 继续查。
四、排查流程图
这张图按「先认现场、再查监听、后查链路」的顺序组织。红色是故障入口与根因类节点,蓝色是排查动作,绿色是链路确认,橙色是修复动作,紫色是防复发沉淀。
读这张图注意分叉点:「查监听」没输出走左边修服务,有输出走右边修链路——拒绝类故障里这两条路各占一半,跳步直接改防火墙配置是常见误操作。
五、预防与纪律
- 服务进守护:jtagd 与 lmgrd 都由进程守护拉起,崩溃自动重启,不靠人发现。
- 端口清单文档化:lmgrd 端口、vendor daemon 端口、jtagd 端口写成一页表,防火墙申请照表开。
- license 文件主机名用规范名:全公司统一可解析的主机名,新人机器不再补 hosts。
- 容器方案先画网络图:服务监听命名空间与客户端发起命名空间标清楚,端口映射一并入档。
- 连不上先 ss 后防火墙:把「先确认监听、再怀疑链路」写进排障口诀,避免对着空端口调防火墙。
这一篇在知识体系里的位置
本篇是 FPGA 排错簇中「网络连接」节点的 FAQ 页:与 Quartus license checkout 失败(连得上但取不到授权)、nextpnr 连接被拒(开源工具链同型)、Formality 连接被拒(ASIC 侧同型)互补;Quartus 上手路径见 Quartus 快速上手,系列总览见 FPGA 知识版图。
一句话总结
Quartus 报 Connection refused 先认现场(JTAG 服务器 / license server / 远程编译主机),再到目标机用 ss -ltnp 确认端口有没有人在听、绑定的地址对外可不可达;license 场景记住 lmgrd 与 vendor daemon 两个端口都要通、客户端主机名要解析得了,容器场景先画清网络命名空间;修好后把服务挂进守护、端口清单写进文档,让连接被拒从突发故障变成可一眼对照的例行检查。