nsm

版本信息

项目内容
组件版本1.120.2
首发版本openUBMC 1.0.0
文档作者openUBMC 社区
最后更新2026-05-06

1. 组件概述

1.1 组件简介

nsm(network service mgmt,网络服务管理)是 openUBMC 系统中负责管理网络服务的组件。该组件统一管理网络服务的端口号、监听状态,以及开源网络服务的启动控制和配置文件更新。nsm 通过 iptables 实现端口转发功能,所有网络服务监听环回地址,由 iptables 将外部请求转发到对应服务的内部端口,从而实现统一的安全管理和灵活的端口分配。

1.2 解决什么问题

nsm 组件解决了 openUBMC 系统中网络服务管理的以下问题:

  • 多个网络服务的端口统一管理,避免端口冲突
  • 端口转发规则的统一维护和更新
  • 网络服务的动态注册和配置
  • 开源服务(SSH、NGINX、SNMP)的启动控制
  • 服务使能状态与转发规则的联动

1.3 核心功能

  • 核心功能一:端口管理(主/备端口、内部端口、端口共享、端口冲突检测)
  • 核心功能二:网络服务使能状态管理
  • 核心功能三:服务注册机制(支持自研和应用市场组件)
  • 核心功能四:iptables 端口转发规则管理
  • 核心功能五:SSH 加密算法配置

1.4 关键术语表

术语解释
nsm网络服务管理组件
内部端口服务实际监听的环回地址端口
外部端口对外暴露的端口,通过 iptables 转发
端口共享两个或多个协议共用同一个端口号
服务注册自研组件通过 D-Bus 接口注册端口到 nsm
PortShareWith/PortShareFrom端口共享配置参数

1.5 外部交互边界图

2. API 使用说明与示例

2.1 服务端口查询与设置

bash
busctl --user introspect bmc.kepler.nsm /bmc/kepler/Managers/1/NetworkProtocol/HTTPS bmc.kepler.Managers.NetworkProtocol.PortConfig
NAME                                           TYPE      SIGNATURE RESULT/VALUE FLAGS
.SetPorts                                      method    a{ss}qq   -            -
.DefaultPort                                   property  q         443          emits-change
.DefaultSparePort                              property  q         0            emits-change
.Enabled                                       property  b         true         emits-change writable
.Port                                          property  q         443          emits-change writable
.PortCount                                     property  y         1            emits-change
.SparePort                                     property  q         0            emits-change writable
.SystemId                                      property  y         1            emits-change

功能说明

查询和设置网络服务的外部端口号及使能状态。

属性内容
接口名bmc.kepler.Managers.NetworkProtocol.PortConfig
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
Port输入/输出uint16主端口号1~65535
SparePort输入/输出uint16备用端口号(可选)0~65535,0 表示不使用
Enabled输入/输出bool服务使能状态true、false
方法配置参数
方法名入参类型出参类型描述取值范围
SetPortsqq-设置端口号q: 1~65535; q: 0~65535,0 表示不使用

返回值与异常

返回值含义触发条件处理建议
成功配置生效参数合法且端口可用
失败配置失败端口冲突或参数非法检查端口是否被占用,修改端口号

应用场景

当需要修改网络服务的外部端口号或启用/禁用服务时使用。典型场景:

  • 避免端口冲突,修改服务端口
  • 临时禁用某个网络服务
  • 配置主备端口以提高可用性

限制条件

  • 外部端口号不能与已存在的端口冲突
  • 主备端口号不能相同
  • 端口设置为 0 表示不使用该端口
  • 修改端口会同步更新 iptables 转发规则

调试示例

命令行调试
bash
# 查询 Video 服务端口配置
busctl --user introspect bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/Video

# 设置 Video 服务端口为 3000
busctl --user call bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/Video \
  org.freedesktop.DBus.Properties Set \
  ssv bmc.kepler.Managers.NetworkProtocol.PortConfig Port q 3000

