IT

RustDesk 자체 서버 구축: Linux Docker와 Proxmox VE LXC, 클라이언트 설정까지

hexcode 2026. 6. 13. 16:14
반응형

 

RustDesk Self-hosted Guide

RustDesk 자체 서버 구축: Linux Docker와 Proxmox VE LXC 두 가지 방법

집 안에서는 빠른 P2P 직결을 쓰고, 밖에서는 내 서버를 중계 게이트웨이로 쓰는 사설 원격 제어 구성 정리.

Linux Docker Proxmox VE LXC hbbs / hbbr macOS / Windows / Linux Client
이번 글의 구성
  1. 왜 굳이 사설 RustDesk인가
  2. RustDesk 자체 서버가 하는 일
  3. 선택 A: Linux 서버에 Docker Compose로 설치
  4. 선택 B: Proxmox VE에 LXC로 설치
  5. 공통 포트포워딩과 보안 키 확인
  6. Windows, macOS, Linux 클라이언트 설정
  7. 연결 테스트와 단축키 팁

1. 왜 굳이 사설 RustDesk인가

내가 RustDesk를 사설 서버로 쓰려는 가장 큰 이유는 단순합니다. Mac, Windows, Linux를 섞어 쓰는 환경에서 기존 원격 제어 방식들이 하나씩 애매했기 때문입니다.

Mac VNC의 한계

Apple VNC는 Apple 기기끼리는 자체 코덱 덕분에 꽤 빠릅니다. 하지만 Mac에서 Windows나 Linux로 넘어가면 별도 VNC 클라이언트가 필요하고, 체감 속도도 상당히 느려집니다.

Windows ↔ Linux 연결의 번거로움

Windows와 Linux를 연결하려면 RDP류 구성을 따로 만져야 합니다. 특히 Wayland 환경의 RDP는 다루기 까다롭고, Remmina는 UI가 투박한 데다 설정도 복잡하게 느껴집니다.

TeamViewer나 Chrome Remote Desktop 같은 서비스는 편하지만 중계 서버가 외부에 있습니다. 그래서 속도는 외부 서버 상태와 네트워크 경로에 영향을 받고, 개인 장비를 계속 맡겨도 되는지에 대한 보안 걱정도 남습니다.

RustDesk 자체 서버는 이 불편함을 줄이기 위한 선택입니다. 집 안에서는 내부망 속도로 최대한 직접 붙고, 집 밖에서는 내가 만든 서버를 중계점으로 사용합니다. 즉, 이종 OS 원격 제어를 하나의 클라이언트 경험으로 묶으면서도, 중계 지점을 내 쪽으로 가져오는 구성이 됩니다.

2. RustDesk 자체 서버가 하는 일

RustDesk를 그냥 쓰면 기본 공용 서버를 통해 장치 ID를 찾고 연결을 시도합니다. 자체 서버를 세우면 이 역할을 내 집이나 내 서버 안으로 가져옵니다. 외부 기업의 중계 서버에 기대지 않고, 내 서버가 ID 서버와 릴레이 서버 역할을 맡는 구조입니다.

RustDesk 서버는 크게 두 개의 서비스로 나뉩니다. hbbs는 장치가 어디에 있는지 찾아주는 ID 서버이고, hbbr은 P2P 직결이 실패했을 때 화면과 입력 데이터를 대신 중계하는 릴레이 서버입니다.

집 안에서 두 기기가 같은 내부망에 있으면 가능하면 P2P로 직접 붙고, 외부망이나 NAT 환경 때문에 직결이 어려우면 내 RustDesk 서버를 통해 릴레이됩니다.

3. 선택 A: Linux Docker Compose 설치

일반 Ubuntu, Debian, 미니 PC, NAS형 리눅스 서버라면 Docker Compose 방식이 가장 관리하기 편합니다. 서버 데이터는 별도 폴더에 남기고, 컨테이너만 쉽게 올리고 내릴 수 있기 때문입니다.

2-1. 작업 폴더 만들기

mkdir -p ~/rustdesk-server/data
cd ~/rustdesk-server

2-2. compose.yml 작성

아래 예시에서 192.168.0.15는 실제 Linux 서버의 내부 IP 또는 DDNS 주소로 바꿔야 합니다. 문서 원문처럼 -k _ 옵션을 넣으면 클라이언트가 공개키를 입력해야 서버를 사용할 수 있게 됩니다.

