안녕하세요! 스코리아입니다.
오늘은 Guacamole을 이용하여 웹에서 원격 RDP를 접속하는 방법에 대해서 알아보겠습니다.
Docker를 이용한 설치를 진행할 예정입니다.

Guacamole 이란?
Guacamole은 브라우저만 있으면 어디서나 RDP, VNC, SSH에 접속할 수 있게 하는 클라이언트리스 솔루션입니다. Apache 기반이며, 아래와 같은 특징이 있습니다.
- 설치가 필요 없는 웹 기반 원격 접속
- HTML5로 동작하므로, Chrome, Edge, Safari 등 아무 브라우저에서 사용 가능
- RDP / VNC / SSH 동시에 지원
- 사용자, 연결 관리 UI 제공
- Docker로 배포하면 간단하게 구성 가능

Guacamole을 선택한 이유
일반적인 원격 프로그램 대신 제가 웹 기반의 Guacamole 솔루션을 택한 데에는 이유가 존재합니다.
AI 관련한 개발을 군대 사지방에서 시작해보려고 하는데, 컴퓨터 성능이 워낙 안 좋다 보니 로컬에서 LLM 모델을 돌릴 수가 없었습니다.
첫 번째 옵션으로는 GPU 컴퓨터를 대여하는 것이었는데, 찾다 보니 가격이 너무 비쌌습니다.
그리하여 집에 있는 나름 고사양인 저의 컴퓨터를 원격으로 연결하여 LLM을 돌리려고 생각하였습니다.
하지만 군대 사지방에 있는 컴퓨터는 팀뷰어, 애니데스크와 같은 원격 프로그램 설치가 모두 막혀 있었기 때문에 웹에서 원격으로 접속 가능한 솔루션이 필요했습니다.
그래서 결정한 게 Guacamole이라는 소프트웨어입니다.
참고로 Guacamole을 돌리는 서버는 그래픽카드가 필요 없으며, RAM(8GB 이상) 및 네트워크 속도가 중요합니다.
Guacamole 세팅 구상도
우선 Guacamole은 웹 기반의 원격 접속을 도와주는 프로그램이기 때문에, 인터넷 속도에 매우 민감합니다.
그렇기 때문에 내부 아이피보다 외부 아이피인 컴퓨터로 RDP를 접속하려 한다면 Ping 차이로 인한 속도가 많이 저하될 것을 예상했습니다.
그래서 저는 같은 공유기 안에 '시놀로지 NAS 서버'(Guacamole 서버)와 '윈도우 11 컴퓨터'(RDP로 연결할)를 두려고 합니다.

