KASM has the Docker Images of the GUI services they use with their "Work Space". I am interested only in one of them: Desktop but i suppose they all function more ore less the same. I made this Docker Compose to try and spin it up:
services:
kasmweb:
image: kasmweb/desktop:1.15.0-rolling-weekly
container_name: kasmweb
ports:
- 6901:6901
stdin_open: true
tty: true
shm_size: '2gb'
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
devices:
- /dev/dri:/dev/dri
env_file: /dockerfiles/kasmweb.env
networks:
- public
networks:
public:
external: true
It does run with errors related to being in Stand Alone and not connected to KASM Workspace. One Environment variable they mention in the documentation is VNC_PW=password
which in turn is used in Basic HTTP Authentication i assume. Values were not changed from default:
User : kasm_user
Password: password
Going to https://server-host:6901 will get you to the Desktop GUI in your browser and it will work smoothly:
Because I like to secure my services I disabled the ports so the service is accessed only through NPM and enable Websockets for the Proxy Host. You will get again to the HTTP Authentication but even with correct cridentials it will error out:
2024-10-17 10:41:04,174 [INFO] websocket 8: got client connection from 172.19.0.15
2024-10-17 10:41:04,186 [DEBUG] websocket 8: using SSL socket
2024-10-17 10:41:04,195 [DEBUG] websocket 8: X-Forwarded-For ip '192.168.20.59'
2024-10-17 10:41:04,195 [INFO] websocket 8: Authentication attempt failed, BasicAuth required, but client didn't send any
2024-10-17 10:41:04,195 [INFO] websocket 8: 172.19.0.15 192.168.20.59 - "GET / HTTP/1.1" 401 158
2024-10-17 10:41:04,195 [DEBUG] websocket 8: No connection after handshake
2024-10-17 10:41:04,195 [DEBUG] websocket 8: handler exit
For some reason NPM is not forwarding the cridentials to the KASM Host. So i added this to NPM custom configurations:
location / {
proxy_pass https://kasmweb:6901;
proxy_set_header Authorization "Basic a2FzbV91c2VyOnBhc3N3b3Jk";
proxy_pass_header Authorization;
}
The error on KASM container is as following:
2024-10-17 13:44:45,623 [INFO] websocket 56: got client connection from 172.19.0.15
2024-10-17 13:44:45,634 [DEBUG] websocket 56: using SSL socket
2024-10-17 13:44:45,634 [DEBUG] websocket 56: X-Forwarded-For ip '192.168.20.59'
2024-10-17 13:44:45,639 [DEBUG] websocket 56: BasicAuth matched
2024-10-17 13:44:45,639 [DEBUG] websocket 56: Invalid WS request, maybe a HTTP one
2024-10-17 13:44:45,639 [DEBUG] websocket 56: Requested file '/index.html'
2024-10-17 13:44:45,640 [INFO] websocket 56: 172.19.0.15 192.168.20.59 kasm_user "GET /index.html HTTP/1.1" 200 24135
2024-10-17 13:44:45,640 [DEBUG] websocket 56: No connection after handshake
2024-10-17 13:44:45,640 [DEBUG] websocket 56: handler exit
So Authentication is working but Websockets still not working. Websockets function is enabled in NPM. Additionally I did try the following which gave the same error:
location / {
proxy_pass https://kasmweb:6901;
proxy_set_header Authorization "Basic a2FzbV91c2VyOnBhc3N3b3Jk";
proxy_pass_header Authorization;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
}
My Goal is to run Linux Desktop Web GUI with Authentik Reverse Proxy Authentication as sand box.
How can I resolve this WS error and access KASM service with NPM?
2
Answers
Thanks to this discussion, this worked for Nginx proxy Manager and it connects imediatly. Authentik changed their configurations to include websockets and that broke the whole thing! reverting back to older configuration style and including the headers from above fixed the connection:
The issue with Authentik is with their new NGINX Websocket configurations. removing them and adding ones from the previus comment fixed it:
I can’t make it work. I am doing something wrong but I don’t know what.
I also want to use a stand-alone kasm docker behind nginx -> https://192.168.1.245:6901/
What do I have to enter in NPM (nginx)?
This is not working: