noVNC与websockify分离连接到QEMU/KVM

​ 使用noVNC远程连接KVM默认是一对一的,这样就需要为每台虚拟机都架一个代理,资源消耗巨大,这显然不太实用,所以这里我们使用一个专门的代理机来做转发,代理多台虚拟机。

一、节点关系

宿主机:192.168.1.1

客户机(target):共用宿主机IP

代理机:192.168.1.2 安装websockify

测试机:192.168.1.3

二、客户机设置

  • 执行以下命令修改配置文件,添加一个 graphics

    virsh edit target
    

三、宿主机设置

  1. 修改 /etc/libvirt/qemu.conf 配置文件,取消vnc_listen = “0.0.0.0”注释

    vi /etc/libvirt/qemu.conf
    
  2. 获取客户机端口号

    virsh vncdisplay target
    

    自动分配的 VNC 端口(自增)默认从 5900 开始,如得到0,则客户机端口号为5900

  3. 关闭防火墙

四、代理机设置

  • 安装websockify

    git clone https://github.com/novnc/websockify.git
    
  • 在websockify目录新建token文件夹,在其下编写token.conf配置文件

    配置文件内容:

    target: 192.168.1.1:5900

    target2: 192.168.1.1:5901

    token:宿主机ip:(空格)对应客户机VNC端口

注意token: 后必须有空格

  • 在websockify目录执行以下命令启动代理(需先安装python3)

    ./run --token-plugin TokenFile --token-source ./token/ 6080
    
  • 关闭防火墙

五、测试机设置

  • 拉取noVNC

    git clone https://github.com/novnc/noVNC.git
    
  • 使用服务启动vnc.html,在地址栏末尾添加如下参数测试(或在左侧noVNC工具栏设置),如果要连接其他客户机(虚拟机),只需要在token.conf中配置,通过改变url中的token参数即可

?host=192.168.1.2&port=6080&path=websockify/?token=target

20220829_150340

六、连接加密

  • 生成CA证书: 生成CA免费证书 - 曾经沧海 云淡风轻 - 博客园 (cnblogs.com)

  • websockify启动时添加–cert 加密证书 –key 密钥

  • 此时还可不加密访问,加 –ssl-only可以禁止此行为

     ./run --token-plugin TokenFile --token-source ./token/ 6080 --cert /root/server.crt --key /root/server.key
    
  • 测试机将CA证书安装到受信任的根证书,重启生效

  • 访问时勾选左侧工具栏加密。

自签证书访问时会显示不安全,若有域名建议申请第三方机构颁发证书