핵심은 시놀로지 NAS 안에 있는 Guacamole 서버에서 윈도우11 컴퓨터로 RDP 원격 연결 시, 내부 IP를 통해 연결된다는 것입니다. 이로써 원격 연결 시 지연을 최소화하고 프레임 드랍을 많이 줄일 수 있습니다.
Docker를 이용한 Guacamole 설치방법
Docker 구성 요소는 다음과 같습니다.
- guacd: 프로토콜(RDP/VNC/SSH)을 실제로 처리하는 데몬
- gucamole: 웹 UI
- guac-mysql: 사용자, 연결 정보 저장 (DB)
1. 설치 디렉터리 만들기
Guacamole 관련 파일을 보관할 디렉터리를 먼저 생성하겠습니다.
mkdir -p /volume1/docker/guacamole
cd /volume1/docker/guacamole다음으로 init과 mysql 디렉터리를 생성합니다. 각각 Mysql 스키마(SQL 파일)를 넣기 위한 경로와 DB 관련 데이터를 넣기 위한 경로입니다.
mkdir -p init
mkdir -p mysql
2. Guacamole JDBC 인증 모듈 다운로드
Guacamole은 기본적으로 사용자를 저장하지 않기 때문에 MySQL + JDBC 인증 모듈을 함께 설치해야 합니다.
아래 명령으로 JDBC 모듈을 다운로드합니다.
cd /volume1/docker/guacamole/init
wget --content-disposition \ https://downloads.apache.org/guacamole/1.5.5/binary/guacamole-auth-jdbc-1.5.5.tar.gz압축을 풀고 MySQL 스키마 파일을 init 폴더로 복사합니다.
tar -xzf guacamole-auth-jdbc-1.5.5.tar.gz
cp guacamole-auth-jdbc-1.5.5/mysql/schema/*.sql .이 폴더에는 다음과 같은 SQL 파일들이 들어 있어야 합니다:
001-create-schema.sql
002-create-admin-user.sql
...이 파일들은 MySQL 컨테이너가 처음 실행될 때 자동으로 실행됩니다.
3. docker-compose.yml 작성하기
다시 guacamole 폴더로 이동하여 docker-compose.yml 파일을 생성하여 수정해 보도록 합시다.
cd /volume1/docker/guacamole
vi docker-compose.yml
docker-compose.yml 파일에는 아래와 같은 내용이 들어갑니다.
version: '3.8'
services:
mysql:
image: mysql:8.4
container_name: guac-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 루트비밀번호입력
MYSQL_DATABASE: guacdb
MYSQL_USER: guacuser
MYSQL_PASSWORD: 유저비밀번호입력
volumes:
- ./mysql:/var/lib/mysql
- ./init:/docker-entrypoint-initdb.d
networks:
- guacnet
guacd:
image: guacamole/guacd:1.5.5
container_name: guacd
restart: unless-stopped
networks:
- guacnet
guacamole:
image: guacamole/guacamole:1.5.5
container_name: guacamole
restart: unless-stopped
depends_on:
- guacd
- mysql
ports:
- "8094:8080"
environment:
GUACD_HOSTNAME: guacd
MYSQL_HOSTNAME: mysql
MYSQL_PORT: 3306
MYSQL_DATABASE: guacdb
MYSQL_USER: guacuser
MYSQL_PASSWORD: 유저비밀번호입력
networks:
- guacnet
networks:
guacnet:
driver: bridge여기서 수정해야 할 부분은 mysql DB의 루트비밀번호와 유저비밀번호 부분입니다.
- 포트의 경우 기본 웹 포트가 8080인데, 저는 이미 다른 곳에서 8080 포트를 쓰고 있기 때문에 8094 포트를 사용하였습니다.
- /docker-entrypoint-initdb.d 경로에 넣은 SQL 파일들은 MySQL 초기 생성 시 자동 실행됩니다.
- guac-mysql, guacd, gucamole 3개의 컨테이너가 모두 guacnet라는 네트워크에 bridge 상태로 묶여 있기 때문에 서로 네트워크 통신이 가능합니다.
4. Guacamole 컨테이너 실행
컨테이너 guacd, guac-mysql, guacamole 3개를 모두 실행하는 명령어는 다음과 같습니다.
docker-compose up -d
5. 데이터베이스 생성 확인
MySQL 스키마가 정상적으로 적용되었는지 아래 명령으로 확인 가능합니다.
docker exec -it guac-mysql mysql -u root -p루트 비밀번호를 입력하여 MySQL 콘솔로 진입합니다.
SHOW DATABASES;
USE guacdb;
SHOW TABLES;guacdb 데이터베이스 내부에 있는 테이블을 보여주는 명령어입니다.
user, connection, connection_parameter 등 20개 가까운 테이블이 보이면 성공입니다.
만약 DB 스키마가 정상적으로 적용되지 않았을 경우 아래와 같은 방법으로 재설치하면 됩니다.
docker-compose down
rm -rf /volume1/docker/guacamole/mysql/*
docker-compose up -d
Guacamole 초기 접속 및 세팅
Nginx Proxy Manager(NPM)이 설치되어 있으신 분들은 도메인으로 바로 접속이 가능하게끔 세팅이 가능합니다.

NPM에서 프록시 호스트를 위 사진과 같이 생성하시면 됩니다. Domain Names는 원하는 도메인주소로 설정하시고, Websockets Support는 켜주세요. SSL 섹션에서 SSL도 허용해 주시면 좋습니다.
만약 NPM이 없으신 분들은 http://서버아이피:8094/guacamole 로 접속하시면 되고, NPM 세팅이 완료되신 분은 '프록시도메인/guacamole' 로 접속하시면 됩니다.
초기 아이디/비밀번호는 다음과 같습니다.
- 아이디: guacadmin
- 비밀번호: guacadmin
보안상 초기 비밀번호는 즉시 변경해주어야 합니다.
로그인 후 우측 상단에 자신의 아이디를 클릭하여 세팅으로 들어갑니다. 사용자를 클릭하고 guacadmin을 클릭합니다.

새로운 비밀번호로 변경이 가능합니다. 저의 경우에는 guacadmin 계정을 아예 삭제시키고 새로운 계정을 만들었습니다.
윈도우 PC로 원격 RDP 연결을 위한 세팅
윈도우 11 PC에서 원격 RDP 연결이 활성화되어 있어야 합니다. 활성화하는 방법은 다음과 같습니다.
참고로 저는 Microsoft 계정이 연결된 윈도우11 PC입니다.
- 설정 -> 시스템 -> 원격데스크톱 -> 원격데스크톱 켬
- 설정 -> 시스템 -> 원격데스크톱 -> 원격데스크톱 토클 -> '디바이스에서 네트워크 수준 인증을 사용하여 연결하도록 요구' 끔
- 설정 -> 시스템 -> 원격데스크톱 -> 원격데스크톱 사용자 -> 추가 -> 개체 이름에 Microsoft 이메일주소 입력 후 확인 -> 확인
만약 윈도우 PC에 일반 암호가 설정되어 있지 않은 경우 일반 암호를 필히 설정해야 합니다. (PIN과는 다릅니다)
- 설정 -> 계정 -> 로그인 옵션 -> '보안을 강화하려면 이 장치의 Microsoft 계정에 Windows Hello 로그인만 허용함' -> 해제
- 설정 -> 계정 -> 로그인 옵션 -> 암호 -> 암호설정
이후 CMD 창을 열어서 ipconfig을 입력한 후에 컴퓨터의 내부 IPv4 주소를 확인합니다.

이제 Guacamole 웹페이지에서 세팅->연결->새 연결로 들어가서 아래와 같은 정보를 입력합니다.

- 이름: 원하는 컴퓨터 이름 입력
- 위치: ROOT
- 프로토콜: RDP

- 네트워크 - 호스트 이름: 접속할 윈도우11 PC의 내부 IP
- 네트워크 - 포트: 3389
- 인증 - 사용자이름: Microsoft 이메일 주소
- 인증 - 패스워드: 설정한 윈도우 일반 암호 (Microsoft 계정 암호)
- 인증 - 도메인: MicrosoftAccount (이거 입력 안 하면 접속 안됨!! 주의!!)
- 인증 - 안전 모드: Any
- 인증 - 서버 인증서 무시: 체크
Guacamole에서 윈도우PC RDP 연결 테스트
Guacamole 웹페이지의 홈으로 와서 방금 만든 연결 이름을 클릭해 봅시다.

정상적으로 원격이 연결되었습니다!

이상으로 Guacamole로 웹에서 원격 RDP를 접속하는 방법을 Docker와 내부망을 이용해서 구축해 보았습니다.
테스트 결과 속도도 잘 나와주어서 큰 프레임 드랍이나 딜레이는 없었습니다.
읽어주셔서 감사합니다.