mirror of
https://github.com/rustdesk/doc.rustdesk.com.git
synced 2026-07-13 02:04:26 +00:00
docs(ko): translate self-host (OSS, config, deployment)
This commit is contained in:
@@ -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: "<b>2. </b>"
|
||||
---
|
||||
|
||||
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" %}}
|
||||
@@ -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: "<b>2.3. </b>"
|
||||
---
|
||||
|
||||
## 자체 호스팅 서버용 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)
|
||||
|
||||

|
||||

|
||||
|
||||
## 2. 수동 구성
|
||||
|
||||
메인 RustDesk 클라이언트 홈에서 ID 옆에 있는 메뉴 버튼 [ ⋮ ]을 클릭한 다음 네트워크를 클릭하세요. 이제 상승된 권한을 사용해 설정을 잠금 해제하고 `ID`, `Relay`, `API` 및 `Key`를 설정할 수 있습니다. 이 `Key`는 연결 암호화에 사용되는 공개 키이며, Pro 버전 구매 시 제공되는 라이선스 키와는 구분된다는 점에 유의하세요.
|
||||
|
||||

|
||||
|
||||
**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`를 추가로 가져올 수 있습니다.
|
||||
|
||||

|
||||
|
||||
### `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`에서 구성 가져오기
|
||||
|
||||

|
||||
|
||||
https://github.com/rustdesk/rustdesk-server-pro/discussions/372#discussioncomment-10473298
|
||||
|
||||
## 6. 명령줄 `--config` 사용
|
||||
`rustdesk.exe --config <config-string>`
|
||||
|
||||
웹 콘솔에서 구성 문자열을 얻을 수 있습니다(위 그림에서 확인할 수 있음) 또는 RustDesk 클라이언트의 "설정 → 네트워크"에서 얻을 수 있습니다([here](https://github.com/rustdesk/rustdesk/discussions/7118)는 이에 대한 논의입니다).
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,426 @@
|
||||
---
|
||||
title: 클라이언트 배포
|
||||
weight: 400
|
||||
pre: "<b>2.4. </b>"
|
||||
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/(?<content>.*)/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 <version>", 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 <api_token>
|
||||
```
|
||||
|
||||
macOS 및 Linux에서는 `sudo`와 함께 명령어를 실행하십시오:
|
||||
|
||||
```sh
|
||||
sudo rustdesk --deploy --token <api_token>
|
||||
```
|
||||
|
||||
### 선택적 사용자 지정 ID
|
||||
|
||||
특정 RustDesk ID로 장치를 배포하려면 `--id <custom_id>`를 추가하세요:
|
||||
|
||||
```sh
|
||||
rustdesk --deploy --token <api_token> --id <custom_id>
|
||||
```
|
||||
|
||||
ID가 이미 다른 기계에서 사용되고 있으면 배포가 실패하고 RustDesk는 해당 ID가 이미 사용 중이라고 보고합니다.
|
||||
|
||||
### Android
|
||||
|
||||
Android는 명령줄 배포 흐름을 사용하지 않습니다. 서버가 배포를 요구하고 Android 클라이언트가 아직 배포되지 않은 경우, RustDesk는 **배포** 프롬프트를 표시합니다. **확인**을 탭하고 배포 대화상자에 API 토큰을 입력한 다음, 선택적으로 사용자 지정 ID를 입력하세요. 또한 **설정 → 배포**에서 동일한 대화상자를 수동으로 열 수도 있습니다.
|
||||
|
||||
배포가 성공하면 장치가 서버 장치 목록에 추가되고 클라이언트는 정상적으로 등록할 수 있습니다.
|
||||
@@ -0,0 +1,155 @@
|
||||
---
|
||||
title: NAT 루프백 문제
|
||||
weight: 500
|
||||
pre: "<b>2.5. </b>"
|
||||
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 홈
|
||||
광고 차단 기능을 사용하면 문제가 발생할 수 있습니다. 해결 방법을 찾고 싶지 않고 이 기능을 비활성화하고 싶다면, '보호 비활성화' 버튼을 클릭하세요.
|
||||
|
||||