# 禁用 Video 服务
busctl --user call bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/Video \
  org.freedesktop.DBus.Properties Set \
  ssv bmc.kepler.Managers.NetworkProtocol.PortConfig Enabled b false

# 启用 Video 服务
busctl --user call bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/Video \
  org.freedesktop.DBus.Properties Set \
  ssv bmc.kepler.Managers.NetworkProtocol.PortConfig Enabled b true

2.2 网络服务注册

bash
busctl --user introspect bmc.kepler.nsm /bmc/kepler/Managers/1/NetworkProtocol bmc.kepler.Managers.NetworkProtocol
NAME                                TYPE      SIGNATURE     RESULT/VALUE FLAGS
.Register                           method    a{ss}(ssaqss) aq           -

功能说明

自研或应用市场提供的网络服务通过 Register 方法注册默认端口号到 nsm 进行统一管理。

属性内容
接口名bmc.kepler.Managers.NetworkProtocol
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

方法配置参数
方法名入参类型出参类型描述取值范围
Registerssaqssaq注册服务s: ProtocolName
s: ProtocolType
aq: DefaultPorts主、备默认端口号
s: PortShareWith
s: SharePortFrom

返回值与异常

返回值类型含义触发条件处理建议
内部端口号列表注册成功参数合法使用返回的内部端口监听
错误码注册失败端口冲突或参数错误检查参数和端口配置

返回值说明

  • PortCount=1 时,返回 1 个内部端口号
  • PortCount=2 时,返回 2 个内部端口号
  • PortCount=0 时,不返回内部端口号(从其他服务共享端口)

应用场景

当自研组件或应用市场服务需要监听网络端口时,必须先注册到 nsm:

  • 避免 IP 地址和端口冲突
  • 统一管理网络服务
  • 自动配置 iptables 转发规则

限制条件

  • 只有外部通信端口需要注册,内部通信端口不需要
  • 注册的端口号可以与其他服务共享(通过 PortShareWith/PortShareFrom)
  • 共享端口服务的参数必须互锁配置
  • 首次注册默认端口冲突时,服务无法使能,需要修改端口号

2.3 SSH 加密算法配置

bash
busctl --user introspect bmc.kepler.nsm /bmc/kepler/Managers/1/NetworkProtocol/SSH/Algorithms/HostKeyAlgorithms/1 bmc.kepler.Managers.NetworkProtocol.SSH.Algorithm
NAME                                              TYPE      SIGNATURE RESULT/VALUE  FLAGS
.Enabled                                          property  b         true          emits-change writable
.Name                                             property  s         "ssh-ed25519" emits-change

功能说明

查询和设置 SSH 服务支持的加密算法,包括主机密钥算法、加密算法、MAC 算法等。

属性内容
接口名bmc.kepler.Managers.NetworkProtocol.SSH.Algorithm
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
Enabled输入/输出bool算法使能状态true、false
Name输出string算法名称具体算法字符串

返回值与异常

返回值含义触发条件处理建议
成功配置生效参数合法
失败配置失败算法名称错误检查算法名称

应用场景

当需要配置 SSH 服务的安全策略时:

  • 禁用不安全的加密算法
  • 仅启用符合企业安全标准的算法
  • 调试 SSH 连接问题

限制条件

  • 修改算法配置后需要重启 SSH 服务生效
  • 建议至少保留一种安全的加密算法
  • 某些算法可能受 SSH 库版本支持限制

调试示例

命令行调试
bash
# 查询 SSH 主机密钥算法
busctl --user introspect bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/SSH/Algorithms/HostKeyAlgorithms/1

# 启用 RSA 主机密钥算法
busctl --user call bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/SSH/Algorithms/HostKeyAlgorithms/1 \
  org.freedesktop.DBus.Properties Set \
  ssv bmc.kepler.Managers.NetworkProtocol.SSH.Algorithm Enabled b true

2.4 SNMP 配置查询

bash
busctl --user introspect bmc.kepler.nsm /bmc/kepler/Managers/1/NetworkProtocol/SNMP bmc.kepler.Managers.NetworkProtocol.SNMP
NAME                                     TYPE      SIGNATURE RESULT/VALUE                   FLAGS
.EngineId                                property  s         "xxxxxx" emits-change
.HideCommunityStrings                    property  b         false                          emits-change writable
.SNMPSupported                           property  b         true                           emits-change
.SNMPv1Enabled                           property  b         false                          emits-change writable
.SNMPv2cEnabled                          property  b         false                          emits-change writable
.SNMPv3Enabled                           property  b         true                           emits-change writable
.SysContact                              property  s         ""                             emits-change writable
.SysLocation                             property  s         ""                             emits-change writable
.SysName                                 property  s         "BMC"                         emits-change writable
.SysNameSyncEnabled                      property  b         false                          emits-change writable

功能说明

查询 SNMP 服务的配置信息。

属性内容
接口名bmc.kepler.Managers.NetworkProtocol.SNMP
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
EngineId输出string引擎ID
HideCommunityStrings输入/输出bool是否隐藏团体名true、false
SNMPSupported输出bool是否支持SNMPtrue、false
SNMPv1Enabled输入/输出bool是否启用SNMPv1true、false
SNMPv2cEnabled输入/输出bool是否启用SNMPv2ctrue、false
SNMPv3Enabled输入/输出bool是否启用SNMPv3true、false
SysContact输入/输出string系统联系人
SysLocation输入/输出string系统位置
SysName输入/输出string系统名称
SysNameSyncEnabled输入/输出bool是否从主机名同步系统名true、false

返回值与异常

返回值含义触发条件处理建议
成功查询成功服务正常运行
失败查询/设置失败服务异常检查服务状态

应用场景

查询 SNMP 服务配置和状态,确认服务是否正常运行。

限制条件

  • SNMP 团体名配置由 iam 组件管理,需要调用 iam 接口设置
  • 端口号默认为 161

调试示例

命令行调试
bash
# 查询 SNMP 服务配置
busctl --user introspect bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/SNMP \
  bmc.kepler.Managers.NetworkProtocol.SNMP

3. 组件扩展案例

不适用

4. 日志说明

4.1 一键日志收集

文件路径内容说明
/var/log/app.lognsm 组件日志
/var/log/operation.lognsm 操作日志
/dev/shm/log/web/access_lognginx服务访问日志
/dev/shm/log/web/error_lognginx服务错误日志

4.2 关键日志信息

日志片段日志级别含义解读建议处理动作
2026-05-03 17:21:05.390935 nsm NOTICE: xxxxxxNOTICEnsm 组件重要功能执行节点日志用于判断重要功能执行到的节点状态
2026-05-03 17:21:05.390939 nsm WARNING: xxxxxxWARNINGnsm 组件告警日志用于记录功能执行告警的原因
2026-05-03 17:21:05.390939 nsm ERROR: xxxxxxERRORnsm 组件错误日志用于记录功能执行错误的原因
2026-05-06 20:44:20 Redfish,xxxxxx,nsm,Set SNMP Trap version to (SNMPv1) successfully(or failed)OPERATION服务配置设置成功或失败的操作日志用于判断配置设置是否成功
xxxxxx [2026-05-07T06:07:42+08:00] 1778105262.118 0.146 "POST /redfish/v1/EventService/Subscriptions HTTP/1.1" 201 1231 "-" "HttpClient" "-"ACCESSnginx服务访问日志用于判断api请求是否到达nginx服务
2026/05/07 06:09:10 [error] 23612#0: *17121 open() "/opt/bmc/web/htdocs/extern/custom/style_config.json" failedERRORnginx服务错误日志用于排查nginx服务自身异常

5. 问题定界指南

5.1 典型问题定界