services:
  hbbs:
    container_name: rustdesk-hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r 192.168.0.15:21117 -k _
    volumes:
      - ./data:/root
    ports:
      - "21115:21115"
      - "21116:21116"
      - "21116:21116/udp"
      - "21118:21118"
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: rustdesk-hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr -k _
    volumes:
      - ./data:/root
    ports:
      - "21117:21117"
      - "21119:21119"
    restart: unless-stopped
RustDesk 공식 문서에서는 Linux Docker 환경에서 network_mode: "host" 방식도 권장합니다. 포트 매핑 때문에 헷갈리면 host network 방식이 더 단순하고, 공유 서버나 NAS처럼 포트를 명확히 나누고 싶으면 위처럼 포트 매핑 방식으로 운영하면 됩니다.

2-3. 컨테이너 실행

docker compose up -d
docker compose ps

2-4. 공개키 확인

클라이언트 설정에 반드시 들어가는 값입니다. 출력되는 긴 문자열 전체를 복사해 둡니다.

cat data/id_ed25519.pub

4. 선택 B: Proxmox VE LXC 설치

Proxmox VE를 이미 쓰고 있다면 RustDesk 서버를 LXC 컨테이너로 분리해 두는 방식이 깔끔합니다. 원문 문서의 예시는 LXC 내부 IP를 192.168.0.15으로 잡고, 웹 관리자 대시보드는 http://192.168.0.15:21114로 접근하는 구조입니다.

3-1. Proxmox VE Shell에서 LXC 생성

커뮤니티 Helper Script를 쓰는 경우 Proxmox VE Shell에서 RustDesk Server LXC 스크립트를 실행해 컨테이너를 만들 수 있습니다. 실행 전에는 스크립트 내용을 한 번 확인하는 편이 좋습니다.

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/rustdeskserver.sh)"

3-2. LXC IP와 대시보드 확인

LXC 내부 IP 예시

192.168.0.15

웹 관리자 대시보드

http://192.168.0.15:21114

3-3. LXC 콘솔에서 공개키 확인

Proxmox 웹 GUI에서 RustDesk LXC를 선택한 뒤 Console 탭으로 들어가 아래 명령어를 실행합니다.

cat /var/lib/rustdesk-server/id_ed25519.pub

출력되는 긴 문자열이 클라이언트의 Key 항목에 들어갈 공개키입니다. macOS, Windows, Linux 모든 클라이언트에 같은 값을 넣습니다.

3-4. 관리자 비밀번호 초기화

웹 대시보드 로그인이 안 되거나 초기 비밀번호를 모를 때는 LXC 콘솔에서 관리자 비밀번호를 새로 지정합니다.

cd /var/lib/rustdesk-api
rustdesk-api reset-admin-pwd 원하는비밀번호

이후 웹 브라우저에서 http://192.168.0.15:21114로 접속하고, 사용자 이름은 admin, 비밀번호는 방금 설정한 값으로 로그인합니다.

5. 포트포워딩 정리

집 밖에서도 접속하려면 공유기에서 RustDesk 서버 IP로 포트를 넘겨야 합니다. 내부 전용으로만 쓸 거라면 공유기 포트포워딩은 생략할 수 있지만, 외부 접속까지 생각한다면 아래 포트를 확인합니다.

포트 프로토콜 역할 비고
21114 TCP 웹 관리자 대시보드/API 대시보드를 외부에서 볼 때만 신중히 개방
21115 TCP NAT 타입 테스트와 인증 처리 필수
21116 TCP / UDP ID 등록, heartbeat, 홀펀칭 가장 중요. UDP도 필요
21117 TCP 릴레이 서버 hbbr P2P 실패 시 중계
21118 TCP 웹 클라이언트용 WebSocket 웹 클라이언트를 안 쓰면 선택
21119 TCP 릴레이 WebSocket 웹 클라이언트를 안 쓰면 선택
외부 접속용 주소는 공인 IP보다 DDNS 주소를 쓰는 편이 편합니다. 예를 들어 myhome.duckdns.org를 ID 서버와 릴레이 서버 주소로 넣어두면, 집 밖에서도 같은 설정을 계속 쓸 수 있습니다.

6. 클라이언트 설정: Windows, macOS, Linux 공통

