FlexNet的端口配置,说简单也简单,说复杂也复杂。简单在于它只用TCP,不用UDP;复杂在于如果你不手动指定,vendor daemon的端口是随机的。
这篇文章把端口需求和配置方法一次性说清楚。
FlexNet许可证服务器和客户端之间的通信,只需要两个TCP端口。不需要UDP。
这两个端口分别对应两个进程:
第一个端口:lmgrd(许可证管理守护进程)
lmgrd是FlexNet的“前台”。客户端软件启动时,先找到lmgrd,问它:“我要用一个许可证,找谁办?”
lmgrd的端口默认是27000。如果你不指定,lmgrd会在27000到27009之间选一个可用的。27000是默认值,也是绝大多数license文件里用的那个。
第二个端口:vendor daemon(供应商守护进程)
lmgrd收到客户端的请求后,会把请求转给vendor daemon——这才是真正干活的那个进程。它负责检查许可证池里有没有空闲的、该用户有没有权限、该feature是否可用,然后决定签出还是拒绝。
vendor daemon的端口是动态分配的。每次vendor daemon启动时,操作系统会从临时端口范围(通常是32768到61000)里随机挑一个给它用。每次重启,端口可能都不一样。
这就是防火墙配置的麻烦所在——lmgrd的端口27000是固定的,但vendor daemon的端口每次都在变。你没法在防火墙里写死一个随机端口。
理解端口需求之前,先搞清楚通信流程:
所以整个通信过程涉及两个TCP连接:客户端→lmgrd,客户端→vendor daemon。两个连接都需要通畅。
如果你的客户端和服务器在同一个网段,没有防火墙阻隔,动态端口不是问题。vendor daemon每次启动换端口,客户端都能从lmgrd那里拿到最新地址。
但一旦有防火墙,问题就来了。
防火墙的规则是基于固定端口的。你没法写一条规则说“允许连接到任意临时端口”。vendor daemon的端口每次重启都在变,防火墙规则跟不上。

唯一的解决办法:把vendor daemon的端口固定下来。
固定方法是在license文件的VENDOR行后面加上PORT=参数:
text
VENDOR snpslmd /opt/synopsys/snpslmd PORT=27002这样vendor daemon每次启动都用27002,不会再随机变化。
同样的,lmgrd的端口也可以在SERVER行固定:
text
SERVER license-server 001122334455 27001如果SERVER行不写端口号,默认用27000。如果写了,就用指定的。
最基本的情况:
如果你的lmgrd用默认27000,vendor daemon固定到了27002,那么防火墙需要开放:
| 端口 | 用途 | 协议 |
|---|---|---|
| 27000 | lmgrd监听端口 | TCP |
| 27002 | vendor daemon端口 | TCP |
如果用了多套FlexNet:
同一台服务器上跑多个厂商的license服务,每套用不同的端口组合:
防火墙把所有用到的端口都开放。
客户端侧防火墙:
客户端机器通常不需要开放入站端口,因为连接是由客户端主动发起的。但客户端防火墙的出站规则需要允许访问服务器的27000和27002端口。如果客户端防火墙限制了出站连接,同样会出问题。
误区一:FlexNet用UDP
不用。FlexNet的通信协议是TCP/IP,应用层是FlexNet自己的私有协议。不需要在防火墙里开放任何UDP端口。
误区二:必须开放27000到27009整个范围
不需要。lmgrd默认在27000到27009之间选一个端口,但只需要开放实际使用的那一个,不用把整个范围都打开。
如果你在SERVER行明确指定了27001,那只需要开放27001。27000到27009里的其他端口跟你的服务没关系。
误区三:vendor daemon端口固定了就万事大吉
固定vendor daemon端口只是解决了防火墙的问题。但如果你用的是Windows服务(通过LMTOOLS安装的),还要确保服务以“本地系统账户”运行,否则vendor daemon可能因为权限不足无法绑定到指定端口。

假设你要把lmgrd端口改成27001,vendor daemon端口固定到27002。
第一步:修改license文件
text
SERVER license-server 001122334455 27001
VENDOR snpslmd /opt/synopsys/snpslmd PORT=27002第二步:重启lmgrd服务
text
lmdown -c /path/to/license.lic
lmgrd -c /path/to/license.lic -l /var/log/flexnet/debug.log第三步:配置防火墙
第四步:更新客户端配置
客户端环境变量改成新端口:
text
LM_LICENSE_FILE=27001@license-server配置完成后,用lmstat验证:
text
lmutil lmstat -c 27001@license-server -a如果能正常返回feature列表和使用情况,说明端口配置正确。
如果返回连接失败,按这个顺序排查:
FlexNet的端口需求其实很明确:两个TCP端口,一个给lmgrd,一个给vendor daemon。
大多数端口相关的连接问题,根源都是vendor daemon的端口没有固定,或者防火墙只开了lmgrd的端口没开vendor daemon的。把两个端口都固定下来,防火墙两边都配置好,问题就解决了。