现象描述是否为本组件问题判断依据关键证据收集方法
服务无法从外部访问可能是检查服务使能状态和端口配置查看 nsm 日志,使用 busctl 查询服务状态
端口设置失败端口冲突或参数错误查看错误日志,检查端口占用情况
iptables 规则丢失规则未正确创建或被清除检查 iptables 规则列表
服务注册失败可能是参数错误或端口冲突查看注册返回码和日志
SSH 无法连接可能是SSH 服务或算法配置问题检查 sshd 进程和算法配置
端口共享不生效共享参数配置错误检查 PortShareWith/From 配置

5.3 调试方法

开启调试日志

bash
# 开启 nsm 详细日志
busctl --user call bmc.kepler.nsm \
  /bmc/kepler/nsm/MicroComponent \
  bmc.kepler.MicroComponent.Debug SetDlogLevel a{ss}sy 0 debug 1

# 查看实时日志
tail -f /var/log/app.log

复现问题方法

前置条件设置:

  1. 确保 nsm 服务正常运行
  2. 确认网络服务已启动
  3. 确认 iptables 服务正常

操作步骤:

  1. 查询当前服务配置和状态
  2. 修改服务端口或使能状态
  3. 观察 iptables 规则变化
  4. 从外部测试服务连接

预期结果:

  • 服务状态变化正确
  • iptables 规则同步更新
  • 外部可以正常访问服务
bash
# 查询服务状态
busctl --user call bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/SSH \
  org.freedesktop.DBus.Properties Get \
  ss bmc.kepler.Managers.NetworkProtocol.Protocol Enabled

# 查看 iptables 转发规则
iptables -t nat -L -n -v
ip6tables -t nat -L -n -v

# 查看端口监听
netstat -ntulp | grep sshd

常用调试命令

bash
# 查看 nsm 资源树
busctl --user tree bmc.kepler.nsm

# 查看特定服务详情
busctl --user introspect bmc.kepler.nsm \
  /bmc/kepler/Managers/1/NetworkProtocol/SSH

# 查看 iptables 所有转发规则
iptables -t nat -L -n -v
ip6tables -t nat -L -n -v

# 查看特定服务的端口监听
netstat -ntulp | grep <端口>
ss -tulpn | grep <端口>

# 测试端口连通性
telnet <IP> <>
nc -zv <IP> <>

6. 常见问题解答

Q1:为什么服务配置了端口但外部无法访问?

  • 问题描述 网络服务已配置端口号并使能,但从外部无法访问该服务。

  • 一句话答案 检查服务使能状态、iptables 转发规则和服务内部监听状态。

  • 根因说明 可能原因包括:服务未使能、iptables 规则未正确创建、服务内部未监听、防火墙阻止。

  • 解决方案

    1. 使用 busctl 查询服务 Enabled 属性,确认为 true
    2. 使用 iptables -t nat -L -n -v 检查转发规则是否存在
    3. 使用 netstat -ntulp 检查服务是否监听内部端口
    4. 检查防火墙规则是否阻止外部访问
  • 规避方案 修改端口前先确认端口未被占用,避免端口冲突。

  • 适用版本 openUBMC 1.0.0 以上

Q2:端口冲突如何处理?

  • 问题描述 设置服务端口时提示端口冲突,无法保存配置。

  • 一句话答案 修改为其他未占用的端口号,或者停止占用该端口的服务。

  • 根因说明 nsm 会检查外部端口是否与其他服务的默认端口或正在使用的端口冲突。

  • 解决方案

    1. 使用 netstat -tulpn 查看端口占用情况
    2. 修改为其他可用端口号(建议使用 5000~10000 范围)
    3. 或者停止占用该端口的服务后再设置
  • 规避方案 在规划服务端口时,提前查询并分配不冲突的端口。

  • 适用版本 openUBMC 1.0.0 以上