서버를 Docker로 만들었든 PVE LXC로 만들었든 클라이언트 설정은 거의 같습니다. 모든 장치에서 RustDesk를 실행한 뒤, 내 ID 옆 메뉴에서 Network 또는 ID/Relay Server 설정으로 들어갑니다.

  1. ID Server: RustDesk 서버 IP 또는 DDNS 주소를 입력합니다. 예: 192.168.0.15 또는 myhome.duckdns.org
  2. Relay Server: 같은 주소를 입력합니다. 비워둬도 추론되는 경우가 있지만, 홈랩에서는 명시해 두는 편이 덜 헷갈립니다.
  3. API Server: OSS 서버라면 보통 비워둡니다. Pro 또는 웹 콘솔 계정 기능을 쓸 때만 입력합니다.
  4. Key: 서버에서 확인한 id_ed25519.pub 문자열 전체를 붙여넣습니다.
  5. Apply를 누른 뒤 메인 화면 하단이 Ready 상태인지 확인합니다.

클라이언트 입력 예제

내부망에서 먼저 테스트한다면 아래처럼 ID 서버릴레이 서버에 RustDesk 서버의 내부 IP를 똑같이 넣습니다. 예시 화면에서는 192.168.0.15를 사용했고, API 서버는 비워두었습니다. 마지막 Key 칸에는 서버에서 복사한 id_ed25519.pub 공개키 전체를 붙여넣으면 됩니다.

RustDesk 클라이언트 네트워크 설정 예제 화면
RustDesk 설정 → 네트워크 → ID/릴레이 서버 입력 예제. 내부 테스트는 서버 내부 IP를 넣고, 외부 접속까지 쓸 때는 DDNS 주소로 바꾸면 됩니다.

macOS가 원격 대상일 때 필수 권한

맥을 제어받는 호스트로 쓸 때는 macOS 보안 권한을 열어줘야 합니다. 시스템 설정 → 개인정보 보호 및 보안에서 RustDesk를 찾아 아래 항목을 허용합니다.

  • 화면 기록(Screen Recording)
  • 손쉬운 사용(Accessibility)
  • 입력 모니터링(Input Monitoring): 복잡한 단축키나 입력 제어가 필요할 때 함께 허용

권한을 바꾼 뒤에는 RustDesk를 완전히 종료했다가 다시 실행해야 정상 적용됩니다.

Linux 뷰어 설치

Linux는 원격을 보는 뷰어 역할이라면 화면 캡처 권한 문제에 덜 걸립니다. Ubuntu/Debian 계열은 공식 릴리즈의 .deb 패키지를 받아 설치하거나, 배포판과 무관하게 Flatpak/AppImage를 사용할 수 있습니다.

sudo apt update
sudo apt install ./rustdesk-*.deb
flatpak install flathub com.rustdesk.RustDesk

7. 연결 테스트와 단축키 팁

제어받을 컴퓨터의 RustDesk 화면에 표시되는 9자리 ID를 확인한 뒤, 제어할 컴퓨터의 원격 데스크톱 입력 칸에 그 ID를 넣고 연결합니다. 비밀번호를 입력하거나 상대방 화면에서 승인을 누르면 세션이 열립니다.

상시 접속할 장비라면 원격 대상 장치에서 Permanent Password를 설정해 두면 매번 바뀌는 임시 비밀번호를 확인할 필요가 없습니다.

Linux 또는 Windows 키보드에서 맥을 제어할 때는 보통 Win/Super 키가 macOS의 Command 키처럼 동작합니다. 예를 들어 Linux 뷰어에서 Win + C는 맥 호스트에서 Cmd + C 복사로 전달됩니다.

손에 안 맞으면 RustDesk 연결 중 상단 툴바의 키보드 관련 옵션에서 Ctrl과 Command 매핑을 조정해 쓰면 됩니다.

마무리 체크리스트

  • 서버에서 hbbs, hbbr가 둘 다 실행 중인지 확인
  • 클라이언트에 ID Server, Relay Server, Key가 같은 서버 기준으로 들어갔는지 확인
  • 외부 접속이 안 되면 21116 UDP 포트포워딩이 빠졌는지 먼저 확인
  • 맥 화면이 안 보이면 화면 기록 권한, 마우스/키보드가 안 먹으면 손쉬운 사용 권한 확인
  • 공개키를 새로 만들거나 data 폴더를 바꾸면 모든 클라이언트의 Key도 다시 갱신
반응형