Apache – Guacamole
Apache Guacamole은 VNC, RDP, SSH 등을 지원하는 웹 기반 원격 데스크탑 솔루션이다. 웹 브라우저 만으로 서버에 접속 기능을 제공하며, 인증 및 권한 관리 기능도 제공하고 있다.
Docker 설치
Apache Guacamole은 Docker Hub를 통해 “guacamole/guacd”, “guacamole/guacamole” 이름으로 이미지를 제공하고 있다.
# docker run –name [DOCKER_NAME] -d guacamole/guacamole
Guacd
Guacd는 백엔드 서버 역할을 수행하는 서버다. 4822포트를 사용하고 있으며, 아래와 같이 서비스를 설치할 수 있다. 다만 주의할 점은, 해당 서버는 일체의 인증 관련 기능을 제공하지 않고, 서비스되고 있기 때문에, 해당 포트의 공개에 신중해야 할 것이다.
되도록 docker 내부에서만 서비스 되도록 설정하고, 외부 포트로 공개하지 않는 것이 좋은 방법일 것이다.
# docker run –name [DOCKER_NAME] -d guacamole/guacd
# docker run –name [DOCKER_NAME] –d -p 4822:4822 guacamole/guacd
Guacamole
Guacamole은 웹 어플리케이션으로 8080 포트를 이용하여 서비스를 제공하고 있다. 또한 Docker 로 구성할 경우 반드시 guacd 먼저 설치하고, 해당 Container와 링크를 정의하여 배치해 주어야 한다.
# docker run –name [DOCKER_NAME] -d -p 8080:8080 –link [GUACAD_NAME]:guacd guacamole/guacamole
수동 정보 입력
만약 Guacad 서버를 링크하지 않거나, 외부 포트를 통해 직접 연결 정보를 입력해야 할 경우, 아래와 같이 환경 변수를 통해 정의해 줄 수 있다.
- GUACD_HOSTNAME : Guacd 호스트 인스턴스 이름
- GUACD_PORT : Guacd 호스트 서비스 포트 이름
# docker run –name [DOCKER_NAME] -e GUACD_HOSTNAME=172.17.42.1 -e GUACD_PORT=4822 -d -p 8080:8080 guacamole/guacamole
MySQL 인증 정보 설정
Guacamole은 프로젝트 웹사이트에서 제공하는 확장 기능을 통해 MySQL, PostgreSQL 또는 SQL Server 데이터베이스를 통한 인증을 지원한다. 인증에 데이터베이스를 사용하면 연결의 부하 분산 그룹과 웹 기반 관리 인터페이스를 사용할 수 있는 기능과 같은 추가 기능이 제공된다.
DB 스크립트 추출 및 테이블 생성
아래 명령을 통해, 인증 DB 생성 스크립트를 추출하고,
# docker run –rm guacamole/guacamole /opt/guacamole/bin/initdb.sh –mysql > initdb.sql
해당 스크립트를 통해, MySQL에 Guacamole 관련 테이블과 정보를 만든다.
Gacamole을 MySQL에 연결
아래와 같이 Guacamole서버를 Link를 통해 DB 접근을 설정하거나,
# docker run –name [DOCKER_NAME] –link [GUACD_NAME]:guacd –link [MYSQL_NAME]:mysql -d -p 8080:8080 guacamole/guacamole
환경 설정 파일을 통해 직접 설정해 줄 수도 있다.
- MYSQL_HOSTNAME: 인증에 사용할 데이터베이스 호스트 네임 (필수)
- MYSQL_PORT: 대상 포트, 입력되지 않으면 기본값이 사용됨 (3306)
# docker run –name [DOCKER_NAME] –link [GUACD_NAME] -e MYSQL_HOSTNAME=[IP] -e MYSQL_PORT=[PORT] -d -p 8080:8080 guacamole/guacamole
위 명령에서는 추가되지 않았지만, 필수적으로 입력해야 하는 정보는 아래와 같다.
- MYSQL_DATABASE: 대상 DB
- MYSQL_USER: 접속 User 이름
- MYSQL_PASSWORD: 접속 패스워드
혹은 선택적으로 아래 변수를 사용할 수도 있다.
- MYSQL_ABSOLUTE_MAX_CONNECTIONS: 최대 연결 수, 기본값 0 (무제한)
- MYSQL_DEFAULT_MAX_CONNECTIONS: 연결 하나에 허용할 최대 동시 연결 수, 기본값 0 (무제한)
- MYSQL_DEFAULT_MAX_GROUP_CONNECTIONS: 연결 그룹 하나에 허용할 최대 동시 연결 수, 기본값 0 (무제한)
- MYSQL_DEFAULT_MAX_CONNECTIONS_PER_USER: 단일 사용자가 Guacamole 연결에 대해 유지할 수 있는 최대 동시 연결 수, 기본값 0 (무제한)
- MYSQL_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER: 한 사용자가 모든 연경 그룹에 유지할 수 있는 최대 동시 연결 수, 기본값 0 (무제한)
- MYSQL_AUTO_CREATE_ACCOUNTS: MySQL 데이터베이스에 없는 계정이 다른 모듈을 통해 성공적으로 인증되면 자동으로 생성되는지 여부. “true”로 설정하면 계정이 자동으로 생성. 그렇지 않으면 기본적으로 계정이 자동으로 생성되지 않으며 MySQL 데이터베이스 확장 프로그램 내에서 다른 모듈로 인증된 사용자에게 권한을 할당하려면 수동으로 만들어야 함.
기타 자세한 세부 설정
기타 자세한 세부 설정은 아래 링크를 참조
https://guacamole.apache.org/doc/gug/guacamole-docker.html
접속 주소 변경 방법
Docker 이미지를 이용하여 설치를 진행하게 되면, 기본적으로 접속 주소가, https://[Address]/guacamole/ 주소로 설정된다.
Nginx Proxy를 통한 설정
아래와 같이 redirect 문구를 통한 주소 변경 요청 설정
rewrite ^/$ /guacamole redirect;
접속 정보 입력
Windows Desktop
Guacamole을 통해 Windows Desktop 원격 접속을 설정하려면 아래와 같이 입력하여 설정하면 된다.
- 계정 정보 Drop Down 버튼을 이용하여 설정으로 이동
- 연결 탭으로 이동
-
새 연결 버튼을 이용하여 연결 정보 입력 창으로 이동하여, 아래와 같이 입력한다.
-
연결 편집
- 이름 : 연결 정보에 대한 이름을 입력함
- 위치 : ROOT 위치에 입력되도록 설정 (혹은 해당 위치를 적절히 변경)
- 프로토콜 : RDP 를 설정
-
매개변수
-
네트워크
- 호스트 이름 : 접속할 연결 호스트 이름을 입력. Guacd가 내부 아이피 대역에 설치되어 있다면, 호스트 이름으로 내부 아이피를 입력하여 연결 정보를 설정할 수 있다.)
- 포트 : 접속 포트로, RDP의 경우는 3389로 입력
-
인증
- 사용자 이름: 사용자의 이름을 입력한다. 만약 Microsoft Account를 사용하고 있을 경우, 이메일을 포함한 전체 계정 정보를 입력한다.
- 패스워드 (옵션): 사용중인 패스워드를 입력하고, 입력하지 않으면 접속 시 다시 한번 묻게 된다.
- 도메인: “MicrosoftAccount”를 입력한다.
- 안전 모드: NLA (네트워크 수준 인증)을 선택
- 서버 인증서 무시: 체크 (활성화)
-
Wake-on-LAN (WoL) – 현재 설정해도 동작하지 않음.
만약 WoL을 통해 접속 전에, PC 전원을 켜서 접속 가능 상태로 설정하려면 아래 설정을 추가한다. (다만, 실행되는 guacd 서비스가 대상 PC와 같은 서브넷으로 묶여야 한다. 자세한 사항은 아래 “Wake on LAN 설정 방법” 참고
- WoL 패킷 전송: 체크 (활성화)
- 원격 호스트 MAC 어드레스: 대상 PC의 맥 주소로 입력되지 않으면 해당 기능이 동작하지 않는다.
- WoL 패킷의 브로드케스트 주소: 기본값은 255.255.255.255 이며, 같은 서브 넷 범위의 모든 대상으로 패킷을 보낸다.
- 호스 부트 대기 시간: WoL을 전송한 후, 접속을 대기할 시간
-
-
Wake on LAN (WoL) 설정 방법
Docker의 Bridge 네트워크는, 내부의 Container들을 가상의 서브넷으로 묶어, NAT 기반으로 네트워크를 제공하는 방식이다. 따라서, 해당 네트워크 상에서 아무리 WoL로 매직 패킷(WoL 신호를 보내 PC를 깨우는데 사용하는 패킷)을 브로드캐스팅 한다고 하더라고, 해당 패킷은 대상에 미치지 못한다.
네트워크 설정
위와 같은 문제를 해결하기 위해서는, 깨울 PC가 존재하는 서브넷 상에서 매직패킷을 브로드캐스팅 할 수 있는 조건을 만들어 줘야 한다.
host 네트워크 사용
Docker는 bridge 네트워크 이외에 host 네트워크를 제공하고 있다. host네트워크는, Host PC의 네트워크 인터페이스를 직접 사용하도록 설정할 수 있다.
- Web Interface를 제공하는 guacd 서비스의 네트워크를 bridge에서 host로 변경한다. 혹은 재 생성한다. 그리고, Guacamole서비스의 접속 정보를 다음과 같이 변경한다.
- 네트워크 링크 guacd를 제거한다.
-
guacamole 서비스의 환경 설정 파일을 다음과 같이 변경한다.
- GUACD_HOSTNAME=[HOST 서버 주소]
- GUACD_PORT=4822
# docker run –name guacamole-guacamole … -e GUACD_HOSTNAME=[HOST 서버 주소] -e GUACD_PORT=4822 … -d –p 8080:8080 guacamole/guacamole
위와 같이 설정하면, 서비스를 제공하는 guacd 서버가 Host 네트워크 서브넷으로 설정되어 대상 서버로 Magic Packet을 보낼 수 있는 구조가 된다.