前言
guacamole + coturn实现vnc远程桌面实时语音在政务项目已经落地了,现场交付人员都在回来的路上了。现在可以分享guacamole的硬部署了,局方是专网,且是信创环境,docker支持看运气。
下载
官网下载,需要自己编译,下载地址:https://guacamole.apache.org/
解压
bash
tar -xzf guacamole-server-1.6.0.tar.gz
编译
bash
./configure --with-init-dir=/etc/init.d
注意编译一定要先安装准备相关支持,比如:libjpeg、vncviewer等等。
我们是走vnc协议的远程,所以我这里要安装vnc的支持。
编译报错
1、configure: error: "libjpeg is required for writing jpeg messages"
处理:
bash
yum install libjpeg-devel
安装
bash
make
sudo make install
sudo ldconfig
启动 guacd 服务
bash
sudo systemctl daemon-reload
sudo systemctl enable guacd
sudo systemctl start guacd
安装jdk(如果有可以跳过)
bash
sudo yum install -y java-11-openjdk-devel
安装tomcat
bash
sudo yum install -y tomcat tomcat-admin-webapps tomcat-webapps
启动 Tomcat
bash
sudo systemctl enable tomcat
sudo systemctl start tomcat
创建目录
bash
sudo mkdir -p /etc/guacamole/{extensions,lib}
部署到 Tomcat
bash
sudo cp guacamole-1.6.0.war /var/lib/tomcat/webapps/guacamole.war
重启 Tomcat
bash
sudo systemctl restart tomcat
-
guacamole官网上下载gz
-
上传到服务器
-
解压文件
要用mysql-connector-j-8.2.0.jar
bash
tar -xzf mysql-connector-java-8.0.33.tar.gz
tar -xzf guacamole-auth-jdbc-1.6.0.tar.gz
复制 MySQL JDBC 驱动
bash
sudo cp mysql-connector-j-8.2.0.jar /etc/guacamole/lib/
复制 Guacamole JDBC 认证扩展
bash
sudo cp guacamole-auth-jdbc-1.5.0/mysql/guacamole-auth-jdbc-mysql-1.6.0.jar /etc/guacamole/extensions/
配置 Guacamole 使用 MySQL 认证
- 创建 Guacamole 配置文件
bash
sudo view /etc/guacamole/guacamole.properties
- 增加配置
yaml
# Guacd 配置
guacd-hostname: localhost
guacd-port: 4822
# MySQL 认证配置
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: your_password_here
# webrct支持
enable-websocket: true
enable-clipboard-integration: true
guacamole.websocket.heartbeat.enabled=false
guacamole.websocket.timeout=60000
webrtc-enable-mic: true
# 对接coturn配置
webrtc-turn-server: turn:localhost:3478
webrtc-turn-username: coturn认证用户
webrtc-turn-password: coturn认证密码
webrtc-turn-tls: false
认证提供程序(高版本不需要配置 > 1.6.0)
auth-provider: net.sourceforge.guacamole.net.auth.mysql.MySQLAuthenticationProvider
- guacd服务端配置
bash
sudo view /etc/guacamole/guacd.conf
- 增加配置
yaml
[server]
bind_host = 0.0.0.0
bind_port = 4822
设置正确的所有权
bash
sudo chown -R tomcat:tomcat /etc/guacamole
sudo chmod -R 755 /etc/guacamole
确保 Tomcat 可以访问 JDBC 驱动
bash
sudo chown tomcat:tomcat /etc/guacamole/lib/mysql-connector-j-8.2.0.jar
sudo chown tomcat:tomcat /etc/guacamole/extensions/guacamole-auth-jdbc-mysql-1.6.0.jar
重启服务
bash
sudo systemctl restart guacd (等同 /etc/init.d/guacd restart)
sudo systemctl restart tomcat
检查状态
bash
sudo systemctl status guacd
sudo systemctl status tomcat
查看tomcat日志
bash
tail -fn 1000 /var/log/tomcat/catalina.2025-11-05.log
查看日志:guacamole/tomcat/guacd
bash
tail -fn 1000 /var/log/messages
查看服务
bash
ps -ef | grep guacd
得到pid
bash
netstat -lntp | grep pid号
看到的端口具体端口
PS:
注意如果要支持VNC协议,一定要先安装好VNC协议支持,在编译结果里要看到"vncview----------yes",否则装上了,也不能走vnc协议连上远程桌面。
知识科普
一、Guacamole 是什么?
Apache Guacamole 是一个开源、无客户端的远程桌面网关。它的核心创新在于,用户无需在本地设备上安装任何客户端软件或插件,仅通过一个标准的 Web 浏览器 就能远程访问和管理其他计算机(如 Windows、Linux、Mac 等)。
"无客户端"指的是用户的设备上不需要安装任何专用软件,所有复杂的后端处理都在 Guacamole 服务器上完成。
二、核心特性与优势
无客户端访问
-
最大优势:用户可以在任何地方、使用任何设备(包括 Chromebook、iPad、智能手机甚至公共电脑),只要有一个现代浏览器(如 Chrome、Firefox、Safari),就能安全地连接到自己的工作站或服务器。
-
消除了软件安装、配置和兼容性的麻烦。
基于 Web 的访问
-
提供统一的 Web 门户,所有远程连接都在一个界面中管理。
-
用户体验一致,易于上手。
支持多种协议
-
RDP: 用于连接 Windows 机器。
-
VNC: 用于连接 Linux、Unix 或其它系统的图形桌面。
-
SSH: 用于安全的命令行访问 Linux/Unix 服务器。
-
Telnet: 较老的非加密命令行协议。
-
Kubernetes: 可以直接连接到容器的终端。
Guacamole 本身并不直接实现远程桌面协议,而是作为一个网关,将多种后端协议转换成 Web 友好的方式。它原生支持:
强大的安全模型
-
所有连接都终止于 Guacamole 服务器。用户只能看到在浏览器中渲染的桌面图像,而不会直接连接到目标机器,这提供了一个天然的隔离层。
-
支持与 LDAP、Active Directory、数据库 等后端进行身份验证集成。
-
可以配置细粒度的权限控制(如哪些用户可以连接哪些主机、是否允许文件传输、剪切板共享等)。
-
支持通过 TLS/SSL 加密所有浏览器与 Guacamole 服务器之间的通信。
会话连接与共享
-
支持会话连接,如果一个连接意外断开,用户可以重新连接并回到之前的会话中。
-
管理员可以演示或提供技术支持,实现桌面共享。
三、工作原理与架构
Guacamole 的架构主要由两部分组成:
Guacamole 客户端:
-
这不是一个需要安装的软件,而是一段运行在用户浏览器中的 JavaScript 代码。
-
它使用 WebSocket 协议与 Guacamole 服务器进行实时通信。
-
它的职责是接收服务器发送的远程桌面显示指令(通过 Guacamole 协议),并在浏览器的 HTML5 Canvas 元素上渲染出桌面图像。同时,它将用户的键盘、鼠标输入发送回服务器。
Guacamole 服务器(guacd):
-
Guacamole Web 应用: 一个 Java Servlets 应用,负责提供 Web 界面、用户认证和授权。
-
guacd 守护进程: 一个用 C 语言编写的、轻量级的代理。它负责与后端的目标机器建立实际的 RDP、VNC、SSH 等连接。
这是核心后端服务,通常由两个组件构成:
工作流程:
-
用户在 Web 浏览器中登录 Guacamole 门户。
-
用户点击一个连接。
-
Guacamole Web 应用通知
-
guacd
-
建立到目标机器的连接。
-
guacd
使用对应的协议(如 RDP)连接到目标机器。
-
guacd
将远程桌面的图形数据转换为高效的 Guacamole 指令,并通过 WebSocket 发送给浏览器中的客户端。
-
浏览器中的客户端根据指令渲染出桌面。
这个架构的关键在于 Guacamole 协议,它是一个高效、自定义的协议,专门用于在服务器和 Web 客户端之间传输远程桌面数据。