VNC问题求助

版本:2512

在web界面使能VNC,如下图所示

使用VNC远程无法登陆,关闭了下面的SSL加密后,才能登陆

请问是什么造成的,如何解决这个问题

答案内容由AI生成,仅供参考:

:memo: 结论

您遇到的 “必须关闭 SSL 才能登录 VNC” 的问题是由于 SSL 通信链路不完整 引起的,最可能原因是:

  • 缺少或未正确加载 SSL 证书
  • 客户端不支持加密协议

:wrench: 解决方法:

  1. 确认已导入正确 SSL 证书
  2. 优先使用 Web UI 中的 noVNC 功能访问(天然支持 SSL)
  3. 外部客户端使用支持 VeNCrypt 的工具
  4. 检查 Nginx 是否正确代理 WSS

一旦上述条件满足,即可 开启 SSL加密 并安全地远程登录 VNC

如有进一步问题,建议收集 tcpdump 抓包数据和 /var/log/novnc.log 日志进行深入分析。

点击此处查看详细分析解答

VNC 无法远程登录问题分析与解决方案

根据您提供的信息,您在使用 openUBMC 系统(版本 2512) 配置 VNC 服务时,只有在关闭 SSL 加密后才能成功登录 VNC,而开启 SSL 加密时连接失败。下面将基于知识库中的信息,对问题进行详细分析并提供解决方案。


:magnifying_glass_tilted_left: 问题分析

1. VNC SSL 加密默认配置分析

  • 根据文档《服务器出厂定制化配置》(ID: 2),参数 BMCSet_VNCSSLEnableState 控制 VNC 的 SSL 加密状态:
    • 默认值:on(开启 SSL 加密)
    • off:关闭加密

:white_check_mark: 这表明系统设计上应当支持 SSL 加密的 VNC 连接。

然而,从您的操作反馈来看:
:right_arrow: 开启 SSL 会连接失败,关闭后才可登录,说明存在以下可能:


2. 根本原因推测

结合日志输出和系统上下文,以下是可能导致 VNC SSL 连接失败的原因:

:cross_mark: 原因一:SSL 证书未正确配置或缺失

  • VNC 的 SSL 加密依赖于有效的 SSL 证书。
  • 如果系统未生成或未导入正确的 SSL 证书(如 .p12 或 PEM 文件),Nginx 或 VNC 后端服务将无法建立安全连接。
  • 在《openUBMC300 V3 问题定位分享》(ID: 7)中提到:

    web打不开如何定位:主要是 ssl 证书获取失败,导致 Nginx 未加载。”

  • VNC 通常通过 Nginx 反向代理提供 HTTPS/WSS 访问(尤其是基于 Web 的 NovNC 客户端)。若 SSL 证书不完整或未导入,则加密通道无法建立,导致连接中断或空白。

:cross_mark: 原因二:VNC 客户端不兼容 SSL/TLS 加密

  • 某些 VNC 客户端(如 TightVNC、RealVNC 的基础版本)仅支持原始 RFB 协议,默认不支持 SSL 封装。
  • 虽然知识库提到 “VNC Client 使用 TCP port 5900 并默认使用 SSL 加密”,但实际中:
    • 一些客户端无法自动识别加密层(尤其是静态端口 5900 直连模式)。
    • 若 TLS 握手失败,连接会被直接拒绝或静默断开。

示例:使用标准 VNC 客户端直连 IP:5900 无法连接开启 SSL 的服务,需要使用 支持 VeNCrypt 扩展 或 WebSockets over SSL 的客户端(如 noVNC)。

:cross_mark: 原因三:iptables/firewall 规则阻止加密通信

  • 日志中出现:
    Stopping firewalld - dynamic firewall daemon...
    
    虽然这不是错误信息(属于正常关机流程),但提示了系统启用了防火墙(firewalld)。
  • 若防火墙未放行 SSL 相关流量(虽然端口仍是 5900,但加密协议可能被误判),也可能引发连接异常。

补充:《知识图谱》中指出 Iptables 会转发 VNC 流量,并在 VNC 关闭时移除规则 —— 但如果配置有误,仍可能导致加密流量被拦截。

:cross_mark: 原因四:系统版本兼容性问题

  • 知识库提及不同版本对 VNC 的支持情况不一致:
    • 25.06 版本:VNC 不支持,Web UI 中隐藏页面。
    • 25.09 版本:明确 支持 VNC 并集成进 Web UI
  • 您当前使用 版本 2512,理论上应已支持 VNC,但可能存在如下问题:
    • nginx 配置未更新,导致 WSS(WebSocket Secure)代理异常。
    • VNC 配置文件路径发生变化(如移动至 OEM/huawei/web_backend/mapping_config/BMCSettings/VNC.json),旧路径引用失败。
    • noVNC 1.5.0 组件未正确加载加密模块。

:white_check_mark: 解决方案建议