|
||||
<br>
|
||||
|
||||
'DNS 재작성' 설정으로 이동하세요.
|
||||
|
||||

|
||||
<br>
|
||||
|
||||
'DNS 재작성 추가'를 클릭한 다음, 필드에 `domain`와 서버의 `LAN IP`를 입력하세요.
|
||||
|
||||

|
||||
|
||||
다음은 최종 결과의 모습입니다.
|
||||
|
||||

|
||||
|
||||
***라우터의 LAN DHCP에 AdGuard 홈을 할당하는 것을 잊지 마세요!***
|
||||
<hr>
|
||||
|
||||
#### Pi-hole
|
||||
광고 차단 기능을 사용하면 문제가 발생할 수 있습니다. 해결 방법을 찾고 싶지 않고 이 기능을 비활성화하고 싶다면, '차단 비활성화' 하위 메뉴에서 '무기한' 버튼을 클릭하세요.
|
||||
|
||||

|
||||
|
||||
"로컬 DNS → DNS 레코드"로 이동하세요.
|
||||
상자에 `domain`와 `IP`를 입력한 다음, "추가"를 클릭하세요.
|
||||
|
||||
최종 결과를 확인하려면 이 그림의 노란색 선을 확인하세요.
|
||||
|
||||

|
||||
|
||||
***라우터의 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
|
||||
```
|
||||
|
||||
<hr>
|
||||
|
||||
형식은 세 운영 체제 모두 동일합니다. `IP`가 먼저 오고 그다음에 `domain`가 옵니다. 한 줄에 하나의 항목입니다.
|
||||
|
||||
예:
|
||||
|
||||
```text
|
||||
192.168.11.20 rustdesk.example.com
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
<a name="net-host"></a>
|
||||
|
||||
{{% 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
|
||||
```
|
||||
@@ -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: "<b>2.1. </b>"
|
||||
---
|
||||
|
||||
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" %}}
|
||||
@@ -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 <filename>.deb` 또는 `dpkg -i <filename>.deb`로 설치해 주세요.
|
||||
|
||||
## 서버 설치 후 클라이언트는 무엇이 필요합니까?
|
||||
|
||||
서버가 실행된 후, 클라이언트는 보통 `ID Server` 주소와 서버 공개 `Key`를 필요로 합니다. RustDesk Server Pro 클라이언트를 구성하는 경우, `API Server`도 필요할 수 있습니다. [this](/docs/ko/self-host/client-configuration/#2-manual-config)를 확인해 주세요.
|
||||
@@ -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" %}}
|
||||
@@ -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 설치하기 |
|
||||
| --- | --- |
|
||||
|  |  |
|
||||
|
||||
## RustDesk 서버 설치하기
|
||||
|
||||
| Docker의 레지스트리에서 rustdesk-server를 검색하고 더블클릭하여 설치하기 | 설치된 rustdesk-server 이미지, 더블클릭하여 rustdesk-server 컨테이너 생성 |
|
||||
| --- | --- |
|
||||
|  |  |
|
||||
|
||||
## hbbs 컨테이너 생성
|
||||
|
||||
위에서 언급한 대로, rustdesk-server 이미지를 두 번 클릭하여 새 컨테이너를 생성하고 이름을 `hbbs`로 설정합니다.
|
||||

|
||||
|
||||
위의 `Advanced Settings`를 클릭하세요.
|
||||
|
||||
- `Enable auto-restart`를 활성화하세요.
|
||||

|
||||
|
||||
- `Use the same network as Docker Host`를 활성화하세요. 호스트 네트에 대한 자세한 내용은 [check](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/docker/#net-host)를 참조하십시오.
|
||||

|
||||
|
||||
- 호스트 디렉터리를 `/root`에 마운트하고(예: `/home/rustdesk/`), hbbs는 이 디렉터리에 일부 파일(데이터베이스 및 `key` 파일)을 생성하며, 이 파일들은 재부팅 후에도 지속되어야 합니다.
|
||||
|
||||
| 마운트 | 호스트 디렉터리에 생성된 파일 |
|
||||
| --- | --- |
|
||||
|  |  |
|
||||
|
||||
- 명령 설정
|
||||
{{% notice note %}}
|
||||
Synology의 OS는 Debian 기반으로, 호스트 네트워크(--net=host)가 잘 작동하므로 `-p` 옵션으로 포트를 매핑할 필요가 없습니다.
|
||||
|
||||
{{% /notice %}}
|
||||
|
||||

|
||||
|
||||
- 완료
|
||||
|
||||
## hbbr 컨테이너 생성
|
||||
|
||||
위의 `hbbs` 단계를 반복하되, 컨테이너 이름을 `hbbr`로 하고 명령어(설정 명령 단계용)는 `hbbr`로 지정하십시오.
|
||||
|
||||

|
||||
|
||||
## hbbr/hbbs 컨테이너
|
||||
|
||||

|
||||
|
||||
| 컨테이너를 두 번 클릭하고 로그 확인 | 호스트 네트워크를 사용하여 hbbs/hbbr를 이중 확인 |
|
||||
| --- | --- |
|
||||
|  |  |
|
||||
|
||||
## 키를 가져오세요
|
||||
|
||||
파일 스테이션을 사용하기 전에 폴더 설정으로 이동하여 `id_ed25519.pub`를 다운로드하고 텍스트 편집기로 열어 키를 통해 확인하세요.
|
||||
@@ -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) 설치하기
|
||||
|
||||
"패키지 센터"를 열고, "컨테이너 관리자"를 검색하여 설치하세요.
|
||||
|
||||

|
||||
|
||||
## 2. 폴더 만들기
|
||||
|
||||
"컨테이너 관리자"를 설치한 후, `docker`라는 공유 폴더가 생성됩니다. 여기에 우리 서버의 데이터를 저장합시다.
|
||||
|
||||
파일 스테이션을 열고 `rustdesk-server`(또는 원하는 이름)이라는 폴더를 만드세요. 그런 다음 그 안에 그림과 같이 `data`라는 폴더를 생성하세요.
|
||||
|
||||

|
||||
|
||||
## 3. 컨테이너 생성
|
||||
|
||||
컨테이너 관리자를 열고 프로젝트로 이동한 후 생성을 클릭하세요.
|
||||
|
||||
프로젝트 이름을 `rustdesk-server`로 입력하고 소스를 "업로드 compose.yml"에서 "compose.yml 생성"으로 변경한 뒤, 다음 내용을 상자에 복사하세요.
|
||||
|
||||

|
||||
|
||||
```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 클라이언트에 필요한 공개 키입니다.
|
||||
|
||||
공개 키는 다음과 같이 보입니다:
|
||||
|
||||

|
||||
|
||||
클라이언트를 설정하려면 [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
|
||||
@@ -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 <Desired hbbs servicename> <RustDesk hbbs binary path> <RustDesk hbbs arguments>
|
||||
nssm install <Desired hbbr servicename> <RustDesk hbbr binary path> <RustDesk hbbr arguments>
|
||||
```
|
||||
|
||||
**서비스 시작**
|
||||
|
||||
서비스를 성공적으로 설치한 후에는 서비스를 시작해야 합니다.
|
||||
|
||||
```cmd
|
||||
nssm start <Desired hbbs servicename>
|
||||
nssm start <Desired hbbr servicename>
|
||||
```
|
||||
|
||||
**완료!**
|
||||
|
||||
(위의 방법은 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`에 아래 명령어를 입력하고 각 줄마다 <kbd>Enter</kbd> 키를 누른 후 한 줄씩 실행해주세요.
|
||||
|
||||
```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
|
||||
Reference in New Issue
Block a user