Guacamole Integration
Lindenberg Software Backup integrates with Apache Guacamole. Among other protocols and scenarios, Guacamole provides a gateway between HTML and MP4 (video) used in a browser to a virtual machine using Remote Desktop Protocol (RDP). Lindenberg Software provides an authentication extension that integrates Guacamole and Lindenberg Software Backup. In the diagramm below, the left shows a standard Guacamole setup. Even though most users don't consider it an extension, the standard database or LDAP implementation are extensions that are provided with Guacamole. Thanks to the extension mechanism,Lindenberg Software Backup just adds another extension that delegates most operations to Lindenberg Software Backup.- Docker on Linux on Virtual Machine
- Docker on Linux on WSL2
- Docker on Windows without WSL2
- Docker on Windows on WSL2
Installation
| Scenario | ||||
| 1 | 2 | 3 | 4 | Installation Step |
| m | o | o | o | Installation Windows Hyper-V |
| o | o | o | Windows Virtual Machine (optional, see above)
| |
| m | Installation of a Linux Virtual Machine
| |||
| m | m | Window Subsytem for Linux 2 (WSL2)
| ||
| m | m | Docker and Docker-Compose for Linux
| ||
| m | m | Docker for Windows
| ||
| m | Configure Docker for Windows
| |||
Configuration
Note: Guacamole 1.1 is out, but does not work because of GUACAMOLE-952. The issue is fixed in 1.2, which however is not yet released. Therefore the following uses Guacamole 1.0. Go to a directory where you want to put your configuration. On Linux the recommendation is /opt/guacamole, on Windows you can do this anywhere within the shared drive above (you won't be using it productively anyway). You need a total of four configuration files, which are explained in the following.- The solution is composed out of three containers, and that is described in docker-compose.yml:
Note that the nginx paths for certificates and logs are commented out, as you very likely need to adjust the certificate path and the paths fail to work on Windows.
version: "2" networks: guacnw: services: guacd: image: "guacamole/guacd:1.0.0" container_name: "guacd" restart: always networks: - guacnw guacamole: container_name: "guacamole" build: context: . dockerfile: guac.ext.backup restart: always networks: - guacnw depends_on: - "guacd" ports: - "127.0.0.1:8080:8080" # - "8080:8080" environment: - GUACAMOLE_HOME=/etc/guacamole - GUACD_HOSTNAME=guacd - GUACD_PORT=4822 links: - guacd nginx: image: "nginx" container_name: "nginx" restart: always networks: - guacnw volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro # - /etc/letsencrypt:/etc/letsencrypt:ro # - /var/logs/nginx:/var/log/nginx ports: - "443:443" links: - guacamole
- The Guacamole application needs to be extended. This is expressed by a "docker file" or container build instructions in guac.ext.backup:
FROM guacamole/guacamole:1.0.0 ADD https://software.lindenberg.one/backup/downloads/guacamole-lindenberg-backup-1.0.0.jar /etc/guacamole/extensions/ COPY guacamole.properties /etc/guacamole/
- The Guacamole application needs to be configured. This is done via guacamole.properties (which unfortuantely has to also be included into the container build above):
hyperv-url-connections=https://your-backup-server-URL hyperv-user=Guacamole-User hyperv-domain=Guacamole-Domain hyperv-password=Guacamole-Password hyperv-security=nla hyperv-ignore-cert=true hyperv-server-layout=de-de-qwertz console=false console-audio=false
You have to update the URL and the credentials used to connect to Hyper-V. Recommendation is to create a dedicated user on Windows that is member of the Hyper-V-Admin group. - The webserver nginx needs to be configured. This is done via nginx.conf:
You have to update this configuration to match your own hostname and certificates.
events { worker_connections 768; # multi_accept on; } http { access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log debug; server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/guacamole2.lindenberg.one/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/guacamole2.lindenberg.one/privkey.pem; server_name guacamole2.lindenberg.one; location / { proxy_buffering off; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; access_log off; proxy_pass http://guacamole:8080; } } }
Running
- Go to the directory you used for configuration and run the command: "docker-compose up --build -d". Then connect to https://<yourguacamolehostname>/guacamole. When running Docker for Windows, you can also connect to http://localhost:8080/guacamole using a browser on the same virtual machine.
- The user interface will show all backups grouped by users and disk. Selecting one of them is equivalent to selecting them in the user interface of Lindenberg Software Backup.
- In order to stop use "docker-compose down".
Trouble Shooting
Obviously I cannot provide lots of instructions withoug knowing what went wrong. Nevertheless two tips:- Console output of a specific container is available via "docker logs <container>"
- You can run a command inside a container via "docker exec -it <container> echo Hello from container!"
Alternatives
- Instead of running nginx as a docker container you might want to use Internet Information Services (IIS) as a reverse proxy server that connects to the guacamole port (there is no advantage of proxying twice). One reason could be that you are more familiar with Windows administration, and know how to reuse the same server certificates then. This option is available whether you run Docker for Windows or move to Linux, but be sure to run IIS and docker on the same physical system, as otherwise someone can sniff credentials on the local area network, and open the guacamole part in your docker-compose.yml only to the specific static IP-address of the system running the IIS.