:white_check_mark: 方案一:确认并修复 SSL 证书配置

  1. 登录 openUBMC Web 管理界面 → 安全配置 → SSL 证书管理
  2. 检查是否存在有效的服务器证书(特别是用于 Web 和 VNC 的 .p12 证书)
  3. 若无,请按以下步骤操作:
    • 生成 CSR 并签发证书(或使用自签名证书)
    • 导入 .p12 格式证书(含私钥)
  4. 确保 Nginx 成功加载证书:
    # 检查证书是否存在
    ls /etc/nginx/certs/server.p12
    
    如无,则重新导出或上传。

:light_bulb: 提示:参考文档《PKI 实践指南》(ID: 6)完成 EJBCA 或内部 CA 签发证书。


:white_check_mark: 方案二:使用支持 SSL 的 VNC 客户端

不要使用传统 VNC 客户端(如 RealVNC Viewer)直接连接端口 5900

建议使用以下方式之一:

推荐方式 1:通过 Web 浏览器访问 noVNC

  • 打开浏览器 → 输入 https://<BMC_IP>/
  • 登录后进入 虚拟控制台 > VNC
  • 系统自动通过 WSS(WebSocket Secure)连接,支持 SSL 加密
  • 安全、兼容性强、无需额外安装

推荐方式 2:使用支持 VeNCrypt 的客户端

  • 客户端推荐:
    • TigerVNC Viewer(设置加密类型为 VeNCrypt)
    • UltraVNC with SSL plugin
  • 设置说明:
    • Host: <BMC_IP>
    • Port: 5900
    • Security: VeNCryptTLS 选项启用

:white_check_mark: 方案三:检查 Nginx 配置是否启用 WSS 代理

VNC 的 Web 访问通常通过 Nginx 反向代理实现 WebSocket 加密通信。

检查 /etc/nginx/nginx.conf 是否包含如下配置片段:

location /websockify {
    proxy_pass http://localhost:6080; # noVNC 监听端口
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}

若配置错误或缺失,会导致 WSS 升级失败,从而 SSL 连接失败。


:white_check_mark: 方案四:确认 BMCSet_VNCSSLEnableState 配置生效

通过 Redfish API 或 CLI 检查当前设置:

# 查看 VNC SSL 是否真正启用
GetVNCEnabled
GetVNCSSLEnableState

或者检查配置文件:

{
  "BMCSet_VNCSSLEnableState": "on",
  "BMCSet_VNCPort": 5900,
  "BMCSet_VNCPassword": "******"
}

确保该配置已写入持久化存储,且服务已重启。


:white_check_mark: 方案五:临时排查:启用日志抓包分析

  1. 抓包分析 SSL 握手过程

    tcpdump -i any -s 0 -w vnc_ssl.pcap port 5900
    

    使用 Wireshark 打开,观察是否有 Client HelloServer Hello 失败。

  2. 查看 VNC 服务日志

    journalctl -u vncserver
    # 或查看 noVNC 日志
    tail /var/log/novnc.log
    

    查找关键词:

    • SSL handshake failed
    • Certificate not found
    • WebSocket upgrade failed

:hammer_and_wrench: 总结建议

项目 推荐做法
:locked_with_key: 加密连接 优先使用 Web 浏览器通过 HTTPS + WSS(noVNC)方式访问
:desktop_computer: 客户端选择 避免普通 VNC 客户端;选用 TigerVNC 并启用 VeNCrypt
:scroll: 证书配置 确保导入了完整的 .p12 服务器证书
:repeat_button: 服务验证 修改配置后重启 VNC 与 Nginx 服务
:test_tube: 测试步骤 先确保 Web noVNC 可以加密登录,再尝试外部客户端

:memo: 结论

您遇到的 “必须关闭 SSL 才能登录 VNC” 的问题是由于 SSL 通信链路不完整 引起的,最可能原因是:

  • 缺少或未正确加载 SSL 证书
  • 客户端不支持加密协议

:wrench: 解决方法:

  1. 确认已导入正确 SSL 证书
  2. 优先使用 Web UI 中的 noVNC 功能访问(天然支持 SSL)
  3. 外部客户端使用支持 VeNCrypt 的工具
  4. 检查 Nginx 是否正确代理 WSS

一旦上述条件满足,即可 开启 SSL加密 并安全地远程登录 VNC

如有进一步问题,建议收集 tcpdump 抓包数据和 /var/log/novnc.log 日志进行深入分析。

开启SSL加密后,需要使用支持SSL加密的VNC客户端才能登录,或使用不支持SSL加密的VNC客户端配套SSL隧道软件使用

我这边使用支持SSL加密的VNC客户端会有如下提醒,还是无法在SSL加密的情况下使用VNC登陆

连接失败请确认是否已导入正确 SSL 证书

web端已经导入证书,而且这个证书是根据论坛上https://discuss.openubmc.cn/t/topic/2503这个帖子生成的,是生成的证书有问题吗?

请检查VNC客户端是否配置了与BMC安装的SSL证书配套的CA证书,或使用SSL 隧道软件 stunnel配套VNC工具使用(需要配套的ssl证书和ca证书),已测试过是可行的

openUBMC_20260708-0425.tar.gz (8.5 MB)

老师您好,我们这边按您说的没有成功过,目前基于2509开发的;您那边有验证的教程吗?可以发一下吗?jiliu@aaeon.com.cn