答案内容由AI生成,仅供参考:
总结
| 问题 |
原因 |
解决方式 |
| KVM服务开启但不可用 |
nginx未监听2198端口 |
重启nginx或重载配置 |
| 无法获取Token |
接口 /UI/Rest/KvmHandler 异常 |
检查web_backend服务状态 |
| 显示“连接失败” |
WebSocket无法建立 |
检查Token、端口、证书 |
| 鼠标键盘失效 |
KVM会话建立不完整 |
检查VMM服务和USB模拟 |
最终建议操作顺序:
systemctl restart web_backend
systemctl restart nginx
然后刷新页面尝试重新连接KVM。
提示:OpenUBMC 25.06版本存在已知的KVM稳定性问题,建议升级至25.09及以上版本以获得更优体验。
点击此处查看详细分析解答
KVM服务无法使用问题排查指南
根据提供的信息,KVM服务显示为“已启用”,但在netstat中未监听其标准端口2198(仅在回环地址127.0.0.1的42198端口监听),导致KVM功能不可用。此问题通常与服务内部组件未正常启动或反向代理配置异常相关。
问题现象总结
- KVM服务状态:在系统中显示为“Enabled”。
- 端口监听状态:
netstat 显示 无公网IP的2198端口监听。
- 仅存在
127.0.0.1:42198 监听 —— 这是 nginx 内部转发端口,不对外暴露。
- 症状表现:
- 打开远程虚拟控制台时鼠标键盘失效。
- 打开KVM后显示“与管理系统连接失败”。
- 提示“设置信任证书超时”。
结论:KVM服务本身可能已运行,但前端反向代理(nginx)未正确将外部2198端口请求转发至内部KVM服务,导致客户端无法建立连接。
KVM连接原理简述
KVM服务通过以下组件协同工作:
graph LR
A["浏览器"] --> B{"HTTPS登录 Web Interface (443)"}
B --> C["获取Token"]
C --> D["WebSocket请求 KVM服务"]
D --> E["nginx 反向代理"]
E --> F["KVM Service (2198→42198)"]
F --> G["VMM/Virtual Media"]
- 端口2198:KVM控制端口,用于客户端与服务之间传输键盘、视频、鼠标数据。
- nginx角色:负责将外部请求从公网IP:2198转发到本地
127.0.0.1:42198。
- iptables:仅负责是否允许端口通信,不处理服务内部逻辑。
排查步骤
检查 nginx 是否正常运行并加载 KVM 转发规则
KVM对外端口依赖 nginx 配置文件进行端口转发。
常见问题:禁用/启用KVM时,iptables规则被清除,但nginx配置未更新或未重载。
排查命令:
# 检查nginx进程是否存在
ps -aux | grep nginx
# 检查nginx是否监听了公网2198端口
netstat -tlnp | grep :2198
# 若无输出,则说明nginx未监听,需检查配置文件
关键点:
- KVM真正的后端监听在
127.0.0.1:42198(由 om 进程提供)。
- nginx 必须配置
proxy_pass 将 public_ip:2198 → 127.0.0.1:42198。
解决方案:
# 重启nginx服务以加载最新配置
systemctl restart nginx
# 或手动重新加载配置
nginx -s reload
注意:直接修改iptables无法解决KVM不通问题,因为实际流量由nginx代理。
检查 KVM 服务进程是否异常
虽然ipmcget显示KVM启用,但后端服务(om)可能未正确绑定或崩溃。
排查命令:
# 查看进程中是否有om服务(KVM主服务)
ps -aux | grep om
# 确认42198端口是否由om监听
netstat -anpl | grep :42198
# 示例期望输出:
# tcp 0 0 127.0.0.1:42198 0.0.0.0:* LISTEN 2757/om
若无监听,说明 KVM 服务未能启动成功。
解决方案:
# 重启KVM服务(具体命令依系统而定)
systemctl restart kvm-service
# 或尝试重启整个web_backend服务
systemctl restart web_backend
检查 /etc/nginx/conf.d/ 中的 KVM 配置文件
确认是否存在正确的KVM代理配置。
检查路径:
ls /etc/nginx/conf.d/ | grep kvm
cat /etc/nginx/conf.d/kvm.conf
期望配置片段:
server {
listen 2198;
location / {
proxy_pass http://127.0.0.1:42198;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
修复方法:
- 如果配置缺失,从正常设备复制或重建配置。
- 修改后执行
nginx -s reload 生效。
检查证书和Token超时问题(对应“设置信任证书超时”)
提示“设置信任证书超时”表明 浏览器未能及时获取有效的认证Token。
可能原因:
UI/Rest/KvmHandler 接口响应缓慢或失败。
- SSL证书过期或不被信任。
- 后台服务处理超时。
排查与解决:
# 检查web_backend服务状态
systemctl status web_backend
# 检查日志中是否有认证失败记录
journalctl -u web_backend -f | grep -i "kvm\|token\|cert"
建议操作:
- 清除浏览器缓存、关闭弹窗拦截。
- 使用主流浏览器(Chrome/Firefox)测试。
- 检查系统时间是否准确(时间偏差大会导致SSL/TLS失败)。
验证 REST API 是否能创建 KVM 会话
通过API测试KVM服务核心功能是否就绪。
请求示例(使用curl):
curl -k -X POST https://<BMC_IP>/UI/Rest/KvmHandler \
-H "Content-Type: application/json" \
-d '{"action":"request"}' \
-u username:password
正常响应应包含:
{
"port": 2198,
"token": "xxxxxx",
"ip": "<BMC_IP>"
}
若返回空或错误,则说明:
web_backend 服务异常。
- KVM模块未加载。
- 权限或认证机制故障。
最终解决方案建议(按优先级)
| 步骤 |
操作 |
说明 |
| 1 |
重启 nginx 服务 |
确保反向代理配置生效 |
| 2 |
检查 nginx 配置文件是否完整 |
特别关注2198端口转发 |
| 3 |
重启 web_backend / KVM 服务 |
恢复后台服务状态 |
| 4 |
使用 curl 测试 /UI/Rest/KvmHandler 接口 |
验证核心服务可用性 |
| 5 |
清除浏览器缓存,关闭弹窗拦截 |
客户端兼容性处理 |
参考信息
- KVM控制端口:TCP 2198(默认启用,加密传输)。
- 相关实体:
UI/Rest/KvmHandler:创建KVM会话并返回Token和端口。
KVM Port 2198:客户端通过此端口建立WebSocket连接。
nginx:作为反向代理,转发KVM流量。
- 知识图谱关系:
KVM ← nginx:KVM依赖nginx配置进行网络暴露。
KVM → Port 2198:用于控制消息通信。
KVM ← BMC:由BMC统一管理并提供远程访问支持。
总结
| 问题 |
原因 |
解决方式 |
| KVM服务开启但不可用 |
nginx未监听2198端口 |
重启nginx或重载配置 |
| 无法获取Token |
接口 /UI/Rest/KvmHandler 异常 |
检查web_backend服务状态 |
| 显示“连接失败” |
WebSocket无法建立 |
检查Token、端口、证书 |
| 鼠标键盘失效 |
KVM会话建立不完整 |
检查VMM服务和USB模拟 |
最终建议操作顺序:
systemctl restart web_backend
systemctl restart nginx
然后刷新页面尝试重新连接KVM。
提示:OpenUBMC 25.06版本存在已知的KVM稳定性问题,建议升级至25.09及以上版本以获得更优体验。