ubuntu 安装vncserver和novncproxy(不需要客户端的网页版,使用websocket实现)

要在 OpenStack 主机上安装并使用自定义的 noVNC proxy(而不是 OpenStack 默认的 nova-console),去连接 虚拟机实例内部启动的 VNC 服务,你可以通过手动部署 noVNC + websockify 来实现。


✅ 场景说明

你希望的架构是:

浏览器
  │
  ▼
主机上的 noVNC proxy(websockify)
  │
  ▼
实例内部运行的 VNC 服务器(如 x11vnc)

🧰 所需组件

在 OpenStack 主机上:

  • noVNC
  • ✅ websockify(VNC WebSocket 转发器)
  • ✅ 可选:x11vnc/tigervnc-server 需运行在每个实例内部

🛠 步骤详解

① 在实例内部运行 VNC 服务

在每个虚拟机实例中安装并启动 VNC server(例如 x11vnc):

sudo apt update
sudo apt install x11vnc -y
x11vnc -display :0 -forever -nopw -rfbport 5901

② 在 OpenStack 主机安装 noVNC 和 websockify

# 安装依赖
sudo apt install git python3-websockify -y

# 下载 noVNC
cd /opt
sudo git clone https://github.com/novnc/noVNC.git
cd noVNC
sudo git checkout v1.4.0  # 或最新稳定版本

③ 运行 websockify 代理 VNC 服务

🧩 方法 1:单端口直连(每个实例独立监听)

# 连接实例 A(10.0.0.11:5901),将它映射到 host:6081
./utils/launch.sh --vnc localhost:6081 --listen 0.0.0.0:6081 -- \
  websockify 6081 10.0.0.11:5901

然后访问:

http://<host>:6081/vnc.html?host=<host>&port=6081

🧩 方法 2:路径路由多个实例(推荐)

1. 创建一个 /opt/novnc/targets.cfg 文件:
/vm1: 10.0.0.11:5901
/vm2: 10.0.0.12:5901
2. 启动 websockify:
websockify 6080 --target-config=/opt/novnc/targets.cfg --web /opt/noVNC
3. 访问链接(浏览器):
http://<host>:6080/vnc.html?path=/vm1
http://<host>:6080/vnc.html?path=/vm2

④ 配置防火墙(可选)

确保 OpenStack 主机允许外部访问 6080 或其他 websockify 端口:

sudo ufw allow 6080/tcp

也要确保虚拟机实例允许访问它的 5901 端口(从主机发起即可)。


🔐 可选增强

  • 为 websockify 设置密码代理或认证反向代理(如 Nginx)
  • 用 HTTPS 加密访问
  • 使用 systemd 启动 websockify 服务
  • 自动从 nova 实例元数据中提取 IP 并生成 targets.cfg(可脚本化)

✅ 总结

步骤 内容
实例内部 安装并运行 x11vnc、tigervnc 或其他 VNC server
主机安装 Git 安装 noVNC,系统安装 websockify
代理设置 用 websockify 将浏览器请求转发到对应实例的 VNC 端口
浏览器访问 使用 vnc.html?path=/vm1 等方式连接多个实例

posted @ 2025-06-05 15:23  学不会xuebuhui  阅读(250)  评论(0)    收藏  举报
Language: javascript //图片预览