Q3:自研服务如何注册到 nsm?

  • 问题描述 开发了新的网络服务,不知道如何将其端口注册到 nsm 进行管理。

  • 一句话答案 调用 nsm 的 Register 方法,提供服务名称、端口数量、默认端口和协议类型等参数。

  • 根因说明 nsm 提供服务注册机制,自研服务必须注册后才能避免端口冲突。

  • 解决方案

    1. 准备注册参数:服务名称、端口数量、默认端口、协议类型
    2. 调用 Register 方法进行注册
    3. 获取返回的内部端口号
    4. 服务监听返回的内部端口(127.0.0.1:port 和 [::2]:port)
  • 适用版本 openUBMC 1.0.0 以上

Q4:如何配置端口共享?

  • 问题描述 两个协议需要使用同一个端口号,不知道如何配置端口共享。

  • 一句话答案 通过 PortShareWith 和 PortShareFrom 参数配置端口共享,两个服务的参数必须互锁。

  • 根因说明 端口共享用于 IPMI 的 RMCP 和 RMCP+ 等需要共用端口的协议。

  • 解决方案

    1. 服务 A 设置 PortShareWith 为服务 B 的名称
    2. 服务 B 设置 PortShareFrom 为服务 A 的名称
    3. 两个服务的参数必须互锁,否则共享不生效
    4. 共享端口的服务端口数量可以不同
  • 规避方案 仔细核对两个服务的共享参数配置,确保互锁正确。

  • 适用版本 openUBMC 1.0.0 以上

Q5:SSH 连接失败怎么办?

  • 问题描述 SSH 服务已使能,但客户端无法连接或连接后立即断开。

  • 一句话答案 检查 SSH 服务状态、加密算法配置和 hostkey 文件。

  • 根因说明 可能原因包括:sshd 未启动、加密算法不匹配、hostkey 文件缺失或权限错误。

  • 解决方案

    1. 检查 sshd 进程:ps -elf | grep sshd
    2. 检查端口监听:netstat -ntulp | grep :22
    3. 检查 hostkey 文件是否存在:ls -la /data/trust/etc/ssh/ssh_host_*
    4. 检查 hostkey 文件权限,应为 600
    5. 检查 SSH 加密算法配置,确认客户端和服务器支持的算法有交集
  • 规避方案 定期检查 SSH 服务状态,保持加密算法配置合理。

  • 适用版本 openUBMC 1.0.0 以上

Q6:如何确认 iptables 规则是否生效?

  • 问题描述 修改了服务端口,不确定 iptables 转发规则是否正确更新。

  • 一句话答案 使用 iptables 命令查看 NAT 表的转发规则,确认规则存在且正确。

  • 根因说明 nsm 会在服务使能/禁用或端口变更时自动更新 iptables 规则。

  • 解决方案

    1. 查看 IPv4 转发规则:iptables -t nat -L -n -v
    2. 查看 IPv6 转发规则:ip6tables -t nat -L -n -v
    3. 查找对应服务的规则,确认目标地址为 127.0.0.1
    4. 测试外部连接验证规则是否生效
  • 规避方案 修改服务配置后,立即检查 iptables 规则是否正确更新。

  • 适用版本 openUBMC 1.0.0 以上

附录

附录A 参考资料

  • openUBMC 官网: https://www.openubmc.cn/
  • iptables 用户指南: man iptables
  • SSH 协议规范: RFC 4251-4256
  • SNMP 协议规范: RFC 1157

附录B 支持的网络服务

服务名称默认端口协议类型端口数量说明
SSH22TCP1安全外壳协议
HTTP80TCP1超文本传输协议
HTTPS443TCP1HTTP over TLS
KVMIP2198TCP1KVM over IP
VirtualMedia8208TCP1虚拟媒体服务
Video2199TCP1视频重定向服务
SNMP161UDP1简单网络管理协议
VNC5900TCP1虚拟网络计算
RMCP623/664UDP2RMCP 协议(与 RMCP+ 共享端口)
RMCPPlus623/664UDP2RMCP+ 协议(与 RMCP 共享端口)

附录C 修订记录

版本日期修订人修订内容
v1.02026-05-06openUBMC初始版本创建