diff --git a/content/self-host/_index.ko.md b/content/self-host/_index.ko.md new file mode 100644 index 00000000..24f80fe8 --- /dev/null +++ b/content/self-host/_index.ko.md @@ -0,0 +1,57 @@ +--- +title: 셀프호스팅 +description: "자신만의 RustDesk 서버를 자체 호스팅하는 방법을 알아보세요. 안전한 원격 데스크톱 접속을 위한 RustDesk 서버 인프라의 설치, 구성 및 배포를 다룬 완벽한 가이드입니다." +keywords: ["rustdesk self-host", "rustdesk server", "remote desktop server", "self-hosting guide", "rustdesk installation", "hbbs hbbr", "rustdesk pro server"] +weight: 5 +pre: "2. " +--- + +RustDesk를 셀프호스팅하면 자신의 ID와 릴레이 인프라를 제어하고, 관리하는 시스템에 배포 데이터를 유지하며, 네트워크 및 규정 준수 요구사항에 맞게 원격 접속을 최적화할 수 있습니다. + +지원은 OSS용 [Discord](https://discord.com/invite/nDceKgxnkV) 및 Pro용 [email](mailto:support@rustdesk.com)를 통해 제공됩니다. + +## 어떤 RustDesk 서버를 선택해야 하나요? + +| 옵션 | 가장 적합한 사용자 | 제공되는 내용 | +| --- | --- | --- | +| [RustDesk Server OSS](/docs/ko/self-host/rustdesk-server-oss/) | 무료 오픈소스 셀프호스팅 백엔드를 원하는 개인 및 팀 | `hbbs` 및 `hbbr`, 커뮤니티 지원, 수동 배포 및 구성 | +| [RustDesk Server Pro](/docs/ko/self-host/rustdesk-server-pro/) | 중앙 집중식 관리와 엔터프라이즈 기능이 필요한 기업 | 웹 콘솔, API, OIDC, LDAP, 2FA, 디바이스 관리, 접근 제어 및 멀티 릴레이 관리 | + +## 자체 호스팅 서버는 어떻게 작동하나요? + +기술적으로 두 개의 실행 파일(서버)이 있습니다: + +- `hbbs` - RustDesk ID(랜드버스/신호) 서버, TCP(`21114` - Pro 전용 HTTP용, `21115`, `21116`, `21118` 웹소켓용) 및 UDP(`21116`)에서 수신 대기 +- `hbbr` - RustDesk 릴레이 서버, TCP(`21117`, `21119` 웹소켓용)에서 수신 대기 + +설치 스크립트 / Docker 컴포즈 / deb를 통해 설치할 경우, 두 서비스가 모두 설치됩니다. + +다음은 [그림](https://github.com/rustdesk/rustdesk/wiki/How-does-RustDesk-work%3F)으로 RustDesk 클라이언트가 `hbbr` / `hbbs`와 어떻게 통신하는지 보여줍니다. + +RustDesk가 컴퓨터에서 실행되는 한, 해당 컴퓨터는 지속적으로 ID 서버(`hbbs`)에 핑을 보내 현재 IP 주소와 포트를 알려줍니다. + +컴퓨터 A에서 컴퓨터 B로 연결을 시작하면, 컴퓨터 A는 ID 서버에 접속해 컴퓨터 B와의 통신을 요청합니다. + +이후 ID 서버는 홀 펀칭을 사용해 A와 B를 직접 연결하려고 시도합니다. + +홀 펀칭이 실패하면 A는 릴레이 서버(`hbbr`)를 통해 B와 통신합니다. + +대부분의 경우 홀 펀칭은 성공하며, 릴레이 서버는 전혀 사용되지 않습니다. + +다음은 [Should you self-host a rustdesk server?](https://www.reddit.com/r/rustdesk/comments/1cr8kfv/should_you_selfhost_a_rustdesk_server/)에 대한 논의입니다. + +## 필요 포트 + +RustDesk 서버 자체 호스팅에 필요한 포트는 주로 귀하의 환경과 RustDesk로 하고자 하는 작업에 따라 달라집니다. 문서 전반에 걸쳐 표시된 예제에서는 일반적으로 모든 포트가 열리는 것이 권장됩니다. + +핵심 포트: \ +TCP `21114-21119` \ +UDP `21116` + +위의 `21115-21117`는 RustDesk가 작동하는 데 필요한 최소한의 포트이며, 이들은 신호 및 릴레이 포트와 NAT 트래버스를 처리합니다. + +TCP 포트 `21118` 및 `21119`는 [RustDesk Web Client](https://rustdesk.com/web/)의 웹소켓 포트이며, HTTPS를 지원하려면 역방향 프록시가 필요합니다. 이 [sample Nginx configuration](/docs/ko/self-host/rustdesk-server-pro/faq/#8-add-websocket-secure-wss-support-for-the-id-server-and-relay-server-to-enable-secure-communication-for-the-web-client)를 참조하십시오. + +SSL 프록시가 없는 Pro 사용자의 경우 API가 작동하려면 TCP 포트 `21114`를 열어야 하며, 대신 SSL 프록시를 사용하여 TCP 포트 `443`를 열어야 합니다. + +{{% children depth="4" showhidden="true" %}} \ No newline at end of file diff --git a/content/self-host/client-configuration/_index.ko.md b/content/self-host/client-configuration/_index.ko.md new file mode 100644 index 00000000..0429992d --- /dev/null +++ b/content/self-host/client-configuration/_index.ko.md @@ -0,0 +1,104 @@ +--- +title: 클라이언트 구성 +description: "셀프 호스팅 서버용 RustDesk 클라이언트를 구성하세요. 브랜드 앱에 로고를 포함한 사용자 지정 클라이언트(Custom Client) 생성기(Pro), 수동 구성, 설정 가져오기/내보내기 및 기업용 배포 전략과 같은 기능을 제공합니다." +keywords: ["rustdesk client configuration", "custom client generator", "rustdesk branded client", "rustdesk white label", "rustdesk enterprise deployment", "rustdesk client setup", "custom rustdesk app", "rustdesk pro client", "rustdesk configuration management", "rustdesk corporate branding"] +weight: 300 +pre: "2.3. " +--- + +## 자체 호스팅 서버용 RustDesk 클라이언트를 구성하는 가장 좋은 방법은 무엇인가요? + +최적의 구성 방법은 관리하는 디바이스 수와 RustDesk Server Pro를 사용하는지 여부에 따라 다릅니다. Pro 배포의 경우, 사용자 지정 클라이언트 생성기가 일반적으로 최선의 옵션입니다. 이는 서버 설정과 브랜딩을 미리 로드하기 때문입니다. 소규모 또는 오픈소스 배포의 경우, 수동 구성, 가져오기/내보내기 또는 스크립트 기반 배포가 일반적으로 더 빠릅니다. + +## 어떤 클라이언트 구성 방법을 선택해야 하나요? + +| 방법 | 최적의 사용처 | 사용하는 이유 | +| --- | --- | --- | +| 사용자 지정 클라이언트 생성기 | RustDesk Server Pro 팀 | 서버 설정, 브랜딩 및 서명 워크플로우가 포함된 사전 구성된 클라이언트를 생성합니다 | +| 수동 구성 | 테스트 및 소규모 배포 | 몇몇 클라이언트를 자체 호스팅 서버에 연결하는 가장 빠른 방법 | +| 가져오기 또는 내보내기 | 이미 검증된 설정 재사용 | 동일한 서버 설정을 한 클라이언트에서 다른 클라이언트로 복사합니다 | +| 배포 스크립트 | RMM, Intune 또는 대규모 롤아웃 | RustDesk를 설치하고 설정을 자동으로 대규모로 적용합니다 | +| `--config` 명령줄 | 관리형 설치 및 자동화 | 스크립트 기반 설정 중 비대화형으로 설정 문자열을 적용합니다 | + +## 대부분의 클라이언트가 필요로 하는 값은 무엇인가요? + +대부분의 자체 호스팅 RustDesk 클라이언트는 몇 가지 값만 필요합니다: + +- `ID Server`: 필수, 보통 귀하의 `hbbs` 호스트 또는 IP +- `Key`: 자체 호스팅 서버와의 암호화된 연결에 필요 +- `API Server`: Pro 계정 로그인 및 웹 콘솔 기능에 필요 +- `Relay Server`: 종종 선택적입니다. RustDesk가 이를 추론할 수 있기 때문이며, 명시적으로 설정하고자 하는 경우를 제외하면 말이죠 + +## 1. 사용자 지정 클라이언트 생성기 (Pro 전용, 기본 플랜 또는 사용자 지정 플랜) + +고유한 이름, 로고, 아이콘, 구성 등을 설정하고 서명할 수 있습니다. + +현재 Windows X64, Mac Arm64 / X64, [Linux](https://twitter.com/rustdesk/status/1788905463678951787), Android Arm 64가 지원됩니다. + +[Video](https://twitter.com/rustdesk/status/1769171628426944539) + +![](/docs/en/self-host/client-configuration/images/custom-client-qs.png) +![](/docs/en/self-host/client-configuration/images/web_console_custom_client_config.jpeg) + +## 2. 수동 구성 + +메인 RustDesk 클라이언트 홈에서 ID 옆에 있는 메뉴 버튼 [ ⋮ ]을 클릭한 다음 네트워크를 클릭하세요. 이제 상승된 권한을 사용해 설정을 잠금 해제하고 `ID`, `Relay`, `API` 및 `Key`를 설정할 수 있습니다. 이 `Key`는 연결 암호화에 사용되는 공개 키이며, Pro 버전 구매 시 제공되는 라이선스 키와는 구분된다는 점에 유의하세요. + +![](/docs/en/self-host/client-configuration/images/network-config.png) + +**ID 서버** 입력 상자에 `hbbs` 호스트 또는 IP 주소를 입력하세요(로컬 쪽 + 원격 쪽). 다른 두 주소는 비워둘 수 있으며, RustDesk가 자동으로 파악합니다(특별히 설정되지 않은 경우). 릴레이 서버는 `hbbr`(포트 21117)를 가리킵니다. + +예: + +```nolang +hbbs.example.com +``` + +또는 + +```nolang +hbbs.example.com:21116 +``` + +### `Key` 설정 + +자가 호스팅 서버에 암호화된 연결을 설정하려면 공개 키를 입력해야 합니다. 이 키는 일반적으로 `hbbs`를 처음 실행할 때 생성되며, 작업 디렉터리/데이터 폴더의 `id_ed25519.pub` 파일에서 확인할 수 있습니다. + +`Pro` 사용자로서, [web console](https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/console/)에서 `Key`를 추가로 가져올 수 있습니다. + +![](/docs/en/self-host/rustdesk-server-pro/console/images/console-home.png?v2) + +### `API Server` 설정 + +이것은 `Pro` 사용자만을 위한 것입니다. 웹 콘솔에서는 로그인할 수 있지만 RustDesk 클라이언트에서는 로그인에 실패하는 경우, 아마도 `API Server`를 올바르게 설정하지 않았을 가능성이 있습니다. + +API 서버가 기본 `21114` 포트에서 실행되지 않는 경우(오픈소스 버전에서 온 경우 방화벽에 이 포트를 추가하지 않을 수 있음), `API Server`를 명시적으로 지정하십시오. +예: API 서버가 기본 HTTPS 포트에서 실행되는 경우, `API Server`를 `https://hbbs.example.com`와 함께 지정하십시오. + +`API Server`의 값을 여전히 확인할 수 없는 경우, 웹 콘솔의 환영 페이지로 이동하세요. 위 그림에 `API Server`가 표시되어 있습니다(라벨이 `API:`인 입력 상자). + +## 3. 가져오기 또는 내보내기를 사용한 설정 + +1. [above](https://rustdesk.com/docs/en/self-host/client-configuration/#manual-config) 단계를 사용하여 디바이스에 RustDesk 클라이언트를 구성하십시오. +2. 위의 기계를 사용해 설정으로 이동한 다음 네트워크로 이동하고 잠금을 해제하십시오. +3. `Export Server Config`를 클릭하십시오. +4. 복사된 문자열을 메모장 또는 유사한 프로그램에 붙여넣으십시오. +5. 새 클라이언트로 이동하여 위의 내용을 클립보드에 복사하십시오. +6. RustDesk 클라이언트에서 설정으로 이동한 다음 네트워크로 이동하고 잠금을 해제한 후 `Import Server Config`를 클릭하십시오. +7. 설정이 자동으로 붙여넣어집니다. +8. `Apply`를 클릭하십시오. + +## 4. 자동 구성 + +자동으로 설정하는 가장 쉬운 방법은 [here](https://rustdesk.com/docs/en/self-host/client-deployment/)에서 찾을 수 있는 배포 스크립트를 사용하는 것입니다. + +## 5. 클립보드를 통해 `Pro`에서 구성 가져오기 + +![](/docs/en/self-host/rustdesk-server-pro/console/images/console-home.png?v2) + +https://github.com/rustdesk/rustdesk-server-pro/discussions/372#discussioncomment-10473298 + +## 6. 명령줄 `--config` 사용 +`rustdesk.exe --config ` + +웹 콘솔에서 구성 문자열을 얻을 수 있습니다(위 그림에서 확인할 수 있음) 또는 RustDesk 클라이언트의 "설정 → 네트워크"에서 얻을 수 있습니다([here](https://github.com/rustdesk/rustdesk/discussions/7118)는 이에 대한 논의입니다). \ No newline at end of file diff --git a/content/self-host/client-configuration/advanced-settings/_index.ko.md b/content/self-host/client-configuration/advanced-settings/_index.ko.md new file mode 100644 index 00000000..23427063 --- /dev/null +++ b/content/self-host/client-configuration/advanced-settings/_index.ko.md @@ -0,0 +1,1602 @@ +--- +title: 고급 설정 +weight: 49 +description: "RustDesk 사용자 지정 클라이언트에서 사용 가능한 고급 설정을 참조하세요. 여기에는 권한 수준과 재정의, 기본값, 사용자 및 하드코딩된 설정 간의 옵션 동작이 포함됩니다." +keywords: ["rustdesk advanced settings", "rustdesk custom client settings", "rustdesk privilege levels", "rustdesk override settings", "rustdesk default settings"] +--- + +RustDesk의 고급 사용자 지정 클라이언트 설정과 각 설정이 서로 다른 권한 수준에서 어떻게 동작하는지 이해하려면 이 참조를 사용하세요. + +사용자 지정 클라이언트의 모든 고급 설정이 여기에 포함되어 있습니다. + +## RustDesk 사용자 지정 클라이언트의 고급 설정이란 무엇인가요? + +고급 설정은 RustDesk 사용자 지정 클라이언트, 사용자 설정 및 서버 측 정책을 통해 제어할 수 있는 저수준 클라이언트 옵션입니다. 여러 클라이언트 간에 반복 가능한 동작이 필요하거나 보안, 권한 및 UX 기본값에 대해 더 엄격한 제어를 원할 때 유용합니다. + +## 설정 우선순위는 어떻게 작동하나요? + +| 소스 | 우선순위 | +| --- | --- | +| 덮어쓰기 | 최고 | +| 전략 | 높음 | +| 사용자 | 보통 | +| 기본값 | 가장 낮음 | + +## 고급 설정 빠른 답변 + +- 재정의 설정은 다른 모든 소스보다 우선합니다. +- 전략(Strategy) 설정은 사용자 및 기본 설정을 재정의할 수 있습니다. +- 사용자 설정은 더 높은 우선순위의 소스가 이를 재정의하지 않는 경우에만 적용됩니다. +- 기본 설정은 백업 레이어입니다. +- 이 페이지는 정확한 설정 키, 값, 기본값 및 예제에 대한 참고 자료입니다. + +## 설정에 대한 권한 수준 + +설정에는 네 가지 유형이 있습니다: + +1. 설정 덮어쓰기, `Web Console` → `Custom Clients` +2. 기본 설정, `Web Console` → `Custom Clients` +3. 사용자 설정, RustDesk 클라이언트에서 +4. 전략 설정, `Web Console` → `Strategies` + +이 설정의 권한 계층은 다음과 같습니다: `Override > Strategy > User > Default`. + +## 보안 설정 + +### access-mode + +수신 연결에 대한 접근 모드(권한)를 설정합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | custom, full, view | custom | `access-mode=custom` | + +### 키보드 + +수신 연결에 대한 키보드/마우스 입력을 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 키보드 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-keyboard=Y` | + +### 클립보드 허용 + +수신 연결에 대한 복사 및 붙여넣기를 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 클립보드 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-clipboard=Y` | + +### 파일 전송 허용 + +수신 연결에 대해 파일 복사 및 붙여넣기 또는 파일 전송(세션)을 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 파일 전송 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-file-transfer=Y` | + +### 카메라 허용 + +수신 연결에 대한 카메라 허용을 활성화합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 카메라 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-camera=Y` | + +### 터미널 허용 + +수신 연결에 대한 터미널 허용을 활성화합니다. + +**위치**: + +**데스크톱** 설정 → 보안 → 권한 → 터미널 허용 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-terminal=Y` | + +### 원격 프린터 허용 + +수신 연결에 대해 원격 프린터를 허용합니다. + +**위치**: + +1. **Windows** 설정 → 보안 → 권한 → 원격 프린터 허용 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-remote-printer=Y` | + +### 오디오 허용 + +오디오 녹음 및 피어로 전송을 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 오디오 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-audio=Y` | + +### 터널링 활성화 + +TCP 터널링을 활성화합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → TCP 터널링 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-tunnel=Y` | + +### 원격 재시작 허용 + +제어 측에서 재시작을 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 원격 재시작 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-remote-restart=Y` | + +### 세션 녹화 허용 + +세션이 녹화되도록 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 세션 녹화 허용 +2. **모바일** 설정 → 화면 공유 → 세션 녹화 허용 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-record-session=Y` | + +### enable-block-input + +제어 측에서 다른 사용자의 입력을 차단하도록 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 사용자 입력 차단 허용(Windows만 해당) +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-block-input=Y` | + +### 개인정보 보호 모드 사용함 + +제어되는 측에서 제어하는 측이 개인정보 보호 모드를 사용하도록 허용하는지 여부를 제어합니다. + +이는 [`privacy-mode`](#privacy-mode)와 다릅니다: 해당 설정은 첫 번째 연결 이후 각 피어에 대한 기본 개인정보 보호 모드 동작을 제어하는 반면, `enable-privacy-mode`는 개인정보 보호 모드가 허용되는지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 개인정보 보호 모드 사용함 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-privacy-mode=Y` | + +### 원격 구성 수정 허용 + +제어 측에서 제어되는 RustDesk UI의 설정을 변경할 수 있도록 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 권한 → 원격 구성 수정 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-remote-config-modification=Y` | + +### LAN 검색 거부 활성화 + +LAN 피어가 나를 발견하도록 허용합니다. + +LAN 검색 후, 로컬에서 지원된다면 [WOL](https://en.wikipedia.org/wiki/Wake-on-LAN)가 작동할 수 있습니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 보안 → LAN 검색 거부 +2. **모바일** 설정 → 화면 공유 → LAN 검색 거부 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| Y | Y, N | Y | `enable-lan-discovery=Y` | + +### 직접 서버 + +직접 IP 액세스 허용. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 보안 → 직접 IP 액세스 허용 +2. **모바일** 설정 → 화면 공유 → 직접 IP 연결 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `direct-server=Y` | + +### 직접-액세스-포트 + +직접 IP 액세스 포트. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 보안 → 직접 IP 액세스 포트 (직접 IP 액세스 허용이 체크된 경우 표시) +2. **모바일** 설정 → 화면 공유 → 직접 IP 연결 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | | 21118 | `direct-access-port=21118` | + +### 화이트리스트 + +IP 화이트리스트 사용. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 보안 → IP 화이트리스트 사용 +2. **모바일** 설정 → 화면 공유 → IP 화이트리스트 사용 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | `,` or `,,` | `,` means no filter | `whitelist=,` | + +### 허용-자동 연결 해제 및 자동 연결 해제 시간 초과 + +사용자 비활성 상태가 지속된 후 수신 세션을 자동으로 종료합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 보안 → 사용자 비활성 상태에서 수신 세션 자동 종료 +2. **모바일** 설정 → 화면 공유 → 사용자 비활성 상태에서 수신 세션 자동 종료 + +| Option | Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | :------: | +| allow-auto-disconnect | N | Y, N | N | `allow-auto-disconnect=Y` | +| auto-disconnect-timeout | N | Timeout in minutes | 10 | `auto-disconnect-timeout=10` | + +### 허용-연결-창-열림 + +RustDesk 창이 열려 있는 경우에만 연결을 허용합니다. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 보안 → RustDesk 창이 열려 있는 경우에만 연결 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| Y | Y, N | N | `allow-only-conn-window-open=N` | + +### 승인 모드 + +비밀번호를 통해 수신 연결을 수락하거나 수동으로 클릭하십시오. + +**위치**: + +1. **데스크톱** 설정 → 보안 → 비밀번호 → 드롭다운 상자 +2. **모바일** 화면 공유 → 오른쪽 상단 모서리의 드롭다운 메뉴 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | password, click, password-click | password-click | `approve-mode=password-click` | + +### 인증 방법 + +사용할 수 있는 비밀번호 유형은 무엇이며, `temporary password`는 일회성 임의 비밀번호를 의미합니다. + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | use-temporary-password, use-permanent-password, use-both-passwords | use-both-passwords | `verification-method=use-permanent-password` | + +### 일회용 비밀번호 길이 + +1. **데스크톱** 설정 → 보안 → 비밀번호 → 일회용 비밀번호 길이 +2. **모바일** 화면 공유 → 오른쪽 상단 모서리의 드롭다운 메뉴 → 일회용 비밀번호 길이 + +임시 비밀번호의 길이. + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | 6, 8, 10 | `temporary-password-length=6` | + +### 프록시-URL + +프록시 URL입니다. + +현재 `http` 및 `socks5`를 지원합니다. + +**위치**: + +1. **데스크톱** 설정 → 네트워크 → 프록시 → Socks5/Http(s) 프록시 +2. **모바일** + +예제: + +1. **http** `proxy-url=http://192.168.0.2:12345` +2. **https** `proxy-url=https://192.168.0.2:12345` +3. **socks5** `proxy-url=socks5://192.168.0.2:1080` + +### 프록시-사용자 이름 & 프록시-비밀번호 + +프록시 사용자 이름과 비밀번호입니다. + +**위치**: + +1. **데스크톱** 설정 → 네트워크 → 프록시 → Socks5/Http(s) 프록시 +2. **모바일** + +| Option | Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | :------: | +| proxy-username | N | | | `proxy-username=user` | +| proxy-password | N | | | `proxy-password=pass` | + +## 일반 설정 + +### 테마 + +RustDesk 클라이언트의 UI 테마를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 테마 +2. **모바일** 설정 → 설정 → 테마 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | dark, light, system | system | `theme=system` | + +### lang + +RustDesk 클라이언트의 언어를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 언어 +2. **모바일** 설정 → 설정 → 언어 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | default, ar, bg, ... | default | `lang=default` | + +현재 사용 가능한 언어는 다음과 같습니다: + +ar, bg, ca, cs, da, de, el, en, eo, es, et, fa, fr, he, hr, hu, id, it, ja, ko, kz, lt, lv, nb, nl, pl, pt, ro, ru, sk, sl, sq, sr, sv, th, tr, uk, vn, zh-cn, zh-tw + +최신 언어 목록은 코드에서 [LANGS](https://github.com/rustdesk/rustdesk/blob/master/src/lang.rs#L45)를 확인할 수 있습니다. + +### allow-auto-record-incoming + +수신 세션 자동 녹화. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 녹화 → 수신 세션 자동 녹화 +2. **모바일** 설정 → 녹화 → 수신 세션 자동 녹화 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-auto-record-incoming=Y` | + +### allow-auto-record-outgoing + +발신 세션 자동 녹화. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 녹화 → 발신 세션 자동 녹화 +2. **모바일** 설정 → 녹화 → 발신 세션 자동 녹화 + +| Install required | Values | Default | Example | Version | +| :------: | :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-auto-record-outgoing=Y` | >= 1.3.2 | + +### 비디오 저장 디렉터리 + +녹화된 동영상을 저장할 디렉터리입니다. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 녹화 → 비디오 저장 디렉터리 +2. **모바일** 설정 → 녹화 + +기본값: + +1. **macOS** ~/Movies/**앱_이름** +2. **Linux** ~/Videos/**앱_이름** +3. **Windows** %USERPROFILE%\Videos\\**앱_이름** +4. **Android** /Storage/emulated/0/**앱_이름**/ScreenRecord + +**노트**: **앱_이름**을 현재 앱 이름으로 대체하십시오. + +### 자동 업데이트 허용 + +자동 업데이트를 허용합니다. 이 옵션을 활성화하면, 새로운 버전이 출시되면 클라이언트가 GitHub 공식 릴리스에서 최신 버전을 자동으로 다운로드하고 설치합니다. + +이 설정은 연결 유형이 양방향 또는 수신으로 설정된 경우에만 Windows에서 적용됩니다. 발신에는 적용되지 않습니다. + +**위치**: + +1. **Windows** 설정 → 일반 → 기타 → 자동 업데이트 + +| Install required | Values | Default | Example | Version | +| :------: | :------: | :------: | :------: | :------: | +| Y | Y, N | N | `allow-auto-update=Y` | >= 1.4.6 | + +### enable-confirm-closing-tabs + +모든 원격 탭을 닫기 전에 확인 대화상자를 표시할지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 기타 → 여러 탭을 닫기 전에 확인 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-confirm-closing-tabs=Y` | + +### enable-abr + +적응형 비트레이트를 활성화합니다. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 기타 → 적응형 비트레이트 +2. **모바일** 설정 → 화면 공유 → 적응형 비트레이트 (베타) + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-abr=Y` | + +### 허용-벽지제거 + +수신 세션 동안 벽지를 제거합니다. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 기타 → 수신 세션 동안 벽지 제거 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-remove-wallpaper=N` | + +### 새 탭에서 연결 열기 활성화 + +새 연결을 열 때 새 탭을 사용할지 새 창을 사용할지 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 기타 → 새 탭에서 연결 열기 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-open-new-connections-in-tabs=Y` | + +### allow-always-software-render + +항상 소프트웨어 렌더링 사용. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 기타 → 항상 소프트웨어 렌더링 사용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-always-software-render=N` | + +### allow-linux-headless + +디스플레이 없음일 경우 수신 연결을 허용합니다. + +이 옵션은 데스크톱 환경, Xorg 서버 및 GDM을 필요로 하며, [PR 3902](https://github.com/rustdesk/rustdesk/pull/3902)를 참조하십시오. + +**위치**: + +1. **데스크톱** 설정 → 일반 → 기타 → Linux headless 허용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| Y | Y, N | N | `allow-linux-headless=N` | + +### enable-hwcodec + +하드웨어 인코딩을 활성화하여 그림을 더 부드럽게 만듭니다. + +**위치**: + +1. **데스크톱** +2. **모바일** 설정 → 하드웨어 코덱 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | Y | `enable-hwcodec=Y` | + +### peer-card-ui-type + +피어 카드의 뷰를 제어하며, "큰 타일", "작은 타일" 및 "목록"을 포함합니다. + +**위치**: + +1. **데스크톱** 홈 → 피어 패널 → 오른쪽 상단 그리드 아이콘 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | 0, 1, 2 | 0 | `peer-card-ui-type=0` | + +**0** 큰 타일 +**1** 작은 타일 +**2** 목록 + +### 피어 정렬 + +피어 카드의 순서를 제어합니다. + +**위치**: + +1. **데스크톱** 홈 → 피어 패널 → 오른쪽 상단 정렬 아이콘 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Remote ID, Remote Host, Username | Remote ID | `peer-sorting=Remote ID` | + +### 주소록과 최근 세션 동기화 + +주소록을 최근 세션과 동기화할지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 홈 → 피어 패널 → 주소록 → 태그 → 드롭다운 메뉴 → 최근 세션과 동기화 +2. **모바일** 홈 → 피어 패널 → 주소록 → 태그 → 드롭다운 메뉴 → 최근 세션과 동기화 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `sync-ab-with-recent-sessions=N` | + +### sync-ab-tags + +주소록 태그를 정렬할지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 홈 → 피어 패널 → 주소록 → 태그 → 드롭다운 메뉴 → 태그 정렬 +2. **모바일** 홈 → 피어 패널 → 주소록 → 태그 → 드롭다운 메뉴 → 태그 정렬 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `sync-ab-tags=N` | + +### 교차해서 필터링 + +태그 교차를 통해 주소록을 필터링합니다. + +**미리보기**: [PR #5985](https://github.com/rustdesk/rustdesk/pull/5985) + +**위치**: + +1. **데스크톱** 홈 → 피어 패널 → 주소록 → 태그 → 드롭다운 메뉴 → 교차해서 필터링 +2. **모바일** 홈 → 피어 패널 → 주소록 → 태그 → 드롭다운 메뉴 → 교차해서 필터링 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `filter-ab-by-intersection=N` | + +### 텍스처 렌더링 사용 + +**위치**: + +**데스크톱** 설정 → 일반 → 기타 → 텍스처 렌더링 사용 + +텍스처 렌더링을 사용하여 이미지를 더 부드럽게 만듭니다. 렌더링 문제가 발생하면 이 옵션을 비활성화해 보세요. 데스크톱에서만 사용 가능합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | linux:Y, macOS:N, win7:N, win10+:Y | `use-texture-render=Y` | + +### UDP 홀 펀칭 사용 + +**위치**: + +**데스크톱** 설정 → 일반 → 기타 → UDP 홀 펀칭 사용 +**모바일** 설정 → UDP 홀 펀칭 사용 + +RustDesk 1.4.1, RustDesk Server Pro 1.6.2부터 사용 가능합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `enable-udp-punch=N` | + +### IPv6 P2P 연결 사용 + +**위치**: + +**데스크톱** 설정 → 일반 → 기타 → IPv6 P2P 연결 사용 +**모바일** 설정 → 일반 → 기타 → IPv6 P2P 연결 사용 + +RustDesk 1.4.1, RustDesk Server Pro 1.6.2부터 사용 가능합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | selfhost:N, otherwise:Y | `enable-ipv6-punch=N` | + +## 디스플레이 설정 + +### 보기 전용 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "보기 전용" 옵션을 설정합니다. + +그런 다음 각 피어의 설정에서 "보기 전용" 옵션이 연결이 보기 전용인지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 보기 모드 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 보기 모드 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `view-only=Y` | + +### show-monitors-toolbar + +도구 모음에 모니터를 표시할지 여부를 제어합니다. + +![show-monitors-toolbar](/docs/en/self-host/client-configuration/advanced-settings/images/show-monitors-toolbar.png) + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 도구 모음에 모니터 표시 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `show-monitors-toolbar=Y` | + +### 도구 모음 접기 + +원격 도구 모음이 연결된 후 접히는지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 도구 모음 접기 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `collapse-toolbar=Y` | + +### 원격 커서 표시 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "원격 커서 표시" 옵션을 설정합니다. + +그런 다음 각 피어의 설정에서 "원격 커서 표시" 옵션이 원격 제어 페이지에 원격 커서가 표시되는지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 원격 커서 표시 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 원격 커서 표시 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `show-remote-cursor=N` | + +### 원격 커서 따라가기 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "원격 커서 따라가기" 옵션을 설정합니다. + +그런 다음 각 피어의 설정에서 "원격 커서 따라가기" 옵션이 원격 커서를 따라갈지 여부를 제어합니다. + +**미리보기**: [PR 7717](https://github.com/rustdesk/rustdesk/pull/7717) + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 원격 커서 따라가기 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 원격 커서 따라가기 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `follow-remote-cursor=Y` | + +### 원격 창 초점 따라가기 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "원격 창 초점 따라가기" 옵션을 설정합니다. + +그런 다음 각 피어의 설정에서 "원격 창 초점 따라가기" 옵션이 원격 창을 따라갈지 여부를 제어합니다. + +**미리보기**: [PR 7717](https://github.com/rustdesk/rustdesk/pull/7717) + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 원격 창 초점 따라가기 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 원격 창 초점 따라가기 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `follow-remote-window=Y` | + +### 커서 확대/축소 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "커서 확대/축소" 옵션을 설정합니다. + +각 피어의 설정에서 "커서 확대/축소" 옵션은 현재 이미지 배율에 따라 커서가 스케일링되는지를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 커서 확대/축소 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `zoom-cursor=Y` | + +### 품질 모니터 표시 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "품질 모니터 표시" 옵션을 설정합니다. + +그러면 각 피어의 설정에서 "품질 모니터 표시" 옵션이 품질 모니터를 표시할지 여부를 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 품질 모니터 표시 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 품질 모니터 표시 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `show-quality-monitor=Y` | + +### 음소거 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "음소거" 옵션을 설정합니다. + +그러면 각 피어의 설정에 있는 "음소거" 옵션이 사운드 재생 여부를 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 음소거 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 음소거 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `disable-audio=Y` | + +### 파일 복사 및 붙여넣기 허용 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "파일 복사 및 붙여넣기 허용" 옵션을 설정합니다. + +그러면 각 피어의 설정에 있는 "파일 복사 및 붙여넣기 허용" 옵션이 연결 시 파일 복사 및 붙여넣기 허용 여부를 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 파일 복사 및 붙여넣기 허용 (Windows만 해당) +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `enable-file-copy-paste=Y` | + +### 클립보드 사용 안 함 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "클립보드 사용 안 함" 옵션을 설정합니다. + +각 피어의 설정에서 "클립보드 사용 안 함" 옵션은 텍스트 복사 및 붙여넣기 기능을 활성화할지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 클립보드 사용 안 함 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 클립보드 사용 안 함 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `disable-clipboard=Y` | + +### 세션 종료 후 잠금 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "세션 종료 후 잠금" 옵션을 설정합니다. + +그러면 각 피어의 설정에 있는 "세션 종료 후 잠금" 옵션이 세션 종료 후 피어 컴퓨터를 잠금 상태로 설정할지 여부를 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 세션 종료 후 잠금 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 세션 종료 후 잠금 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `lock-after-session-end=Y` | + +### 개인정보 보호 모드 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "개인정보 보호 모드" 옵션을 설정합니다. + +그러면 각 피어의 설정에 있는 "개인정보 보호 모드" 옵션이 연결 후 개인정보 보호 모드를 사용할지 여부를 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 개인정보 보호 모드 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 개인정보 보호 모드 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `privacy-mode=Y` | + +### i444 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "i444" 옵션을 설정합니다. + +각 피어의 설정에서 "i444" 옵션은 실제 색상을 사용할지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 진짜 색상 (4:4:4) +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 진짜 색상 (4:4:4) + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `i444=Y` | + +### 마우스 휠 반전 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "마우스 휠 반전" 옵션을 설정합니다. + +각 피어의 설정에서 "마우스 휠 반전" 옵션은 마우스 휠을 반전할지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 마우스 휠 반전 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 마우스 휠 반전 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `reverse-mouse-wheel=Y` | + +### 마우스 왼쪽 버튼과 오른쪽 버튼 교체 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "마우스 왼쪽 버튼과 오른쪽 버튼 교체" 옵션을 설정합니다. + +그러면 각 피어의 설정에서 "마우스 왼쪽 버튼과 오른쪽 버튼 교체" 옵션이 왼쪽-오른쪽 마우스 버튼 교체 여부를 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 마우스 왼쪽 버튼과 오른쪽 버튼 교체 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 마우스 왼쪽 버튼과 오른쪽 버튼 교체 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `swap-left-right-mouse=Y` | + +### displays-as-individual-windows + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "디스플레이를 개별 창으로 표시" 옵션을 설정합니다. + +그러면 각 피어의 설정에서 "디스플레이를 개별 창으로 표시" 옵션이 디스플레이를 개별 창으로 표시할지 여부를 제어하게 됩니다. + +**미리보기**: [PR 5945](https://github.com/rustdesk/rustdesk/pull/5945) + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 디스플레이를 개별 창으로 표시 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `displays-as-individual-windows=Y` | + +### 원격 세션에 내 모든 디스플레이 사용 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "원격 세션에 내 모든 디스플레이 사용" 옵션을 설정합니다. + +각 피어의 설정에서 "원격 세션에 내 모든 디스플레이 사용" 옵션은 원격 세션에 내 모든 디스플레이를 사용할지 여부를 제어하게 됩니다. + +**미리보기**: [PR 6064](https://github.com/rustdesk/rustdesk/pull/6064) + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 원격 세션에 내 모든 디스플레이 사용 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `use-all-my-displays-for-the-remote-session=Y` | + +### 보기 스타일 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "보기 스타일" 옵션을 설정합니다. + +그런 다음 각 피어의 설정에 있는 "보기 스타일" 옵션이 보기 스타일을 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기본 보기 스타일 +2. **모바일** 설정 → 디스플레이 설정 → 기본 보기 스타일 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | original, adaptive | original | `view-style=original` | + +### 스크롤 스타일 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "스크롤 스타일" 옵션을 설정합니다. + +그런 다음 각 피어의 설정에서 "스크롤 스타일" 옵션이 스크롤 스타일을 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기본 스크롤 스타일 +2. **모바일** + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | scrollauto, scrollbar, scrolledge | scrollauto | `scroll-style=scrollauto` | + +**노트**: `scrolledge` 옵션은 RustDesk 1.4.4부터 사용 가능합니다. + +### edge-scroll-edge-thickness + +이 옵션은 `scroll-style`가 `scrolledge`로 설정되었을 때 가장자리 두께를 제어합니다. 가장자리 두께는 화면 가장자리에서 스크롤 가능한 영역의 크기를 결정합니다. + +이 옵션은 `scroll-style=scrolledge`일 때만 효과적입니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 가장자리 스크롤 가장자리 두께 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | 20-150 | 100 | `edge-scroll-edge-thickness=100` | + +**노트**: 이 옵션은 RustDesk 1.4.4부터 사용 가능합니다. + +### 이미지 품질 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "이미지 품질" 옵션을 설정합니다. + +그러면 각 피어의 설정에 있는 "이미지 품질" 옵션이 이미지 품질을 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기본 이미지 품질 +2. **모바일** 설정 → 디스플레이 설정 → 기본 이미지 품질 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | best, balanced, low, custom | balanced | `image-quality=balanced` | + +### 사용자 지정 이미지 품질 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "사용자 지정 이미지 품질" 옵션을 설정합니다. + +각 피어의 설정에서 "사용자 지정 이미지 품질" 옵션이 "이미지 품질"을 사용자 지정으로 설정한 경우 이미지 품질을 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기본 이미지 품질 → 사용자 지정 +2. **모바일** 설정 → 디스플레이 설정 → 기본 이미지 품질 → 사용자 지정 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | [10.0, 2000.0] | 50.0 | `custom-image-quality=50` | + +### custom-fps + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "custom-fps" 옵션을 설정합니다. + +각 피어의 설정에서 "custom-fps" 옵션이 "image-quality"를 사용자 지정으로 설정한 경우 fps를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기본 이미지 품질 → 사용자 지정 +2. **모바일** 설정 → 디스플레이 설정 → 기본 이미지 품질 → 사용자 지정 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | [5, 120] | 30 | `custom-fps=30` | + +### 코덱 선호도 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "코덱 선호도" 옵션을 설정합니다. + +각 피어의 설정에서 "코덱 선호도" 옵션은 이미지에 대한 코덱을 제어하게 됩니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기본 코덱 +2. **모바일** 설정 → 디스플레이 설정 → 기본 코덱 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | auto, vp8, vp9, av1, h264, h265 | auto | `codec-preference=auto` | + +**주의**: "vp8" 및 "vp9" 이외의 옵션은 작동하지 않을 수 있습니다. 이는 사용자의 기기가 지원하는 사항에 따라 달라집니다. + +### 터미널 지속성 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "터미널 지속성" 옵션을 설정합니다. + +각 피어의 설정에서 "터미널 지속성" 옵션은 연결 해제 시 터미널 세션을 유지할지 여부를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기타 기본 옵션 → 연결이 끊어져도 터미널 세션 유지 +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 연결이 끊어져도 터미널 세션 유지 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `terminal-persistent=Y` | + +### 트랙패드 속도 + +이 옵션은 첫 번째 연결 이후 모든 피어에 대해 "트랙패드 속도" 옵션을 설정합니다. + +각 피어의 설정에서 "트랙패드 속도" 옵션이 사용자 지정으로 설정된 경우, 해당 옵션이 fps를 제어합니다. + +**위치**: + +1. **데스크톱** 설정 → 디스플레이 → 기본 트랙패드 속도 +2. **모바일** 설정 → 디스플레이 설정 → 기본 트랙패드 속도 + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | [10, 1000] | 100 | `trackpad-speed=100` | + +## 기타 + +### 사전 설정 주소록 이름 & 사전 설정 주소록 태그 & 사전 설정 주소록 별명 & 사전 설정 주소록 비밀번호 & 사전 설정 주소록 노트 + +사전 설정 주소록 이름, 기기 태그, 기기 별명, 기기 비밀번호, 기기 노트, https://github.com/rustdesk/rustdesk-server-pro/issues/257. +태그를 설정하고 싶지 않은 경우에만 사전 설정 주소록 이름을 설정할 수 있습니다. +웹 콘솔의 주소록 페이지에서 유효한 주소록 이름과 태그를 사용하십시오. + +| Option | Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | :------: | +| preset-address-book-name | N | | | `preset-address-book-name=
` | +| preset-address-book-tag | N | | | `preset-address-book-tag=
` | +| preset-address-book-alias | N | | | `preset-address-book-alias=` | +| preset-address-book-password | N | | | `preset-address-book-password=` | +| preset-address-book-note | N | | | `preset-address-book-note=` | + +preset-address-book-alias, preset-address-book-password, preset-address-book-note는 RustDesk 클라이언트 >=1.4.3, 프로 >= 1.6.6에서 사용할 수 있습니다. + +### disable-group-panel + +RustDesk 클라이언트에서 그룹 패널을 비활성화하세요(주소록 패널 옆에 있으며, 1.3.8부터는 "액세스 가능한 장치"라고 명명됨). https://github.com/rustdesk/rustdesk-server-pro/issues/250. + +| Option | Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | :------: | +| disable-group-panel | N | Y, N | N | `disable-group-panel=Y` | + +### 사전 권한 상승 서비스 + +Windows 휴대용에 대한 실행 시 자동 권한 상승, https://github.com/rustdesk/rustdesk-server-pro/issues/252. + +| Option | Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | :------: | +| pre-elevate-service | N | Y, N | N | `pre-elevate-service=Y` | + +### 플로팅 창 비활성화 + +Android 서비스가 시작되면 플로팅 창이 표시되며, 이는 시스템이 RustDesk 서비스를 종료하는 것을 방지하는 데 도움이 됩니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `disable-floating-window=Y` | + +### 플로팅 창 크기 + +Android 서비스가 시작되면 플로팅 창이 표시되며, 이는 시스템에서 RustDesk 서비스를 종료하는 것을 방지하는 데 도움이 됩니다. 크기가 120보다 작으면 플로팅 창을 클릭하기 어려워집니다. 매우 작은 크기는 일부 기기에서 백그라운드 서비스를 유지할 수 없을 수도 있습니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| [32, 320] | 120 | `floating-window-size=120` | + +### 플로팅 창-터치 불가 + +기본적으로 플로팅 창을 클릭하면 메뉴가 표시됩니다. '터치 불가'로 설정한 후에는 클릭하거나 스와이프해도 플로팅 창을 통과해 아래에 있는 창으로 전달됩니다. '터치 불가'로 설정된 후에는 플로팅 창의 위치를 변경할 수 없으며, 시스템에서 자동으로 플로팅 창을 반투명으로 설정할 수 있습니다. 그러나 일부 애플리케이션에서는 이 기능이 작동하지 않을 수 있으며, 예를 들어 GitHub 앱이 그러합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `floating-window-untouchable=Y` | + +### 플로팅 창 투명도 + +Android 플로팅 창은 투명도를 조정할 수 있습니다. 플로팅 창을 활성화하되 숨기고 싶다면 투명도를 0으로 설정하면, 플로팅 창은 클릭 이벤트를 통과하도록 자동으로 '터치 불가' 상태로 설정됩니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| [0, 10] | 10 | `floating-window-transparency=5` | + +### 플로팅 창-SVG + +Android 플로팅 창에 아이콘이 설정되지 않은 경우 기본적으로 RustDesk 아이콘이 표시됩니다. +설정 시 SVG의 텍스트 내용을 한 줄로 작성하고, [SVG support limitations](https://bigbadaboom.github.io/androidsvg/index.html)에 유의해 주십시오. + +| Default | Example | +| :------: | :------: | +| RustDesk icon | `floating-window-svg=` | + +### 화면 켜기 유지 + +이는 Android 제어 측용입니다. 화면을 켜둔 상태로 유지하는 것은 플로팅 창에 의존합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| never, during-controlled, service-on | during-controlled | `keep-screen-on=never` | + +### 수신 세션 동안 화면을 깨워두기 + +수신 원격 데스크톱 세션 동안 화면을 깨워둡니다. 이는 애플리케이션이 원격 연결에 적극적으로 사용되는 동안 장치가 절전 모드로 전환되지 않도록 도와줍니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `keep-awake-during-incoming-sessions=N` | + +### 발신 세션 동안 화면을 깨워두기 + +원격 데스크톱 발신 세션 동안 화면을 깨워둡니다. 이는 애플리케이션이 원격 연결에 적극적으로 사용되는 동안 장치가 절전 모드로 전환되지 않도록 도와줍니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `keep-awake-during-outgoing-sessions=N` | + +### enable-directx-capture + +이는 Windows 제어 측용입니다. 문제가 발생하지 않는다면, GDI를 직접 사용하는 대신 DirectX를 스크린샷에 우선적으로 사용하도록 하는 기본 설정을 사용하는 것이 좋습니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `enable-directx-capture=N` | + +### android 소프트웨어 인코딩 반값 활성화 + +이는 Android 제어 측에 적용됩니다. 기본적으로 해상도가 1200보다 클 경우 하드웨어 인코딩은 원본 해상도를 사용하고, 소프트웨어 인코딩은 속도가 느리므로 해상도의 절반을 사용합니다. 이 옵션은 소프트웨어 인코딩이 해상도의 절반으로 스케일링되어야 하는지 설정하는 데 사용됩니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `enable-android-software-encoding-half-scale=N` | + +### 원격 cm 수정 허용 + +제어 측에서 수락 창(연결 관리 창)을 클릭하여 연결을 수락하고 권한을 변경하는 등의 작업을 허용할지 여부를 제어합니다. + +https://github.com/rustdesk/rustdesk/issues/7425 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-remote-cm-modification=Y` | + +### enable-perm-change-in-accept-window + +사용자가 수신 세션을 수락하기 전에 수락 창(연결 관리 창)에서 권한을 변경할 수 있는지 여부를 제어합니다. + +데스크톱에서는 이 설정이 수락 창(연결 관리 창)의 모든 권한에 영향을 미칩니다. Android에서는 다음 권한에 영향을 미칩니다: 파일 전송, 오디오 캡처 및 클립보드 허용입니다. 화면 캡처와 입력 제어는 영향을 받지 않습니다. + +**미리보기**: https://github.com/rustdesk/rustdesk/pull/14875 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `enable-perm-change-in-accept-window=Y` | + +### preset-password-경고제거 + +사용자 지정 클라이언트에 사전 설정된 비밀번호가 있을 때 GUI에서 보안 경고를 제거할지 여부를 제어합니다. + +https://github.com/rustdesk/rustdesk-server-pro/discussions/286 + +https://github.com/rustdesk/rustdesk/discussions/7956 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `remove-preset-password-warning=Y` | + +### hide-security-settings / hide-network-settings / hide-server-settings / hide-proxy-settings / hide-websocket-settings / hide-remote-printer-settings + +일부 설정을 숨길지 여부를 제어합니다. `Disable settings`가 꺼짐 상태인지 확인하십시오. 그렇지 않으면 이 설정들이 작동하지 않습니다. + +https://github.com/rustdesk/rustdesk-server-pro/issues/263 + +https://github.com/rustdesk/rustdesk-server-pro/issues/276 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `hide-security-settings=Y` | + +### 카드에서 사용자 이름 숨기기 + +장치 목록에 사용자 이름을 표시할지 여부를 제어합니다. 때로는 사용자 이름이 너무 길어 다른 정보를 숨깁니다. + +https://github.com/rustdesk/rustdesk-server-pro/issues/284#issuecomment-2216521407 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `hide-username-on-card=Y` | + +### hide-help-cards + +GUI에서 UAC/권한 경고를 표시할지 여부를 제어합니다. + +https://github.com/rustdesk/rustdesk/issues/8687 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `hide-help-cards=Y` | + +### 표시 이름 + +원격 장치에 연결할 때 팝업에 표시되는 표시 이름을 변경하세요. 기본적으로 로그인 사용자의 이름이 먼저 표시되며, 그렇지 않으면 운영 체제의 사용자 이름이 표시됩니다. + +https://github.com/rustdesk/rustdesk-server-pro/issues/277 + +### UDP 비활성화 + +TCP만 사용할지 여부를 제어합니다. 더 이상 UDP 21116를 사용하지 않고 대신 TCP 21116를 사용하게 됩니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `disable-udp=Y` | + +### 사전 설정된 사용자 이름 / 사전 설정된 전략 이름 / 사전 설정된 장치 그룹 이름 / 사전 설정된 장치 사용자 이름 / 사전 설정된 장치 이름 / 사전 설정된 노트 + +사용자 / 전략 / 장치 그룹 / 장치 사용자 이름 / 장치 이름(호스트명) / 노트를 장치에 할당하십시오. [command line](https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/console/#assign-device-usersgroupsstrategies-to-devices)를 통해 이 작업을 수행할 수도 있습니다. + +https://github.com/rustdesk/rustdesk-server-pro/discussions/304 + +장치 그룹은 RustDesk 클라이언트 >=1.3.8, 프로 >= 1.5.0에서 사용 가능합니다. + +사전 설정된 장치 사용자 이름, 사전 설정된 장치 이름, 사전 설정된 노트는 RustDesk 클라이언트 >=1.4.3, 프로 >= 1.6.6에서 사용 가능합니다. + +### 기본 연결 비밀번호 + +`default connection password`를 사용하여 원격 장치와의 연결을 설정합니다. 이 비밀번호는 제어 측에서 구성되며, 제어되는(수신 전용) 클라이언트에서 발견되는 어떤 [preset password](https://github.com/rustdesk/rustdesk/wiki/FAQ#how-can-we-set-up-a-client-with-a-fixed-password-for-unattended-remote-access)와도 혼동되어서는 안 됩니다. + +예: `default-connect-password=abcd1234` + +### 신뢰할 수 있는 장치 활성화 + +신뢰할 수 있는 장치가 2FA 인증을 건너뛸 수 있도록 허용합니다. + +https://github.com/rustdesk/rustdesk/discussions/8513#discussioncomment-10234494 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `enable-trusted-devices=N` | + +### 트레이 숨기기 + +시스템 트레이의 트레이 아이콘을 비활성화합니다. + +https://github.com/rustdesk/rustdesk-server-pro/issues/332 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `hide-tray=Y` | + +### hide-stop-service + +서비스가 실행 중일 때 서비스 중지/전환 컨트롤을 숨깁니다. 이는 주로 사용자 지정 클라이언트에서 사용자가 UI(데스크톱 설정, 트레이 메뉴, Android 서버 페이지 및 Android 플로팅 창 메뉴)에서 서비스를 중지하는 것을 방지하기 위한 것입니다. + +서비스가 중지되면 시작/활성화 항목은 계속 표시됩니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `hide-stop-service=Y` | + +### 일방향 클립보드 리디렉션 + +제어된 측에서 제어하는 측으로의 클립보드 동기화를 사용 안 함, RustDesk 클라이언트 >=1.3.1(제어된 측)에서 사용 가능 + +https://github.com/rustdesk/rustdesk/discussions/7837 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `one-way-clipboard-redirection=Y` | + +### 일방향 파일 전송 + +제어되는 쪽에서 제어하는 쪽으로의 파일 전송을 비활성화하며, RustDesk 클라이언트 >=1.3.1(제어되는 쪽)에서 사용 가능합니다. + +https://github.com/rustdesk/rustdesk/discussions/7837 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `one-way-file-transfer=Y` | + +### sync-init-clipboard + +연결을 설정할 때 클립보드를 동기화하려면(제어 측에서 제어 대상 측으로만), RustDesk 클라이언트 >=1.3.1(제어 측)에서 사용 가능합니다. + +https://github.com/rustdesk/rustdesk/discussions/9010 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `sync-init-clipboard=Y` | + +### 로그온 화면 비밀번호 허용 + +[click-only approve mode](https://rustdesk.com/docs/en/self-host/client-configuration/advanced-settings/#approve-mode)를 사용할 때 로그온 화면에서 비밀번호 입력을 허용하는 경우, RustDesk 클라이언트 >=1.3.1(제어 측)에서 사용 가능합니다. + +활성화 시 현재 세션이 로그온 또는 잠금 화면 상태일 때 영구 비밀번호도 허용됩니다. 이는 클릭, 비밀번호, 그리고 둘 다 승인 모드에 적용됩니다. RustDesk 클라이언트 >=1.4.7(제어 측) + +https://github.com/rustdesk/rustdesk/discussions/9269 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-logon-screen-password=Y` | + +### allow-https-21114 + +일반적으로 HTTPS는 포트 443을 사용합니다. API 서버의 포트가 실수로 21114로 설정된 경우, RustDesk 클라이언트는 기본적으로 21114 포트 설정을 제거합니다. 옵션을 Y로 설정하면 21114를 HTTPS 포트로 사용할 수 있습니다. RustDesk 클라이언트 >=1.3.9에서 사용 가능합니다. + +https://github.com/rustdesk/rustdesk-server-pro/discussions/570 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-https-21114=Y` | + +### allow-d3d-render + +D3D 렌더링은 높은 FPS를 얻을 수 있고 CPU 사용량을 줄일 수 있지만, 일부 장치에서는 원격 제어 화면이 검게 표시될 수 있습니다. RustDesk 클라이언트 >=1.3.9에서 사용 가능하며, Windows에서만 지원됩니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-d3d-render=Y` | + +### 호스트명을 ID로 허용 + +[Use hostname as id](https://github.com/rustdesk/rustdesk-server-pro/discussions/483), 호스트명에 공백이 있으면 '-'로 대체됩니다. 이는 100% 보장되는 것은 아니며, RustDesk 클라이언트를 처음 실행할 때만 발생합니다(즉, 새로 설치된 클라이언트에서만). 충돌이 발생하면 임의의 ID가 할당됩니다. + +RustDesk 클라이언트 버전 1.4.0 이상에서 사용 가능합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-hostname-as-id=Y` | + +### 웹소켓 사용 + +서버와 클라이언트를 연결하려면 웹소켓 프로토콜을 사용하세요. 이 기능은 RustDesk 클라이언트 버전 1.4.0 이상 및 Pro 서버 버전 1.5.7 이상에서만 사용 가능합니다. 웹소켓은 릴레이 연결만 지원한다는 점에 유의해 주세요. + +웹소켓이 작동하도록 하려면 역프록시를 올바르게 구성해야 합니다. 자세한 내용은 https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/faq/#8-add-websocket-secure-wss-support-for-the-id-server-and-relay-server-to-enable-secure-communication-for-all-platforms를 참조하세요. + +**위치**: + +**데스크톱** 설정 → 네트워크 → 웹소켓 사용 +**모바일** 설정 → 웹소켓 사용 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-websocket=Y` | + +### 허용-숫자-only-일회용비밀번호 + +이 옵션은 숫자만 포함된 일회용 비밀번호의 사용을 활성화하거나 비활성화합니다. +RustDesk 클라이언트 1.4.1 이상 및 Pro 서버 1.5.9 이상에서만 사용 가능합니다. + +**토론**: https://github.com/rustdesk/rustdesk-server-pro/discussions/685 + +**미리보기**: https://github.com/rustdesk/rustdesk/pull/11846 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-numeric-one-time-password=Y` | + +### 디바이스 등록 + +디바이스를 등록하지 마세요. 그러면 웹 콘솔의 디바이스 페이지에 표시되지 않습니다. + +**Pro 서버 >= 1.6.0에서만 사용 가능하며, [custom2 license](https://rustdesk.com/pricing#custom2) 및 동시 연결 수 >= 2가 필요합니다.** + +`register-device=N`인 경우, 아래는 이 장치에서 작동하지 않습니다. +- 로그인 +- `--assign` 명령 +- `preset-address-book-name`, `preset-address-book-tag`, `preset-address-book-alias`, `preset-address-book-password`, `preset-address-book-note`, `preset-user-name`, `preset-strategy-name`, `preset-device-group-name`, `preset-device-username`, `preset-device-name`, `preset-note` +- 감사 로그 +- 전략 + +**토론**: https://github.com/rustdesk/rustdesk-server-pro/discussions/672 및 https://github.com/rustdesk/rustdesk-server-pro/discussions/182 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | Y | `register-device=N` | + +### 메인-윈도우-항상-최상위 + +메인 창을 항상 최상위에 유지합니다. + +**토론**: https://github.com/rustdesk/rustdesk-server-pro/issues/761 + +RustDesk 클라이언트 1.4.2에서만 사용 가능합니다. + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | Y, N | N | `main-window-always-on-top=N` | + +### 릴레이-서버 + +https://github.com/rustdesk/rustdesk-server-pro/issues/776#issuecomment-3306524913 + +### 디스커버리 패널 비활성화 + +RustDesk 클라이언트에서 `Discovered` 패널(또는 `Favorites` 패널 옆)을 비활성화합니다. + +| Option | Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | :------: | +| disable-discovery-panel | N | Y, N | N | `disable-discovery-panel=Y` | + +### 터치 모드 + +원격 제어 세션 중에 터치 모드를 사용할지 마우스 모드를 사용할지 여부를 제어합니다. + +#### 버전별 동작 차이 + +##### RustDesk(제어 측) < 1.4.3 + +첫 번째 연결 이후, 이 옵션은 각 피어에 대해 "터치 모드" 설정을 지정합니다. 이후에는 각 피어의 개별 설정이 터치 모드 또는 마우스 모드 사용 여부를 결정합니다. + +**위치**: + +1. **데스크톱** +2. **모바일** 설정 → 디스플레이 설정 → 기타 기본 옵션 → 터치 모드 + +##### RustDesk(제어 측) >= 1.4.3 + +이 옵션은 모든 피어 장치가 터치 모드 또는 마우스 모드를 사용하도록 통합적으로 제어하며, 개별 장치 설정을 무시합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `touch-mode=Y` | + +### show-virtual-mouse + +https://github.com/rustdesk/rustdesk/pull/12911 + +모바일 -> 데스크톱으로 전환 시 가상 마우스의 디스플레이를 제어합니다. + +**위치**: + +1. **데스크톱** +2. **모바일** 원격 세션 -> 하단 탐색 바 -> 제스처 도우미 + +RustDesk 1.4.3부터 사용 가능합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `show-virtual-mouse=Y` | + +**노트**: 이 옵션은 **재정의 설정**이 아닌 **기본 설정**에서 구성해야 합니다. + +### show-virtual-joystick + +https://github.com/rustdesk/rustdesk/pull/12911 + +모바일 -> 데스크톱 시 전환 시 가상 조이스틱의 디스플레이를 제어합니다. + +이 옵션을 사용하려면 **show-virtual-mouse**가 활성화되어 있어야 합니다. + +**위치**: + +1. **데스크톱** +2. **모바일** 원격 세션 -> 하단 탐색 바 -> 제스처 도우미 + +RustDesk 1.4.3부터 사용 가능합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `show-virtual-joystick=Y` | + +**노트**: 이 옵션은 **재정의 설정**이 아닌 **기본 설정**에서 구성해야 합니다. + +### 보안되지 않은 TLS 폴백 허용 + +기본적으로 RustDesk는 TLS를 사용하는 프로토콜에 대해 서버 인증서를 검증합니다. + +이 옵션을 활성화하면, 검증 실패 시 RustDesk가 검증 단계를 건너뛰고 계속 진행하게 됩니다. + +**위치**: + +**데스크톱** 설정 → 네트워크 → 보안되지 않은 TLS 폴백 허용 +**모바일** 설정 → 보안되지 않은 TLS 폴백 허용 + +RustDesk 1.4.4부터 사용 가능합니다. + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-insecure-tls-fallback=Y` | + +### allow-ask-for-note + +연결이 끝날 때 제어 측에 노트를 입력하도록 요청합니다. + +클라이언트 UI에서 이 옵션을 활성화하고 아직 로그인하지 않은 경우, RustDesk는 먼저 로그인하도록 요청합니다. + +**위치**: + +1. **데스크톱** 설정 → 기타 → 연결 종료 시 노트 요청 +2. **모바일** 설정 → 연결 종료 시 노트 요청 + +RustDesk 1.4.4부터 사용 가능합니다. + +**토론**: https://github.com/rustdesk/rustdesk/discussions/14606 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-ask-for-note=Y` | + +### 비밀번호 변경 영구 금지 + +영구 비밀번호를 변경할 수 있는 기능을 비활성화합니다. 활성화된 경우 사용자는 UI 또는 명령줄을 통해 영구 비밀번호를 설정하거나 수정할 수 없습니다. + +RustDesk 1.4.5부터 사용 가능 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `disable-change-permanent-password=Y` | + +### 변경-ID 비활성화 + +장치 ID를 변경할 수 있는 기능을 비활성화합니다. 활성화된 경우 사용자는 UI 또는 명령줄을 통해 ID를 변경할 수 없습니다. + +RustDesk 1.4.5부터 사용 가능 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `disable-change-id=Y` | + +### unlock-pin 비활성화 + +PIN을 사용하여 설정 잠금 해제를 비활성화합니다. 활성화된 경우, PIN이 설정되어 있더라도 사용자는 시스템 관리자 권한을 사용해야만 설정을 잠금 해제할 수 있습니다. + +RustDesk 1.4.5부터 사용 가능 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `disable-unlock-pin=Y` | + +### 설정 비활성화 시 명령줄 설정 허용 + +사용자 지정 클라이언트에서 `Disable settings`가 활성화된 경우 명령줄 설정을 통해 구성할 수 있습니다. Y로 설정하면 UI 설정만 비활성화되며, 명령줄 설정을 사용해 클라이언트를 구성할 수 있습니다. + +RustDesk 1.4.7부터 사용 가능 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-command-line-settings-when-settings-disabled=Y` | \ No newline at end of file diff --git a/content/self-host/client-deployment/_index.ko.md b/content/self-host/client-deployment/_index.ko.md new file mode 100644 index 00000000..cec98770 --- /dev/null +++ b/content/self-host/client-deployment/_index.ko.md @@ -0,0 +1,426 @@ +--- +title: 클라이언트 배포 +weight: 400 +pre: "2.4. " +description: "PowerShell, 배치 또는 macOS bash 스크립트를 사용하여 RustDesk 클라이언트를 대규모로 배포하세요. 이러한 배포 예제를 사용해 RustDesk를 설치하고, 구성 문자열을 적용하며, 암호를 자동으로 설정할 수 있습니다." +keywords: ["rustdesk client deployment", "rustdesk powershell deploy", "rustdesk mass deployment", "rustdesk intune", "rustdesk rmm", "rustdesk silent deployment"] +--- + +이 안내서는 PowerShell, 배치 및 macOS bash와 같은 스크립트 및 자동화 도구를 사용한 대규모 RustDesk 클라이언트 배포를 다룹니다. 가장 간단한 경험을 원하고 RustDesk Server Pro를 보유한 경우, 사용자 지정 클라이언트 생성기를 이용해 시작하세요: https://twitter.com/rustdesk/status/1788905463678951787. + +## 대규모로 RustDesk 클라이언트를 배포하는 가장 좋은 방법은 무엇인가요? + +RustDesk Server Pro의 경우, 서버 설정을 클라이언트 빌드에 포함시키기 때문에 사용자 지정 클라이언트 생성기가 일반적으로 가장 쉬운 대규모 배포 경로입니다. RMM, Intune, GPO 또는 사용자 지정 자동화를 통해 관리되는 환경에서는 PowerShell, 배치 및 셸 스크립트가 더 유연합니다. + +## 어떤 배포 방법을 선택해야 하나요? + +| 방법 | 가장 적합한 경우 | 사용하는 이유 | +| --- | --- | --- | +| 사용자 지정 클라이언트 생성기 | RustDesk Server Pro 팀 | 미리 로드된 설정과 함께 가장 간단한 패키지 배포 | +| PowerShell | Windows 플릿 자동화 | RMM, Intune 및 스크립트 기반 설치에 적합 | +| 배치 또는 cmd | 기본 Windows 스크립팅 | PowerShell 중심의 도구 없이 더 간단한 Windows 환경에서 작동 | +| MSI | 관리되는 Windows 소프트웨어 배포 | 이미 MSI 기반 패키징 워크플로를 사용하는 경우 더 적합 | +| macOS bash | Mac 플릿 배포 | macOS 호스트용 스크립트 가능한 설치 및 구성 | + +## 배포 스크립트에는 어떤 입력이 필요합니까? + +대부분의 배포 스크립트는 세 가지를 필요로 합니다: + +- RustDesk 구성 문자열 +- 관리자 또는 root 권한으로 실행할 수 있는 배포 방법 +- 무작위 또는 배포 시 명시적으로 설정된 비밀번호 정책 + +여러 방법을 사용해 배포할 수 있으며, 일부 방법은 [Client Configuration](https://rustdesk.com/docs/en/self-host/client-configuration/)에 설명되어 있습니다. + +또는 RMM, Intune 등과 함께 대량 배포 스크립트를 사용할 수도 있습니다. ID와 비밀번호는 스크립트에서 출력됩니다. 이를 수집하거나 ID와 비밀번호를 각각 다른 스크립트로 분리하여 수집해야 합니다. + +영구 비밀번호는 `rustdesk_pw` 이후 `()` 내부의 내용을 PowerShell용 선호하는 비밀번호로 변경하고, 기타 플랫폼의 경우 해당 라인을 변경함으로써 무작위에서 원하는 비밀번호로 변경할 수 있습니다. + +## PowerShell + +```powershell +$ErrorActionPreference= 'silentlycontinue' + +# Assign the value random password to the password variable +$rustdesk_pw=(-join ((65..90) + (97..122) | Get-Random -Count 12 | % {[char]$_})) + +# Get your config string from your Web portal and Fill Below +$rustdesk_cfg="configstring" + +################################## Please Do Not Edit Below This Line ######################################### + +# Run as administrator and stays in the current directory +if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) +{ + if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) + { + Start-Process PowerShell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`""; + Exit; + } +} + +# This function will return the latest version and download link as an object +function getLatest() +{ + $Page = Invoke-WebRequest -Uri 'https://github.com/rustdesk/rustdesk/releases/latest' -UseBasicParsing + $HTML = New-Object -Com "HTMLFile" + try + { + $HTML.IHTMLDocument2_write($Page.Content) + } + catch + { + $src = [System.Text.Encoding]::Unicode.GetBytes($Page.Content) + $HTML.write($src) + } + + # Current example link: https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.exe + $Downloadlink = ($HTML.Links | Where {$_.href -match '(.)+\/rustdesk\/rustdesk\/releases\/download\/\d{1}.\d{1,2}.\d{1,2}(.{0,3})\/rustdesk(.)+x86_64.exe'} | select -first 1).href + + # bugfix - sometimes you need to replace "about:" + $Downloadlink = $Downloadlink.Replace('about:', 'https://github.com') + + $Version = "unknown" + if ($Downloadlink -match './rustdesk/rustdesk/releases/download/(?.*)/rustdesk-(.)+x86_64.exe') + { + $Version = $matches['content'] + } + + if ($Version -eq "unknown" -or $Downloadlink -eq "") + { + Write-Output "ERROR: Version or download link not found." + Exit + } + + # Create object to return + $params += @{Version = $Version} + $params += @{Downloadlink = $Downloadlink} + $Result = New-Object PSObject -Property $params + + return($Result) +} + +$RustDeskOnGitHub = getLatest + +$rdver = ((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RustDesk\").Version) + +if ($rdver -eq $RustDeskOnGitHub.Version) +{ + Write-Output "RustDesk $rdver is the newest version." + Exit +} + +if (!(Test-Path C:\Temp)) +{ + New-Item -ItemType Directory -Force -Path C:\Temp | Out-Null +} + +cd C:\Temp + +Invoke-WebRequest $RustDeskOnGitHub.Downloadlink -Outfile "rustdesk.exe" +Start-Process .\rustdesk.exe --silent-install +Start-Sleep -seconds 20 + +$ServiceName = 'Rustdesk' +$arrService = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue + +if ($arrService -eq $null) +{ + Write-Output "Installing service" + cd $env:ProgramFiles\RustDesk + Start-Process .\rustdesk.exe --install-service + Start-Sleep -seconds 20 + $arrService = Get-Service -Name $ServiceName +} + +while ($arrService.Status -ne 'Running') +{ + Start-Service $ServiceName + Start-Sleep -seconds 5 + $arrService.Refresh() +} + +cd $env:ProgramFiles\RustDesk\ +.\rustdesk.exe --get-id | Write-Output -OutVariable rustdesk_id + +.\rustdesk.exe --config $rustdesk_cfg + +.\rustdesk.exe --password $rustdesk_pw + +Write-Output "..............................................." +# Show the value of the ID Variable +Write-Output "RustDesk ID: $rustdesk_id" + +# Show the value of the Password Variable +Write-Output "Password: $rustdesk_pw" +Write-Output "..............................................." +``` + +## Windows 배치/명령줄 + +```bat +@echo off + +REM Assign the value random password to the password variable +setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION +set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 +set rustdesk_pw= +for /L %%b in (1, 1, 12) do ( + set /A rnd_num=!RANDOM! %% 62 + for %%c in (!rnd_num!) do ( + set rustdesk_pw=!rustdesk_pw!!alfanum:~%%c,1! + ) +) + +REM Get your config string from your Web portal and Fill Below +set rustdesk_cfg="configstring" + +REM ############################### Please Do Not Edit Below This Line ######################################### + +if not exist C:\Temp\ md C:\Temp\ +cd C:\Temp\ + +curl -L "https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.exe" -o rustdesk.exe + +rustdesk.exe --silent-install +timeout /t 20 + +cd "C:\Program Files\RustDesk\" +rustdesk.exe --install-service +timeout /t 20 + +for /f "delims=" %%i in ('rustdesk.exe --get-id ^| more') do set rustdesk_id=%%i + +rustdesk.exe --config %rustdesk_cfg% + +rustdesk.exe --password %rustdesk_pw% + +echo ............................................... +REM Show the value of the ID Variable +echo RustDesk ID: %rustdesk_id% + +REM Show the value of the Password Variable +echo Password: %rustdesk_pw% +echo ............................................... +``` + +## MSI + +`rustdesk.exe --silent-install` 대신 msi를 사용할 수도 있습니다. + +https://rustdesk.com/docs/en/client/windows/msi/ + +## macOS Bash + +```sh +#!/bin/bash + +# Assign the value random password to the password variable +rustdesk_pw=$(openssl rand -hex 4) + +# Get your config string from your Web portal and Fill Below +rustdesk_cfg="configstring" + +################################## Please Do Not Edit Below This Line ######################################### + +# Root password request for privilege escalation +[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@" + +# Specify the mount point for the DMG (temporary directory) +mount_point="/Volumes/RustDesk" + +# Download the rustdesk.dmg file +echo "Downloading RustDesk Now" + +if [[ $(arch) == 'arm64' ]]; then + rd_link=$(curl -sL https://github.com/rustdesk/rustdesk/releases/latest | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*/\d{1}.\d{1,2}.\d{1,2}/rustdesk.\d{1}.\d{1,2}.\d{1,2}.aarch64.dmg") + dmg_file=$(echo $rd_link | grep -Eo "rustdesk.\d{1}.\d{1,2}.\d{1,2}.aarch64.dmg") + curl -L "$rd_link" --output "$dmg_file" +else + rd_link=$(curl -sL https://github.com/rustdesk/rustdesk/releases/latest | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*/\d{1}.\d{1,2}.\d{1,2}/rustdesk.\d{1}.\d{1,2}.\d{1,2}.x86_64.dmg") + dmg_file=$(echo $rd_link | grep -Eo "rustdesk.\d{1}.\d{1,2}.\d{1,2}.x86_64.dmg") + curl -L "$rd_link" --output "$dmg_file" +fi + +# Mount the DMG file to the specified mount point +hdiutil attach "$dmg_file" -mountpoint "$mount_point" &> /dev/null + +# Check if the mounting was successful +if [ $? -eq 0 ]; then + # Move the contents of the mounted DMG to the /Applications folder + cp -R "$mount_point/RustDesk.app" "/Applications/" &> /dev/null + + # Unmount the DMG file + hdiutil detach "$mount_point" &> /dev/null +else + echo "Failed to mount the RustDesk DMG. Installation aborted." + exit 1 +fi + +# Run the rustdesk command with --get-id and store the output in the rustdesk_id variable +cd /Applications/RustDesk.app/Contents/MacOS/ +rustdesk_id=$(./RustDesk --get-id) + +# Apply new password to RustDesk +./RustDesk --server & +/Applications/RustDesk.app/Contents/MacOS/RustDesk --password $rustdesk_pw &> /dev/null + +/Applications/RustDesk.app/Contents/MacOS/RustDesk --config $rustdesk_cfg + +# Kill all processes named RustDesk +rdpid=$(pgrep RustDesk) +kill $rdpid &> /dev/null + +echo "..............................................." +# Check if the rustdesk_id is not empty +if [ -n "$rustdesk_id" ]; then + echo "RustDesk ID: $rustdesk_id" +else + echo "Failed to get RustDesk ID." +fi + +# Echo the value of the password variable +echo "Password: $rustdesk_pw" +echo "..............................................." + +echo "Please complete install on GUI, launching RustDesk now." +open -n /Applications/RustDesk.app +``` + +## Linux + +```sh +#!/bin/bash + +# Assign a random value to the password variable +rustdesk_pw=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1) + +# Get your config string from your Web portal and Fill Below +rustdesk_cfg="configstring" + +################################## Please Do Not Edit Below This Line ######################################### + +# Check if the script is being run as root +if [[ $EUID -ne 0 ]]; then + echo "This script must be run as root." + exit 1 +fi + +# Identify OS +if [ -f /etc/os-release ]; then + # freedesktop.org and systemd + . /etc/os-release + OS=$NAME + VER=$VERSION_ID + + UPSTREAM_ID=${ID_LIKE,,} + + # Fallback to ID_LIKE if ID was not 'ubuntu' or 'debian' + if [ "${UPSTREAM_ID}" != "debian" ] && [ "${UPSTREAM_ID}" != "ubuntu" ]; then + UPSTREAM_ID="$(echo ${ID_LIKE,,} | sed s/\"//g | cut -d' ' -f1)" + fi + +elif type lsb_release >/dev/null 2>&1; then + # linuxbase.org + OS=$(lsb_release -si) + VER=$(lsb_release -sr) +elif [ -f /etc/lsb-release ]; then + # For some versions of Debian/Ubuntu without lsb_release command + . /etc/lsb-release + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE +elif [ -f /etc/debian_version ]; then + # Older Debian, Ubuntu, etc. + OS=Debian + VER=$(cat /etc/debian_version) +elif [ -f /etc/SuSE-release ]; then + # Older SuSE etc. + OS=SuSE + VER=$(cat /etc/SuSE-release) +elif [ -f /etc/redhat-release ]; then + # Older Red Hat, CentOS, etc. + OS=RedHat + VER=$(cat /etc/redhat-release) +else + # Fall back to uname, e.g. "Linux ", also works for BSD, etc. + OS=$(uname -s) + VER=$(uname -r) +fi + +# Install RustDesk + +echo "Installing RustDesk" +if [ "${ID}" = "debian" ] || [ "$OS" = "Ubuntu" ] || [ "$OS" = "Debian" ] || [ "${UPSTREAM_ID}" = "ubuntu" ] || [ "${UPSTREAM_ID}" = "debian" ]; then + wget https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.deb + apt-get install -fy ./rustdesk-1.2.6-x86_64.deb > /dev/null +elif [ "$OS" = "CentOS" ] || [ "$OS" = "RedHat" ] || [ "$OS" = "Fedora Linux" ] || [ "${UPSTREAM_ID}" = "rhel" ] || [ "$OS" = "Almalinux" ] || [ "$OS" = "Rocky*" ] ; then + wget https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-0.x86_64.rpm + yum localinstall ./rustdesk-1.2.6-0.x86_64.rpm -y > /dev/null +else + echo "Unsupported OS" + # here you could ask the user for permission to try and install anyway + # if they say yes, then do the install + # if they say no, exit the script + exit 1 +fi + +# Run the rustdesk command with --get-id and store the output in the rustdesk_id variable +rustdesk_id=$(rustdesk --get-id) + +# Apply new password to RustDesk +rustdesk --password $rustdesk_pw &> /dev/null + +rustdesk --config $rustdesk_cfg + +systemctl restart rustdesk + +echo "..............................................." +# Check if the rustdesk_id is not empty +if [ -n "$rustdesk_id" ]; then + echo "RustDesk ID: $rustdesk_id" +else + echo "Failed to get RustDesk ID." +fi + +# Echo the value of the password variable +echo "Password: $rustdesk_pw" +echo "..............................................." +``` + +## 새 장치에 대한 명시적 배포 + +기본적으로 RustDesk 클라이언트는 처음 서버에 연결할 때 자체 호스팅된 서버에 등록됩니다. 일반 모드에서는 추가적인 배포 단계가 필요하지 않습니다. + +서버 웹 콘솔에서 **설정 → 기타 → 새 장치에 대한 배포 요구**를 활성화하면, 새 장치는 이 서버에 등록되기 전에 반드시 명시적으로 배포되어야 합니다. + +관리자 계정으로 서버 웹 콘솔에서 [API token](/docs/ko/self-host/rustdesk-server-pro/console/#api-token)를 생성하세요. 해당 토큰은 **장치** 권한이 **읽기 및 쓰기**로 설정되어 있어야 합니다. 그런 다음 RustDesk를 설치하고 자체 호스팅된 서버를 사용하도록 구성한 후 각 새 데스크톱 장치에서 배포 명령을 실행하세요. + +### Windows, macOS 및 Linux + +Windows에서는 관리자 권한으로 명령 프롬프트 또는 PowerShell을 실행하세요: + +```bat +rustdesk --deploy --token +``` + +macOS 및 Linux에서는 `sudo`와 함께 명령어를 실행하십시오: + +```sh +sudo rustdesk --deploy --token +``` + +### 선택적 사용자 지정 ID + +특정 RustDesk ID로 장치를 배포하려면 `--id `를 추가하세요: + +```sh +rustdesk --deploy --token --id +``` + +ID가 이미 다른 기계에서 사용되고 있으면 배포가 실패하고 RustDesk는 해당 ID가 이미 사용 중이라고 보고합니다. + +### Android + +Android는 명령줄 배포 흐름을 사용하지 않습니다. 서버가 배포를 요구하고 Android 클라이언트가 아직 배포되지 않은 경우, RustDesk는 **배포** 프롬프트를 표시합니다. **확인**을 탭하고 배포 대화상자에 API 토큰을 입력한 다음, 선택적으로 사용자 지정 ID를 입력하세요. 또한 **설정 → 배포**에서 동일한 대화상자를 수동으로 열 수도 있습니다. + +배포가 성공하면 장치가 서버 장치 목록에 추가되고 클라이언트는 정상적으로 등록할 수 있습니다. \ No newline at end of file diff --git a/content/self-host/nat-loopback-issues/_index.ko.md b/content/self-host/nat-loopback-issues/_index.ko.md new file mode 100644 index 00000000..804f0efa --- /dev/null +++ b/content/self-host/nat-loopback-issues/_index.ko.md @@ -0,0 +1,155 @@ +--- +title: NAT 루프백 문제 +weight: 500 +pre: "2.5. " +description: "라우터 뒤에 RustDesk를 자체 호스팅할 때 NAT 루프백 또는 헤어핀 NAT 문제를 해결하세요. LAN 클라이언트가 공개 IP 또는 도메인을 사용할 때 실패할 수 있는 이유와 라우터 설정, 로컬 DNS, hosts 파일 오버라이드를 통해 이를 해결하는 방법을 알아보세요." +keywords: ["rustdesk nat loopback", "rustdesk hairpin nat", "rustdesk local dns", "rustdesk hosts file", "rustdesk self-hosted domain issue", "rustdesk lan public ip problem"] +--- + +{{% notice note %}} +이 설명에는 복잡한 네트워킹 지식이 포함되어 있으므로, 가독성을 높이기 위해 귀하의 도움이 필요합니다. +{{% /notice %}} + +NAT 루프백, 또는 헤어핀 NAT라고도 불리는 이 문제는 동일한 LAN에 있는 장치들이 공개 IP 주소나 도메인 이름을 통해 자체 호스팅된 RustDesk 서버에 접근하려고 할 때 발생합니다. 이 안내서에서는 왜 이런 문제가 발생하는지와 이를 라우터 지원, 로컬 DNS, 또는 hosts 파일 오버라이드를 통해 해결하는 방법을 설명합니다. + +## 빠른 답변 + +자체 호스팅된 RustDesk 서버가 LAN 밖에서 정상적으로 작동하지만 같은 LAN의 클라이언트가 공개 IP 주소나 도메인 이름을 사용할 때 연결이 실패한다면, 일반적으로 NAT 루프백이 원인입니다. 가장 좋은 해결책은 라우터에서 헤어핀 NAT를 활성화하는 것입니다. 만약 이것이 불가능하다면 로컬 DNS를 사용하세요. 소수의 장치에 대해서는 hosts 파일 오버라이드를 대안으로 사용할 수 있습니다. + +## 어떤 해결책을 선택해야 하나요? + +| 수정 | 최적의 경우 | 트레이드오프 | +| --- | --- | --- | +| 라우터에서 NAT 루프백 활성화 | 라우터가 헤어핀 NAT를 지원함 | 장기적으로 가장 좋은 해결 방법이지만 모든 라우터가 해당 설정을 노출하지는 않음 | +| LAN에서 로컬 DNS 사용 | 동일한 네트워크에서 여러 기기를 관리함 | 모든 기기를 수동으로 편집하는 것보다 확장성이 뛰어남 | +| 호스트 파일 항목 추가 | 몇몇 기기만 수정하면 됨 | 노트북이나 로밍 기기에서는 수동으로 하기 쉽고 잊기 쉬움 | + +NAT 루프백에 대한 자세한 내용은 [Wikipedia](https://en.m.wikipedia.org/wiki/Network_address_translation#NAT_hairpinning) 페이지를 참조하십시오. + +홈 네트워크 또는 NAT 방화벽 뒤에 있는 기타 네트워크 환경에 RustDesk 서버를 배포하는 경우, RustDesk 서버와 클라이언트는 **반드시** 다음 중 하나를 사용해야 합니다: +A: 서로 접속하기 위해 로컬 IP 주소를 사용하거나 OR: +B: NAT 루프백을 지원하고 활성화된 방화벽을 갖추어야 합니다. + +공개 IP나 도메인을 통해 서버에 연결할 수 없다는 것을 알게 될 수 있습니다(이론상 공개 IP를 가리킵니다). + +## 문제 +이 예제에서는 LAN 장치가 `rustdesk.example.com`에 연결하려고 할 때 어떤 일이 발생하는지 살펴보겠습니다. 라우터의 공인 IP는 `172.16.16.1`이고, 서버의 LAN IP는 `192.168.11.20`이며, 원하는 도메인은 `rustdesk.example.com`라고 가정하며, '192.168.11.2'를 사용하는 클라이언트가 있다고 합시다. + +라우터의 NAT 뒤에 서버를 설정할 경우, 라우터에서 포트 포워딩을 추가하여 PUBLIC IP 172.16.16.1로 들어오는 모든 수신 메시지를 192.168.11.20에 있는 서버로 전달하도록 변경할 수 있습니다. + +LAN 장치가 인터넷에 접속하려고 할 때, 예를 들어 8.8.8.8에 있는 웹서버에 접속하려고 한다면, 해당 요청은 192.168.11.2에서 발송된 것으로 간주되어 라우터로 전송됩니다. 라우터는 이 요청을 가로채어 172.16.16.1에서 발송된 것으로 8.8.8.8로 다시 쓰게 됩니다. 8.8.8.8이 172.16.16.1에 응답하면 라우터는 이전 연결을 확인하고 그 응답을 다시 192.168.11.2로 리디렉션합니다. + +만약 8.8.8.8의 사용자가 172.16.16.1을 이용해 우리 네트워크로 메시지를 보낸다면, 포트 포워딩 규칙에 의해 172.16.16.1의 목적지를 192.168.11.20에 있는 서버로 변경되며, 요청의 출처는 여전히 8.8.8.8로 유지되어 서버는 (대략적으로나마) 8.8.8.8로 직접 응답할 수 있습니다. + +만약 8.8.8.8의 사용자가 우리 네트워크를 해킹하려고 시도하고 192.168.11.2에서 메시지를 보내는 것처럼 위장한다면, 라우터는 192.168.11.2에서 오는 트래픽이 LAN 장치로부터만 유효하다는 것을 인식하고 일반적으로 해당 트래픽을 차단할 것입니다. + +문제는 LAN으로 다시 루프백하려고 할 때 발생합니다. 만약 LAN 장치가 `rustdesk.example.com`로 연결을 시도한다면, 이는 결국 `172.16.16.1`로 연결됩니다. 이 시점에서 라우터는 많은 선택지를 고르게 됩니다. 라우터는 이미 LAN 포트에서 WAN 포트로 192.168.11.2에서 172.16.16.1로 가는 메시지를 보냈습니다. 일단 WAN 포트에 도착하면, 이 메시지는 인터넷 상의 누군가가 우리 네트워크를 해킹하려 했던 경우와 구분할 수 없게 됩니다. + +NAT 루프백 기능은 과정 중 앞단의 주소에서 "192.168.11.2"라는 소스 부분을 효과적으로 변경하여, 서버와 클라이언트 간에 메시지를 주고받을 때 NAT 테이블을 사용해야 한다는 것을 라우터가 인식하도록 합니다. + +만약 LAN 내부에 있을 때만 연결에 문제가 생기고, 외부에서는 정상적으로 작동한다면, 이것이 바로 당신이 겪고 있는 문제일 수 있습니다. + +## 해결 방안 +이 문제를 해결하는 방법은 세 가지가 있습니다. + +### 1. 라우터에서 NAT 루프백 설정하기 +네트워킹 지식이 있다면 라우터에서 NAT 루프백을 설정할 수 있지만, 이를 설정하려면 네트워킹에 대한 전문 지식이 필요합니다. 일부 라우터는 이 설정을 조정할 수 없는 경우도 있으므로, 모든 사람에게 가장 적합한 옵션은 아닙니다. + +{{% notice note %}} +[MikroTik](https://help.mikrotik.com/docs/display/ROS/NAT#NAT-HairpinNAT)의 기사가 이 내용을 매우 잘 설명하고 있습니다. 여기서부터 학습을 시작해보세요. +{{% /notice %}} + +### 2. LAN에 DNS 서버 배포 +먼저, [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome/wiki/Docker)와 [Pi-hole](https://github.com/pi-hole/docker-pi-hole) 중에서 원하는 것을 선택하세요. Docker를 통해 배포하거나, RustDesk 서버와 동일한 서버에 배포할 수 있습니다. 아래 예제에서는 이 과정의 몇 가지 단계를 보여드립니다. + +둘 다 DNS 기반 광고 차단기이지만, 광고를 차단하고 싶지 않다면 이 기능을 비활성화할 수 있습니다. + +먼저, `domain`를 RustDesk 서버의 LAN IP(예: `192.168.11.20`)로 지정하세요. 그런 다음 라우터의 `DHCP` 설정으로 이동하고(`DHCP`는 WAN이 아님에 유의하십시오), `First` DNS IP를 AdGuard Home 또는 Pi-hole을 배포한 서버로 설정하세요. `Secondary` DNS는 ISP의 DNS 또는 기타 공개 DNS일 수 있으며, 예를 들어 Cloudflare용 `1.1.1.1`나 Google용 `8.8.8.8`가 될 수 있습니다. 이제 완료되었습니다! + +다음은 예시입니다: +#### AdGuard 홈 +광고 차단 기능을 사용하면 문제가 발생할 수 있습니다. 해결 방법을 찾고 싶지 않고 이 기능을 비활성화하고 싶다면, '보호 비활성화' 버튼을 클릭하세요. + +![](/docs/en/self-host/nat-loopback-issues/images/adguard_home_disable_protection.png) +
+ +'DNS 재작성' 설정으로 이동하세요. + +![](/docs/en/self-host/nat-loopback-issues/images/adguard_home_click_dns_rewrites.png) +
+ +'DNS 재작성 추가'를 클릭한 다음, 필드에 `domain`와 서버의 `LAN IP`를 입력하세요. + +![](/docs/en/self-host/nat-loopback-issues/images/adguard_home_dns_rewrite_dialog.png) + +다음은 최종 결과의 모습입니다. + +![](/docs/en/self-host/nat-loopback-issues/images/adguard_home_dns_rewrite_final_result.png) + +***라우터의 LAN DHCP에 AdGuard 홈을 할당하는 것을 잊지 마세요!*** +
+ +#### Pi-hole +광고 차단 기능을 사용하면 문제가 발생할 수 있습니다. 해결 방법을 찾고 싶지 않고 이 기능을 비활성화하고 싶다면, '차단 비활성화' 하위 메뉴에서 '무기한' 버튼을 클릭하세요. + +![](/docs/en/self-host/nat-loopback-issues/images/pi_hole_disable_blocking.png) + +"로컬 DNS → DNS 레코드"로 이동하세요. +상자에 `domain`와 `IP`를 입력한 다음, "추가"를 클릭하세요. + +최종 결과를 확인하려면 이 그림의 노란색 선을 확인하세요. + +![](/docs/en/self-host/nat-loopback-issues/images/pi_hole_local_dns_dns_records.png) + +***라우터의 LAN DHCP에 Pi-hole을 할당하는 것을 잊지 마세요!*** + +### 3. 호스트 파일에 규칙 추가 +이 방법은 장치 수가 적은 경우에만 권장됩니다. 장치가 많다면 DNS 방법을 사용하는 것이 더 좋습니다. 그렇지 않으면 서버에 접근해야 하는 각 장치에서 수동으로 작업해야 합니다. + +{{% notice warning %}} +노트북과 같은 휴대용 기기에서 이 방법을 사용하면 LAN 밖에서는 서버에 연결할 수 없습니다. +{{% /notice %}} + +다양한 OS의 경로: + +#### Windows + +```text +C:\Windows\system32\drivers\etc\hosts +``` + +승격된 권한으로 편집하거나 이 파일을 `Desktop`로 복사하여 편집할 수 있습니다. 편집한 후 원본 경로로 다시 복사하세요. + +#### macOS + +```text +/etc/hosts +``` + +`vim`를 사용할 수 있으며, 이는 사전 설치되어 있습니다. + +```sh +sudo vim /etc/hosts +``` + +#### Linux + +```text +/etc/hosts +``` + +`vim` 또는 `nano`를 사용할 수 있습니다. + +```sh +sudo vim /etc/hosts +``` + +
+ +형식은 세 운영 체제 모두 동일합니다. `IP`가 먼저 오고 그다음에 `domain`가 옵니다. 한 줄에 하나의 항목입니다. + +예: + +```text +192.168.11.20 rustdesk.example.com +``` \ No newline at end of file diff --git a/content/self-host/rustdesk-server-oss/Docker/_index.ko.md b/content/self-host/rustdesk-server-oss/Docker/_index.ko.md new file mode 100644 index 00000000..7e577da5 --- /dev/null +++ b/content/self-host/rustdesk-server-oss/Docker/_index.ko.md @@ -0,0 +1,159 @@ +--- +title: Docker +weight: 7 +description: "Docker, Docker Compose 또는 Podman을 사용하여 RustDesk 서버 OSS를 셀프호스팅하십시오. 필요한 포트, 호스트 네트워킹 참고사항 및 hbbs 및 hbbr에 대한 샘플 컨테이너 정의를 검토하십시오." +keywords: ["rustdesk docker", "rustdesk docker compose", "rustdesk server docker", "rustdesk hbbs hbbr docker", "rustdesk podman", "rustdesk self-host docker"] +--- + +이 안내서를 사용하여 Docker, Docker Compose 또는 Podman을 통해 RustDesk Server OSS를 자체 호스팅하고 `hbbs` 및 `hbbr`에 대한 올바른 포트를 열어보세요. + +## Docker에서 RustDesk Server OSS를 실행하는 가장 좋은 방법은 무엇인가요? + +대부분의 Linux 배포에서는 `network_mode: "host"`와 함께 Docker Compose를 사용하는 것이 가장 간단하고 신뢰할 수 있는 옵션입니다. 이 방법은 설정을 반복 가능하게 유지하고 업그레이드를 쉽게 만들어 주며, 호스트 네트워킹이 가능할 경우 추가적인 포트 매핑 복잡성을 피할 수 있습니다. + +## Docker 배포 체크리스트 + +1. Docker 또는 Podman을 설치하기. +2. `hbbs` 및 `hbbr`용 지속적 데이터 디렉터리 또는 볼륨 생성하기. +3. 방화벽에서 필요한 RustDesk 포트를 열기. +4. Docker Compose, `docker run` 또는 Podman Quadlet을 사용해 `hbbs` 및 `hbbr` 시작하기. +5. 클라이언트를 새 자체 호스팅 서버로 지정하고 등록 및 릴레이 트래픽을 확인하기. + +## 어떤 컨테이너 설정을 선택해야 하나요? + +| 방법 | 최적의 사용처 | 사용하는 이유 | +| --- | --- | --- | +| Docker Compose | 대부분의 Linux 서버 | 반복 가능한 설정 및 보다 쉬운 지속적인 유지보수 | +| `docker run` | 빠른 수동 테스트 | 간단한 컨테이너 쌍을 시작하는 가장 빠른 방법 | +| Podman Quadlet | Podman 플러스 systemd 환경 | 네이티브 systemd 스타일 서비스 관리 | + +> 여기 또 다른 좋은 튜토리얼이 있습니다: [Building Your Own Remote Desktop Solution: RustDesk Self-Hosted on Cloud with Docker (Hetzner)](https://www.linkedin.com/pulse/building-your-own-remote-desktop-solution-rustdesk-cloud-montinaro-bv94f) + +## Docker를 사용해 자체 서버 설치하기 + +### 요구사항 +Docker/Podman이 설치되어 있어야만 rustdesk-server를 Docker 컨테이너로 실행할 수 있습니다. 의심스러운 경우, 이 [guide](https://docs.docker.com/engine/install)를 통해 Docker를 설치하여 최신 버전인지 확인하세요! + +방화벽에서 다음 포트를 반드시 열어주세요: +- `hbbs`: + - `21114` (TCP): 웹 콘솔용으로 사용되며, `Pro` 버전에서만 사용 가능합니다. + - `21115` (TCP): NAT 유형 테스트에 사용됩니다. + - `21116` (TCP/UDP): **`21116`는 TCP와 UDP 모두 활성화되어야 함을 참고해 주세요.** `21116/UDP`는 ID 등록 및 핑 서비스에 사용됩니다. `21116/TCP`는 TCP 홀 펀칭 및 연결 서비스에 사용됩니다. + - `21118` (TCP): 웹 클라이언트 지원에 사용됩니다. +- `hbbr`: + - `21117` (TCP): 릴레이 서비스에 사용됩니다. + - `21119` (TCP): 웹 클라이언트 지원에 사용됩니다. + +*웹 클라이언트 지원이 필요하지 않은 경우, 해당 포트 `21118`, `21119`를 비활성화할 수 있습니다.* + +### Docker 예제 + +```sh +sudo docker image pull rustdesk/rustdesk-server +sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs +sudo docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr +``` + + + +{{% notice note %}} +`--net=host`는 오직 **Linux**에서만 작동하며, 이로 인해 `hbbs`/`hbbr`는 컨테이너 IP(172.17.0.1)가 아닌 실제 수신 IP 주소를 볼 수 있습니다. +`--net=host`가 잘 작동한다면 `-p` 옵션은 사용되지 않습니다. Windows에서는 `sudo`와 `--net=host`를 생략하세요. + +**플랫폼에서 연결 문제가 발생하는 경우 `--net=host`를 제거해 주세요.** +{{% /notice %}} + +{{% notice note %}} +`-td`로 로그를 볼 수 없는 경우, `docker logs hbbs`를 통해 로그를 볼 수 있습니다. 또는 `-it`로 실행할 수 있으며, `hbbs/hbbr`는 데몬 모드로 실행되지 않습니다. +{{% /notice %}} + +### Docker Compose 예제 +여기서 설명한 대로 `compose.yml`와 함께 Docker 파일을 실행하려면 [Docker Compose](https://docs.docker.com/compose/)가 설치되어 있어야 합니다. + +```yaml +services: + hbbs: + container_name: hbbs + image: rustdesk/rustdesk-server:latest + command: hbbs + volumes: + - ./data:/root + network_mode: "host" + + depends_on: + - hbbr + restart: unless-stopped + + hbbr: + container_name: hbbr + image: rustdesk/rustdesk-server:latest + command: hbbr + volumes: + - ./data:/root + network_mode: "host" + restart: unless-stopped +``` + +config 변경이 필요한 경우, 예를 들어 ALWAYS_USE_RELAY=Y를 설정하려면 docker-compose.yml의 환경을 사용할 수 있습니다. + +```yaml +services: + hbbs: + container_name: hbbs + image: rustdesk/rustdesk-server:latest + environment: + - ALWAYS_USE_RELAY=Y + command: hbbs + volumes: + - ./data:/root + network_mode: "host" + + depends_on: + - hbbr + restart: unless-stopped + + hbbr: + container_name: hbbr + image: rustdesk/rustdesk-server:latest + command: hbbr + volumes: + - ./data:/root + network_mode: "host" + restart: unless-stopped +``` + +### Podman Quadlet 예제 + +Podman을 systemd 서비스로 사용하여 컨테이너를 실행하고 싶다면 다음의 Podman Quadlet 구성 샘플을 사용할 수 있습니다: + +```ini +[Container] +AutoUpdate=registry +Image=rustdesk/rustdesk-server:latest +Exec=hbbs +Volume=/path/to/rustdesk-server/data:/root +Network=host + +[Service] +Restart=always + +[Install] +WantedBy=default.target +``` + +또는 + +```ini +[Container] +AutoUpdate=registry +Image=rustdesk/rustdesk-server:latest +Exec=hbbr +Volume=/path/to/rustdesk-server/data:/root +Network=host + +[Service] +Restart=always + +[Install] +WantedBy=default.target +``` \ No newline at end of file diff --git a/content/self-host/rustdesk-server-oss/_index.ko.md b/content/self-host/rustdesk-server-oss/_index.ko.md new file mode 100644 index 00000000..03736c61 --- /dev/null +++ b/content/self-host/rustdesk-server-oss/_index.ko.md @@ -0,0 +1,30 @@ +--- +title: RustDesk 서버 OSS +description: "무료이고 오픈소스인 자체 호스팅 백엔드를 사용해 나만의 RustDesk 서버 OSS 배포를 실행하세요. 무엇이 포함되어 있는지, 언제 OSS를 선택해야 하는지, 그리고 RustDesk ID 및 릴레이 서비스를 설치하는 방법에 대해 알아보세요." +keywords: ["rustdesk server oss", "rustdesk open source server", "self-hosted rustdesk server", "rustdesk hbbs", "rustdesk hbbr", "rustdesk docker", "rustdesk server install", "rustdesk relay server", "rustdesk id server", "rustdesk community self-hosting"] +weight: 100 +pre: "2.1. " +--- + +RustDesk Server OSS는 RustDesk용 무료 및 오픈소스 자체 호스팅 백엔드입니다. 이를 통해 자체 ID 및 릴레이 서비스를 실행하고, 제어하는 인프라 내에서 원격 접속 트래픽을 유지하며, 자신의 클라우드 또는 온프레미스 환경에 RustDesk를 배포할 수 있습니다. + +핵심 자체 호스팅 기능을 원하고 배포, 네트워킹 및 업그레이드를 직접 관리하는 데 익숙한 경우 RustDesk Server OSS를 사용하세요. 웹 콘솔, API 접근, OIDC, LDAP, 2FA, 디바이스 관리 또는 기타 중앙 집중식 관리 기능이 필요하다면 [RustDesk Server Pro](/docs/ko/self-host/rustdesk-server-pro/)와 비교해 보세요. + +## RustDesk Server OSS에는 무엇이 포함되나요? + +- RustDesk ID, 렌더베스, 신호 전달을 위한 `hbbs`. +- 직접 피어투피어 연결이 불가능한 경우 릴레이 트래픽을 처리하기 위한 `hbbr`. +- 문서 및 [Discord](https://discord.com/invite/nDceKgxnkV)를 통한 커뮤니티 지원과 배포 안내. + +## RustDesk Server OSS 시작하기 + +- 표준 배포 경로는 [Installation](/docs/ko/self-host/rustdesk-server-oss/install/) 가이드를 참고하세요. +- 컨테이너 기반 설정을 원하시면 [Docker](/docs/ko/self-host/rustdesk-server-oss/docker/) 가이드를 사용하세요. +- Windows 호스트용은 [Windows & PM2 or NSSM](/docs/ko/self-host/rustdesk-server-oss/windows/)를 사용하세요. +- NAS 배포용은 [Synology](/docs/ko/self-host/rustdesk-server-oss/synology/) 가이드를 사용하세요. + +{{% notice note %}} +집이나 사무실에서 자체 서버를 구축하고 공개 IP/도메인을 통해 연결할 수 없는 경우, [this article](https://rustdesk.com/docs/en/self-host/nat-loopback-issues/)를 확인해 주세요. +{{% /notice %}} + +{{% children depth="3" showhidden="true" %}} \ No newline at end of file diff --git a/content/self-host/rustdesk-server-oss/install/_index.ko.md b/content/self-host/rustdesk-server-oss/install/_index.ko.md new file mode 100644 index 00000000..2cde477a --- /dev/null +++ b/content/self-host/rustdesk-server-oss/install/_index.ko.md @@ -0,0 +1,71 @@ +--- +title: 설치 +weight: 1 +description: "Docker, systemd 스크립트 또는 Debian 패키지를 사용해 RustDesk 서버 OSS를 설치하기. 서버 요구 사항, 방화벽 규칙 및 배포 후 필요한 클라이언트 구성 단계를 검토하세요." +keywords: ["rustdesk server install", "install rustdesk server oss", "rustdesk docker install", "rustdesk server firewall ports", "rustdesk hbbs hbbr install", "rustdesk self-host install"] +--- + +이 안내서를 사용하여 RustDesk 서버 OSS를 설치하고, 필요한 방화벽 포트를 열고, 클라이언트를 새 자체 호스팅 서버에 연결하십시오. + +## RustDesk 서버 OSS를 설치하는 데 권장되는 방법은 무엇인가요? + +대부분의 배포에서는 Docker가 가장 쉬운 설치 방법입니다. 이는 재현, 업그레이드 및 서버 간 이동이 가장 용이하기 때문입니다. Linux에서 기본 제공 서비스를 선호한다면 systemd 설치 스크립트나 Debian 패키지도 잘 작동할 수 있습니다. + +## 어떤 설치 방법을 선택해야 하나요? + +| 방법 | 가장 적합한 경우 | 사용하는 이유 | +| --- | --- | --- | +| Docker | 대부분의 자체 호스팅 배포 | 가장 간단한 업그레이드, 예측 가능한 설정 및 손쉬운 롤백 | +| 설치 스크립트 | systemd 서비스를 빠르게 원하는 Linux 관리자 | 더 적은 수작업으로 `hbbs`, `hbbr` 및 클라이언트 구성 흐름을 설정함 | +| Debian 패키지 | 패키지 도구를 사용하는 Debian 기반 시스템 | 설치를 기본 패키지 관리에 가깝게 유지함 | + +## 동영상 자습서 +YouTube에는 많은 동영상 자습서가 있습니다. https://github.com/rustdesk/rustdesk/wiki/FAQ#video-tutorials. + +## 서버 요구사항 +하드웨어 요구사항은 매우 낮습니다. 기본 클라우드 서버의 최소 구성만으로 충분하며, CPU와 메모리 요구사항도 최소입니다. 라즈베리 파이와 같은 장치를 사용할 수도 있습니다. 네트워크 크기에 관해 말씀드리자면, TCP 홀 펀칭 직접 연결이 실패하면 릴레이 트래픽이 소모됩니다. 릴레이 연결의 트래픽은 해상도 설정과 화면 업데이트에 따라 초당 30K에서 3M 사이입니다(1920x1080 화면). 사무용으로만 사용한다면 트래픽은 약 100K/s 정도입니다. + +## 방화벽 +UFW가 설치되어 있다면 다음 명령어를 사용해 방화벽을 구성하세요: + +``` +ufw allow 21114:21119/tcp +ufw allow 21116/udp +sudo ufw enable +``` + +## 설치하기 +### 방법 1: Docker (권장) + +``` +bash <(wget -qO- https://get.docker.com) +wget rustdesk.com/oss.yml -O compose.yml +sudo docker compose up -d +``` + +더 자세한 내용은 [Docker](/docs/ko/self-host/rustdesk-server-oss/docker/)를 확인해 주세요. + +### 방법 2: 간단하게 실행할 수 있는 설치 스크립트를 사용하여 자체 서버를 systemd 서비스로 설치하기 +스크립트는 [Techahold](https://github.com/techahold/rustdeskinstall)에 호스팅되어 있으며, 저희 [Discord](https://discord.com/invite/nDceKgxnkV)에서 지원됩니다. + +현재 스크립트는 릴레이 및 신호 서버(hbbr 및 hbbs)를 다운로드하고 설정하며, 구성 파일을 생성하고 비밀번호 보호된 웹페이지에 호스팅하여 클라이언트에 간편하게 배포합니다. + +다음 명령어를 실행하세요: + +``` +wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh +chmod +x install.sh +./install.sh +``` + +[Techahold's](https://github.com/techahold/rustdeskinstall) 리포지토리에도 업데이트 스크립트가 있습니다. + +거기에서 설치 끝에 표시된 IP/DNS와 키를 메모해 두고 이를 각각 클라이언트 설정 > 네트워크 > ID/릴레이 서버 `ID server` 및 `Key` 필드에 삽입하세요. 다른 필드는 비워두세요(아래 노트 참조). + +### 방법 3: Debian 배포판용 deb 파일을 사용하여 자체 서버를 systemd 서비스로 설치하기 + +[Download](https://github.com/rustdesk/rustdesk-server/releases/latest) deb 파일을 직접 다운로드하여 `apt-get -f install .deb` 또는 `dpkg -i .deb`로 설치해 주세요. + +## 서버 설치 후 클라이언트는 무엇이 필요합니까? + +서버가 실행된 후, 클라이언트는 보통 `ID Server` 주소와 서버 공개 `Key`를 필요로 합니다. RustDesk Server Pro 클라이언트를 구성하는 경우, `API Server`도 필요할 수 있습니다. [this](/docs/ko/self-host/client-configuration/#2-manual-config)를 확인해 주세요. \ No newline at end of file diff --git a/content/self-host/rustdesk-server-oss/synology/_index.ko.md b/content/self-host/rustdesk-server-oss/synology/_index.ko.md new file mode 100644 index 00000000..815da046 --- /dev/null +++ b/content/self-host/rustdesk-server-oss/synology/_index.ko.md @@ -0,0 +1,28 @@ +--- +title: Synology +weight: 22 +description: "Synology NAS에 RustDesk 서버 OSS를 셀프호스팅하세요. DSM 6 또는 DSM 7.2 컨테이너 관리자를 위한 올바른 가이드를 선택하고, 지원되는 Synology 모델에서 Docker를 사용해 배포하세요." +keywords: ["rustdesk synology", "rustdesk nas", "rustdesk synology docker", "rustdesk dsm 7.2", "rustdesk synology container manager"] +--- + +이 Synology 가이드를 사용하여 DSM 6 또는 DSM 7.2 Container Manager가 실행되는 NAS에서 RustDesk Server OSS를 자체 호스팅하십시오. + +Synology에는 "Docker"와 "Container Manager"의 두 가지 유형의 Docker가 있습니다. DSM 7.2 이상을 사용하는 경우 DSM 7.2용 가이드를 따르고, 이전 시스템을 사용하는 경우 DSM 6 가이드를 따르십시오. + +## 어떤 Synology 가이드를 선택해야 하나요? + +| Platform version | Best guide | +| --- | --- | +| DSM 7.2 and later | [Synology DSM 7.2](/docs/ko/self-host/rustdesk-server-oss/synology/dsm-7/) | +| Older Synology systems using the old Docker package | [Synology DSM 6](/docs/ko/self-host/rustdesk-server-oss/synology/dsm-6/) | + +## Synology 배포 체크리스트 + +1. NAS가 DSM 6 또는 DSM 7.2+를 실행하는지 확인하세요. +2. 해당 DSM 버전에 맞는 Docker 또는 Container Manager 패키지를 설치하세요. +3. 해당 패키지에 맞는 RustDesk 배포 가이드를 따르세요. +4. 필요한 RustDesk 포트를 열고 컨테이너 데이터의 지속적 저장소를 확인하세요. + +Portainer와 함께 Synology를 사용하는 경우, [this tutorial](https://mariushosting.com/how-to-install-rustdesk-on-your-synology-nas/)를 참조해 주세요. + +{{% children depth="3" showhidden="true" %}} \ No newline at end of file diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ko.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ko.md new file mode 100644 index 00000000..c7ed593d --- /dev/null +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ko.md @@ -0,0 +1,87 @@ +--- +title: Synology DSM 6 +weight: 22 +description: "Docker를 사용하여 Synology DSM 6에서 RustDesk 서버 OSS를 설치하기. 이전 Synology 시스템에서 컨테이너 설정, 포트 매핑 및 영구 데이터를 위한 DSM 6 워크플로우를 따르세요." +keywords: ["rustdesk synology dsm 6", "rustdesk synology docker", "rustdesk nas dsm 6", "rustdesk self-host synology"] +--- + +이 안내서를 사용하여 구형 NAS 시스템에서 Docker를 사용해 Synology DSM 6에 RustDesk 서버 OSS를 설치하세요. + +> 타사에서 제공하는 최신 대체 자습서는 [here](https://mariushosting.com/how-to-install-rustdesk-on-your-synology-nas/)입니다. + +이 자습서는 최신 DSM v6 및 v7을 기반으로 합니다. + +{{% notice note %}} +DSM 7.2 업데이트 이후 Docker가 새로운 "컨테이너 관리자"로 업그레이드되었으니, 대신 [this article](/docs/ko/self-host/rustdesk-server-oss/synology/dsm-7)를 확인해 주세요. +{{% /notice %}} + +## 언제 DSM 6 가이드를 사용해야 하나요? + +Synology NAS가 여전히 DSM 6에 있고, 이전 버전의 Docker 패키지를 통해 RustDesk 서버 OSS를 배포하는 경우에만 이 가이드를 사용하세요. NAS가 이미 DSM 7.2에 있다면 대신 컨테이너 관리자 가이드를 사용하세요. + +## DSM 6 배포 체크리스트 + +- NAS가 여전히 DSM 6을 실행하고 있는지 확인하세요. +- 패키지 센터에서 Synology `Docker` 패키지를 설치하세요. +- RustDesk 데이터와 키를 위한 영구적인 호스트 폴더를 생성하세요. +- 호스트 네트워킹과 자동 재시작이 활성화된 상태로 `hbbs`와 `hbbr`를 모두 실행하세요. +- 컨테이너가 시작된 후 `id_ed25519.pub`를 가져오세요. + +## Docker 설치하기 + +| 패키지 센터 열기 | Docker 설치하기 | +| --- | --- | +| ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/package-manager.png) | ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/docker.png) | + +## RustDesk 서버 설치하기 + +| Docker의 레지스트리에서 rustdesk-server를 검색하고 더블클릭하여 설치하기 | 설치된 rustdesk-server 이미지, 더블클릭하여 rustdesk-server 컨테이너 생성 | +| --- | --- | +| ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/pull-rustdesk-server.png) | ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/rustdesk-server-installed.png) | + +## hbbs 컨테이너 생성 + +위에서 언급한 대로, rustdesk-server 이미지를 두 번 클릭하여 새 컨테이너를 생성하고 이름을 `hbbs`로 설정합니다. +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/hbbs.png) + +위의 `Advanced Settings`를 클릭하세요. + +- `Enable auto-restart`를 활성화하세요. +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/auto-restart.png) + +- `Use the same network as Docker Host`를 활성화하세요. 호스트 네트에 대한 자세한 내용은 [check](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/docker/#net-host)를 참조하십시오. +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/host-net.png) + +- 호스트 디렉터리를 `/root`에 마운트하고(예: `/home/rustdesk/`), hbbs는 이 디렉터리에 일부 파일(데이터베이스 및 `key` 파일)을 생성하며, 이 파일들은 재부팅 후에도 지속되어야 합니다. + +| 마운트 | 호스트 디렉터리에 생성된 파일 | +| --- | --- | +| ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/mount.png) | ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/mounted-dir.png) | + +- 명령 설정 +{{% notice note %}} +Synology의 OS는 Debian 기반으로, 호스트 네트워크(--net=host)가 잘 작동하므로 `-p` 옵션으로 포트를 매핑할 필요가 없습니다. + +{{% /notice %}} + +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/hbbs-cmd.png?v3) + +- 완료 + +## hbbr 컨테이너 생성 + +위의 `hbbs` 단계를 반복하되, 컨테이너 이름을 `hbbr`로 하고 명령어(설정 명령 단계용)는 `hbbr`로 지정하십시오. + +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/hbbr-config.png) + +## hbbr/hbbs 컨테이너 + +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/containers.png) + +| 컨테이너를 두 번 클릭하고 로그 확인 | 호스트 네트워크를 사용하여 hbbs/hbbr를 이중 확인 | +| --- | --- | +| ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/log.png) | ![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-6/images/network-types.png) | + +## 키를 가져오세요 + +파일 스테이션을 사용하기 전에 폴더 설정으로 이동하여 `id_ed25519.pub`를 다운로드하고 텍스트 편집기로 열어 키를 통해 확인하세요. \ No newline at end of file diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.ko.md b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.ko.md new file mode 100644 index 00000000..6c67586b --- /dev/null +++ b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.ko.md @@ -0,0 +1,107 @@ +--- +title: Synology DSM 7.2 +weight: 20 +description: "Container Manager를 사용하여 Synology DSM 7.2에 RustDesk 서버 OSS를 설치하기. 최신 Synology Docker 워크플로우, 지원 모델 참고사항 및 컨테이너 설정 단계를 따르세요." +keywords: ["rustdesk synology dsm 7.2", "rustdesk container manager", "rustdesk synology nas", "rustdesk synology docker", "rustdesk self-host synology"] +--- + + +이 안내서를 사용하여 Synology DSM 7.2에서 Container Manager와 함께 RustDesk Server OSS를 설치하세요. + +DSM 7.2 업데이트 이후 Synology는 기존의 'Docker' 패키지를 'Container Manager'로 이름을 변경했습니다. 이는 새로운 GUI를 제공하며, GUI 내에 'docker-compose'가 포함되어 있어 Docker를 보다 쉽게 생성할 수 있게 해줍니다. + +## 언제 DSM 7.2 가이드를 사용해야 하나요? + +Synology NAS가 DSM 7.2를 실행하고 있으며 Synology Container Manager를 통해 RustDesk 서버를 배포하려는 경우 이 가이드를 사용하세요. 이는 현재 Synology의 권장 방식이며, 이전 DSM 6 Docker 워크플로우보다 유지보수가 더 용이합니다. + +## DSM 7.2 배포 체크리스트 + +- NAS 모델이 Container Manager를 지원하는지 확인하세요. +- 패키지 센터에서 `Container Manager`를 설치하세요. +- RustDesk 데이터를 위한 영구 공유 폴더를 생성하세요. +- `hbbs`와 `hbbr`를 하나의 compose 프로젝트에 배포하세요. +- `id_ed25519.pub`를 가져오고 클라이언트를 구성하세요. +- 라우터에서 필요한 RustDesk 포트를 포워딩하세요. + +## 지원되는 모델 및 요구사항 + +컨테이너 관리자는 J 시리즈와 같은 일부 저가형 모델에 대한 ARM64 지원을 제공합니다. 지원되는 모델의 자세한 목록은 [Synology website](https://www.synology.com/en-us/dsm/packages/ContainerManager)를 확인하십시오. +대부분의 경우 Docker와 RustDesk 서버를 설치하기 위해 추가 RAM을 설치할 필요가 없습니다. + +## 1. 컨테이너 관리자(Docker) 설치하기 + +"패키지 센터"를 열고, "컨테이너 관리자"를 검색하여 설치하세요. + +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_install_container_manager_though_package_center.png) + +## 2. 폴더 만들기 + +"컨테이너 관리자"를 설치한 후, `docker`라는 공유 폴더가 생성됩니다. 여기에 우리 서버의 데이터를 저장합시다. + +파일 스테이션을 열고 `rustdesk-server`(또는 원하는 이름)이라는 폴더를 만드세요. 그런 다음 그 안에 그림과 같이 `data`라는 폴더를 생성하세요. + +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_create_required_folders.png) + +## 3. 컨테이너 생성 + +컨테이너 관리자를 열고 프로젝트로 이동한 후 생성을 클릭하세요. + +프로젝트 이름을 `rustdesk-server`로 입력하고 소스를 "업로드 compose.yml"에서 "compose.yml 생성"으로 변경한 뒤, 다음 내용을 상자에 복사하세요. + +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_creating_project_init.png?v2) + +```yaml +services: + hbbs: + container_name: hbbs + image: rustdesk/rustdesk-server:latest # Please change this to rustdesk/rustdesk-server-pro:latest if you want to install Pro. + command: hbbs + volumes: + - ./data:/root + network_mode: host + depends_on: + - hbbr + restart: always + + hbbr: + container_name: hbbr + image: rustdesk/rustdesk-server:latest # Please change this to rustdesk/rustdesk-server-pro:latest if you want to install Pro. + command: hbbr + volumes: + - ./data:/root + network_mode: host + restart: always + +# Because using docker host mode +# Just in case you forgot the ports: +# 21114 TCP for web console, only available in Pro version +# 21115 TCP for NAT type test +# 21116 TCP TCP hole punching +# 21116 UDP heartbeat/ID server +# 21117 TCP relay +``` + +`Web portal settings`를 건너뛰기 후 완료하십시오. + +## 4. 작동하는지 확인하세요 + +파일 스테이션을 열면 `docker/rustdesk-server/data` 폴더에 `id_ed25519`, `id_ed25519.pub`가 표시됩니다. 이를 다운로드한 후 어떤 텍스트 편집기에서든 열거나 [Synology Text Editor](https://www.synology.com/en-us/dsm/packages/TextEditor)를 사용할 수 있습니다. 이는 RustDesk 클라이언트에 필요한 공개 키입니다. + +공개 키는 다음과 같이 보입니다: + +![](/docs/en/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_viewing_public_key_though_syno_text_editor.png) + +클라이언트를 설정하려면 [here](/docs/ko/client)를 확인하세요. `ID server`와 `Key`만 필요합니다. `Relay server`는 필요하지 않습니다. 왜냐하면 이미 `hbbs`에 설정해 놓았기 때문입니다. `hbbs`는 이 정보를 자동으로 제공합니다. + +## 5. 라우터에서 포트 포워딩 설정하기 + +라우터의 관리자 웹페이지로 이동하여 `Port forwarding`와 관련된 항목을 찾으세요. `WAN` 또는 `Firewall` 설정에 나타나야 합니다. + +아직 설정을 찾지 못했다면, Google에서 `{Router brand} + port forwarding` 또는 `{Router model} + port forwarding`를 검색해보세요. 이 장치가 ISP에서 제공한 것이라면 해당 업체에 문의하세요. + +다음과 같은 필수 포트를 열어주세요: + * 웹 콘솔용 `21114` TCP, 프로 버전에서만 사용 가능 + * NAT 유형 테스트용 `21115` TCP + * TCP 홀 펀칭용 `21116` TCP + * 심장 박동/ID 서버용 `21116` UDP + * 릴레이용 `21117` TCP \ No newline at end of file diff --git a/content/self-host/rustdesk-server-oss/windows/_index.ko.md b/content/self-host/rustdesk-server-oss/windows/_index.ko.md new file mode 100644 index 00000000..9224dfe9 --- /dev/null +++ b/content/self-host/rustdesk-server-oss/windows/_index.ko.md @@ -0,0 +1,140 @@ +--- +title: Windows 및 PM2 또는 NSSM +weight: 20 +description: "PM2 또는 NSSM을 사용하여 Windows에서 RustDesk Server OSS를 실행하세요. 이 안내서에서는 Windows에서 hbbs 및 hbbr를 호스팅하기 위한 장단점, 서비스 설정 단계 및 로그 명령에 대해 설명합니다." +keywords: ["rustdesk server windows", "rustdesk pm2", "rustdesk nssm", "rustdesk hbbs windows", "rustdesk hbbr windows", "rustdesk self-host windows"] +--- + +이 안내서를 사용하여 PM2 또는 NSSM을 통해 Windows에서 RustDesk Server OSS를 실행하십시오. 간단한 사용자 수준 설정을 원하는지, 아니면 Windows 서비스 관리를 원하는지에 따라 선택하세요. + +## Windows에서 RustDesk Server OSS를 실행해야 하나요? + +Windows에서도 RustDesk Server OSS를 실행할 수 있지만, 대부분의 프로덕션 배포에서는 여전히 Linux가 더 안정적인 기본 옵션입니다. Windows는 이미 Windows 서버를 운영하고 있고 서비스 모델을 잘 이해하는 팀에게는 적합하지만, 장기적인 자체 호스팅에는 더 취약한 경향이 있습니다. + +## PM2 vs NSSM + +| 방법 | 최적의 사용 사례 | 사용하는 이유 | +| --- | --- | --- | +| NSSM | 전용 Windows 서버 배포 | Windows 서비스로 실행되며 사용자 로그인 없이 시작됨 | +| PM2 | 혼합형 Windows 머신 또는 보다 간단한 운영자 워크플로우 | 이미 Node.js를 사용하고 주기적으로 호스트에 로그인하는 경우 관리가 더 용이함 | + +## Windows 자체 호스팅 체크리스트 + +1. RustDesk 서버 Windows 바이너리를 다운로드하세요. +2. NSSM과 PM2 중 어느 것이 더 적합한지 결정하세요. +3. 선택한 프로세스 관리자를 설치하세요. +4. `hbbs`와 `hbbr`를 등록하고 시작하세요. +5. 필요한 방화벽 포트를 열고 두 프로세스가 온라인 상태로 유지되는지 확인하세요. + +{{% notice note %}} +Windows 보안 정책은 까다롭습니다. 이 튜토리얼이 작동하지 않거나 불안정한 연결을 경험한다면, Linux 서버로 마이그레이션해주세요. +{{% /notice %}} + +{{% notice note %}} +GUI 버전인 `RustDeskServer.setup.exe`는 더 이상 유지보수가 되지 않으므로 권장하지 않습니다. +{{% /notice %}} + +## 갈림길 +이제 두 가지 선택지가 있습니다: PM2(더 쉬움) 또는 NSSM(조금 어려움)을 사용해 RustDesk 서버를 시작할 수 있습니다. +NSSM을 사용하는 데에는 몇 가지 장점이 있습니다: +- 이전 버전의 Windows(Windows Server 2008 R2/Windows 7 및 이전 버전)와의 하위 호환성(비록 테스트되지는 않았지만). +- Windows Server에 이상적입니다. +- 로그인 없이 부팅 시 자동으로 시작됩니다(시작 항목을 생성한 사용자가 로그인할 필요가 없습니다). +- 두 바이너리를 모두 서비스로 실행합니다. +- 독립형(노드.js에 의존하지 않음) + +PM2의 장점은 다음과 같습니다: +- 서버를 주 업무용 컴퓨터와 같은 컴퓨터에서 실행하는 경우 좋습니다. +- RustDesk 시작 항목을 생성한 사용자에게 정기적으로 로그인합니다. +- 사용자 친화적입니다. + +## NSSM을 이용한 설치 + +### NSSM 설치 +[download](https://github.com/dkxce/NSSM/releases/download/v2.25/NSSM_v2.25.zip)를 다운로드하고 NSSM을 선택한 후, Windows 시스템에 맞는 아키텍처를 선택하여 압축을 풀어주세요. (x86인 경우 win32 폴더의 내용을 사용하고, x64인 경우 win64 폴더의 내용을 사용하세요.) 또한 NSSM의 바이너리를 설치 드라이브의 `Program Files\NSSM` 디렉터리로 이동하는 것이 좋습니다(일단 서비스로 시작된 NSSM은 배치된 디렉터리에서 이동할 수 없으므로, `Program Files`에 보관하는 것이 가장 적합합니다). 또한 경로 변수에 해당 경로(`C:\Program Files\NSSM` 등)를 추가하는 것이 권장됩니다. + +### NSSM이 제대로 설치되었는지 확인하기 +모든 작업을 올바르게 수행했다면, 폴더 `C:\Program Files\NSSM`(이 예에서는 C: 드라이브를 사용했지만 Windows를 설치한 드라이브나 원하는 경로를 사용해도 됩니다)에는 파일 `nssm.exe`만 있어야 합니다. + +이 예에서는 `C:\Program Files\NSSM`를 사용하겠습니다. + +명령 프롬프트를 열고 `nssm`를 실행하세요. 도움말 페이지가 표시되면 다음 단계로 진행할 준비가 된 것입니다. + +### hbbr 및 hbbs 실행 +[RustDesk Server](https://github.com/rustdesk/rustdesk-server/releases)의 Windows 버전을 다운로드하세요. +프로그램을 `C:\Program Files\RustDesk Server`(또는 원하는 위치에 압축을 풀고, 서비스 설치 후 변경되지 않도록 하세요)에 압축 해제합니다. 이제 명령 프롬프트로 돌아가세요. + +이 예시에서는 `C:\Program Files\RustDesk Server`를 사용하겠습니다. + +```cmd +nssm install "RustDesk hbbs service" "C:\Program Files\RustDesk Server\hbbs.exe" +nssm install "RustDesk hbbr service" "C:\Program Files\RustDesk Server\hbbr.exe" +``` + +**노트:** +- `RustDesk hbbs service`를 원하는 이름으로 변경하여 hbbs 서비스로 지정할 수 있습니다. +- `RustDesk hbbr service`를 원하는 이름으로 변경하여 hbbr 서비스로 지정할 수 있습니다. +- `C:\Program Files\RustDesk Server\hbbs.exe`를 RustDesk 바이너리가 있는 위치로 변경할 수 있습니다. +- `C:\Program Files\RustDesk Server\hbbr.exe`를 RustDesk 바이너리가 있는 위치로 변경할 수 있습니다. + +**명령어 템플릿:** + +복사해서 붙여넣고 수정하기만 하면 되는 명령어 템플릿입니다. + +```cmd +nssm install +nssm install +``` + +**서비스 시작** + +서비스를 성공적으로 설치한 후에는 서비스를 시작해야 합니다. + +```cmd +nssm start +nssm start +``` + +**완료!** + +(위의 방법은 Windows Server Core 2022 Standard에서 테스트되었습니다.) + +## 또는 + +## PM2를 사용한 설치 + +### Node.js 설치하기 + +[download](https://nodejs.org/dist/v16.14.2/node-v16.14.2-x86.msi)를 열고 Node.js를 설치해주세요. +PM2의 런타임 환경이므로 먼저 Node.js를 설치해야 합니다. + +### PM2 설치하기 + +`cmd.exe`에 아래 명령어를 입력하고 각 줄마다 Enter 키를 누른 후 한 줄씩 실행해주세요. + +```cmd +npm install -g pm2 +npm install pm2-windows-startup -g +pm2-startup install +``` + +### hbbr 및 hbbs 실행 + +[RustDesk Server](https://github.com/rustdesk/rustdesk-server/releases)의 Windows 버전을 다운로드하세요. 프로그램을 C: 드라이브에 압축 해제하세요. 다음 네 가지 명령어를 실행하세요: + +```cmd +cd C:\rustdesk-server-windows-x64 +pm2 start hbbs.exe +pm2 start hbbr.exe +pm2 save +``` + +### 로그 보기 + +```cmd +pm2 log hbbr +pm2 log hbbs +``` + +## 대안 자습서 +https://pedja.supurovic.net/setting-up-self-hosted-rustdesk-server-on-windows/?lang=lat \ No newline at end of file