All in Web | 远程桌面网关-Apache Guacamole-详细部署教程

在L站已水多天,现已是二级用户,我也来发个技术贴,再收点小心心应该不过分吧。 :thinking:
刚刚也看到有佬友在推荐这个,但没有详细教程,一些网上分享的步骤又太过杂乱。

简介

Apache Guacamole 是一个无客户端的远程桌面网关,它支持众多标准管理协议,例如 VNC(RFB),RDP,SSH 等等。

通过名字知道该项目是Apache基金会旗下的一个开源项目,也从侧面表明该项目是一个较高标准,并具有广泛应用前景的项目,值得了解一下。

Guacamole由三部分组成,guacamole、guacd 、postgres。

**guacd** : 作为后端服务,支持多种远程协议

**guacamole**: 作为前端服务,提供Web界面入口

**postgres** : 作为数据库,所有配置信息均保存至数据库

背景

一些公司以安全为由会把到外网的远程协议封禁了,为了能更好的摸鱼,才想要搭建web远程网关。

新建docker-compose.yml项目文件

version: "3"
services:
  guacamole-postgres:
    container_name: guacamole-postgres
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: 123456
      PGDATA: /var/lib/postgresql/data/pgdata  #需要做这一步才能数据持久化,具体说明查看官方文档
    volumes:
      - /your-path/data:/var/lib/postgresql/data  #左边更改为你自己的路径
    network_mode: "bridge"
    restart:
      always

  guacamole-guacd:
    container_name: guacamole-guacd
    image: guacamole/guacd:latest
    network_mode: "bridge"
    restart:
      always

  guacamole-client:
    container_name: guacamole-client
    image: guacamole/guacamole:latest
    environment:
      POSTGRES_DATABASE: guacamole_db
      POSTGRES_USER: sqldata
      POSTGRES_PASSWORD: 234567
    ports:
      - 8080:8080           #左边修改为自己的外网端口
    network_mode: "bridge"
    links:
      - guacamole-postgres:postgres
      - guacamole-guacd:guacd
    restart:
      always

启动项目

docker-compose up -d

数据库初始化

进入默认的postgres db,创建一个新的用户名sqldata,密码为234567,创建一个新的数据库guacamole_db,并把权限赋予新用户(注意分号)

新建的几个参数必须与guacamole-client中的环境参数一致。

docker exec -it guacamole-postgres psql -U postgres -d postgres
CREATE USER sqldata WITH PASSWORD '234567';
CREATE DATABASE guacamole_db OWNER sqldata;
GRANT ALL ON DATABASE guacamole_db TO sqldata;
exit

使用guacamole-client生成guacamole_db的初始化脚本

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgresql > initdb.sql

将生成的sql脚本复制到容器内并执行

docker cp initdb.sql guacamole-postgres:/
docker exec -it guacamole-postgres psql -U sqldata -d guacamole_db
\i /initdb.sql
exit
rm -f initdb.sql

其他注意项

postgres数据库的持久化处理

官方默认文档中没有配置docker的映射文件夹,这将导致升级容器版本时容易丢失数据

  1. 添加环境参数:PGDATA: /var/lib/postgresql/data/pgdata

  2. 添加存储映射:/your-path/data:/var/lib/postgresql/data

降低用户认证时的加密级别

在最新的postgresql版本中,需要更改postgresql pg_hba.conf的配置,降低用户认证时的加密级别,与guacamole-client匹配

docker cp guacamole-postgres:/var/lib/postgresql/data/pgdata/pg_hba.conf ./
vim pg_hba.conf

更改文件最后一行 host all all all scram-sha-256 为 host all all all trust

docker cp pg_hba.conf guacamole-postgres:/var/lib/postgresql/data/pgdata/
rm -f pg_hba.conf

必须注意:到这里不要重启容器,不然的话可能会因为pg_hba.conf文件没有权限而不能启动

docker exec -it guacamole-postgres chown postgres:postgres /var/lib/postgresql/data/pgdata/pg_hba.conf
docker restart guacamole-postgres

登录

登录地址:http://youip:8080/guacamole

默认密码:guacadmin/guacadmin【建议修改密码】

一些使用帮助

添加RDP远程桌面时记得勾选忽略服务器证书,要不然连接不上

其他的则按照自己需求填写。

22 个赞

牛逼~

2 个赞

厉害

2 个赞

我用next-terminal

4 个赞

next-terminal更加专业一点,权限可以更细致化 :roll_eyes:

2 个赞

哈哈 这个东西在pnetlab里面见到过

3 个赞

这东西可以在浏览器用rdp远程吗????服务端能不能部署到serve00

2 个赞

server00应该只是静态页面吧,这个是需要用容器来部署的。

2 个赞

佬,我来点赞了

2 个赞

不会搞 过来帮我搭建一下

2 个赞

门口在右边–>

2 个赞

佬,我遇到个问题,为啥我弄好了以后不能连接我本地PC(宿主机)的rdp,我用的dockerdesktop,一直显示等待连接,我连接局域网中其他设备都可以,其他设备rdp也可以,就是不能连自己

你配置IP的时候是怎么配的?你试试使用127.0.0.1看看

我试了localhost和127.0.0.1还有本地nat的ip都不行,都是一样显示等待连接,然后guacd日志也没报错还打印有一个用户连接了,但是浏览器中就是等待连接中,是不是不能自己连接自己

还真没试过哦。你本地防火墙关了没有?

真是神奇了,那些剪贴板选项还有音频不能动,只能默认,否则就是连接中,不太明白为啥,大佬有没有好用的vps可以做frps,我弄好以后不是一般的卡,还不稳定

这个是走的架设的服务器流量吧?

阿里云99元小鸡可以帮到你 :smile:但是好像只能续费3年还是4年,可去官网看看他的活动规则

对,服务器搭哪里就走哪里的流量

有链接吗大佬,不是学生可以么