SSD Nodes Learn Hosting plans →
가이드 Matt Connor작성자 Matt Connor

Tailscale로 원격 데스크톱 연결하기: 포트포워딩 없이 집 PC 접속

공유기 3389 포트포워딩과 DDNS 없이 Tailscale로 집 Windows PC에 원격 데스크톱으로 접속합니다. Home 에디션 한계, 재부팅 후 무인 접속, 절전, tailnet 정책, 방화벽 범위 제한까지 실제로 막히는 지점과 확인 명령까지 정리했습니다.

포트포워딩 없이 Tailscale로 원격 데스크톱에 접속하는 방법

Tailscale로 원격 데스크톱을 쓰면 공유기에서 3389 포트를 열지 않고도 집 PC에 접속할 수 있습니다. 집 PC와 노트북(또는 휴대폰)에 Tailscale을 설치하고 같은 계정으로 로그인하면, 두 기기는 100.x.y.z 형태의 사설 주소로 서로 연결됩니다. 그 주소로 RDP(Remote Desktop Protocol, 원격 데스크톱 프로토콜) 클라이언트를 열면 끝입니다. 단, 접속을 받는 집 PC는 Windows Pro, Enterprise, Education 또는 Server 에디션이어야 합니다.

이 글은 설치에서 멈추지 않습니다. 재부팅 뒤에 접속이 끊기는 문제, 절전 모드, Home 에디션의 한계, 그리고 3389 포트를 내 기기에만 열어 두는 잠금 설정까지 순서대로 다룹니다. Tailscale 자체가 처음이라면 Tailscale이 무엇이고 어떻게 동작하는지를 먼저 읽어 두면 아래 용어가 훨씬 쉽게 읽힙니다.

3389 포트포워딩과 DDNS를 그만둬야 하는 이유

국내 원격 데스크톱 가이드는 대부분 같은 순서로 시작합니다. ipTIME 관리 페이지에서 3389 포트를 집 PC로 포트포워딩하고, xxx.iptime.org 같은 DDNS(동적 DNS) 주소를 만들어 밖에서 접속합니다. 이 방식은 동작합니다. 문제는 집 PC의 로그인 화면이 인터넷 전체에 공개된다는 점입니다.

3389는 RDP의 기본 포트이고, 인터넷에는 이 포트만 찾아다니는 스캐너가 늘 돌고 있습니다. 포트가 열려 있으면 비밀번호 대입 공격(무차별 대입, brute force)이 곧 시작됩니다. 지금 포트포워딩을 쓰고 있다면 집 PC의 보안 로그에서 직접 확인할 수 있습니다. 관리자 PowerShell에서 실행하세요.

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 20

이벤트 ID 4625는 로그온 실패 기록입니다. 본인이 시도한 적 없는 사용자 이름(administrator, admin, user 등)으로 실패가 쌓여 있다면, 그것이 외부에서 들어온 대입 시도입니다.

Tailscale을 쓰면 이 구조가 바뀝니다. 집 PC는 인터넷 쪽으로 아무 포트도 열지 않습니다. 대신 Tailscale이 바깥으로 연결을 만들고, 내 tailnet(같은 Tailscale 계정에 묶인 기기들의 사설 네트워크)에 속한 기기만 그 연결을 통해 들어올 수 있습니다. 이 원리는 포트포워딩 대신 Tailscale을 쓰는 방법에서 더 자세히 설명합니다. 설정을 모두 마친 뒤에는 ipTIME의 고급 설정 > NAT/라우터 관리 > 포트포워드 설정에서 3389 규칙을 꼭 삭제하세요. 규칙이 남아 있으면 Tailscale을 설치해도 공개 포트는 그대로 열려 있습니다.

먼저 Windows 에디션을 확인하세요: Home은 접속만 됩니다

원격 데스크톱에는 두 역할이 있습니다. 접속을 하는 쪽(클라이언트)과 접속을 받는 쪽(호스트)입니다. Windows Home도 클라이언트로는 다른 PC에 접속할 수 있습니다. 하지만 Home은 호스트가 될 수 없습니다. Tailscale의 공식 RDP 가이드도 접속받는 PC의 조건으로 Pro, Enterprise, Education, Server 에디션을 적고 있습니다.

집 PC의 에디션은 PowerShell에서 바로 확인할 수 있습니다.

(Get-CimInstance Win32_OperatingSystem).Caption

Microsoft Windows 11 Pro처럼 나오면 계속 진행하면 됩니다. Microsoft Windows 11 Home이 나오면 설정 > 시스템 > 원격 데스크톱 화면에도 켜는 스위치 대신 Home 에디션은 원격 데스크톱을 지원하지 않는다는 안내가 보입니다.

Home 사용자에게 현실적인 선택지는 두 가지입니다. 첫째, 설정 > 시스템 > 정품 인증에서 Pro로 업그레이드합니다. 그러면 이 글의 나머지 단계를 그대로 따를 수 있습니다. 둘째, RDP 대신 Chrome 원격 데스크톱처럼 Home에서도 무인 접속을 지원하는 도구를 씁니다. 이 경우 연결은 Tailscale이 아니라 Google의 중계 서버를 거칩니다. 인터넷에 떠도는 RDP Wrapper 같은 레지스트리·DLL 패치는 권하지 않습니다. Windows 업데이트가 시스템 파일을 바꿀 때마다 깨지기 쉽고, 라이선스 조건에도 맞지 않기 때문입니다.

두 기기에 Tailscale 설치하고 같은 tailnet에 넣기

  1. 집 PC에서 Tailscale 다운로드 페이지의 Windows 설치 파일을 받아 설치합니다.
  2. 트레이 아이콘에서 로그인합니다. Google, Microsoft, Apple 계정 같은 SSO(single sign-on, 통합 로그인)를 씁니다. 처음 로그인하면 tailnet이 자동으로 만들어집니다.
  3. 접속할 기기(노트북, Mac, iPhone, Android)에도 Tailscale을 설치하고 같은 계정으로 로그인합니다. 휴대폰은 App Store나 Google Play에서 설치합니다.
  4. 관리 콘솔의 Machines 페이지에 두 기기가 모두 보이는지 확인합니다.

집 PC에서 아래 명령을 실행하면 tailnet 안의 기기 목록과 각 기기의 100.x 주소가 나옵니다.

tailscale status

첫 줄이 집 PC 자신이고, 접속할 노트북이 다른 줄에 보이면 두 기기가 같은 tailnet에 있다는 뜻입니다. 노트북이 목록에 없다면 다른 계정으로 로그인한 것입니다. 개인 사용이라면 무료 플랜으로 충분하며, 한도는 Tailscale 무료 플랜의 사용자와 기기 한도에 정리되어 있습니다.

집 PC에서 원격 데스크톱 켜기

집 PC에서 설정 > 시스템 > 원격 데스크톱으로 가서 원격 데스크톱을 켭니다. 확인 창이 뜨면 승인합니다. 같은 화면에 있는 NLA(Network Level Authentication, 네트워크 수준 인증) 옵션은 켜 둔 채로 두세요. NLA는 원격 세션 화면을 만들기 전에 먼저 자격 증명을 확인하므로, 인증 전에 PC 자원을 쓰는 일을 막습니다.

RDP 서비스가 실제로 포트를 듣고 있는지 확인합니다.

Get-NetTCPConnection -LocalPort 3389 -State Listen

LocalPort가 3389인 줄이 하나 이상 나오면 정상입니다. No matching MSFT_NetTCPConnection objects found 오류가 나오면 아무것도 3389를 듣고 있지 않다는 뜻입니다. 원격 데스크톱이 아직 꺼져 있거나, 에디션이 Home입니다.

재부팅 뒤에도 접속되게: Run unattended와 키 만료

여기서 대부분의 가이드가 멈추고, 실제 사용에서 가장 먼저 막히는 곳도 여기입니다. Windows용 Tailscale은 기본적으로 로그인한 Windows 사용자에게 묶여 동작합니다. 그래서 Windows 업데이트로 PC가 재부팅되어 로그인 화면에 머물러 있으면, Tailscale이 연결되지 않아 PC가 tailnet에서 사라질 수 있습니다. 원격 데스크톱은 바로 그 로그인 화면에 들어가야 하는 도구이므로, 이 상태로는 쓸 수 없습니다.

해결책은 Tailscale의 무인 모드(unattended mode)입니다. 트레이 아이콘을 우클릭하고 Preferences > Run unattended를 선택한 뒤 확인 창에서 Yes를 누릅니다. 명령으로도 켤 수 있습니다.

tailscale set --unattended=true

무인 모드를 켜면 Windows 사용자가 로그아웃하거나 PC가 재시작된 뒤에도 Tailscale이 같은 프로필로 계속 연결을 유지합니다. 확인은 간단합니다. 집 PC를 재부팅한 뒤 아무도 로그인하지 않은 상태에서, 노트북의 tailscale status에 집 PC가 offline 표시 없이 보이면 성공입니다.

두 번째 함정은 키 만료입니다. Tailscale 기기 키는 기본적으로 180일이 지나면 만료되고, 만료된 기기는 다시 로그인할 때까지 tailnet에서 빠집니다. 집에 두고 쓰는 PC는 아무도 그 로그인 창을 눌러 주지 않습니다. 관리 콘솔의 Machines 페이지에서 집 PC 오른쪽의 ... 메뉴를 열고 Disable key expiry를 선택하세요. 이 기기에만 만료를 끄는 설정입니다.

잠든 PC는 tailnet에 없습니다: 절전 설정

절전(sleep) 상태의 PC는 네트워크가 꺼져 있습니다. Tailscale도 멈추므로 tailnet에서 offline으로 보이고, 원격 데스크톱으로 깨울 방법이 없습니다. WoL(Wake-on-LAN, 네트워크로 깨우기)은 같은 LAN 안의 브로드캐스트 패킷이라 Tailscale 너머로는 그대로 전달되지 않습니다.

데스크톱 PC라면 전원이 연결된 상태에서 절전과 최대 절전을 끄는 것이 가장 확실합니다. 설정 > 시스템 > 전원(노트북은 전원 및 배터리)에서 바꾸거나, 관리자 PowerShell에서 실행합니다.

powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0

0은 "사용 안 함"을 뜻합니다. 화면 끄기(monitor-timeout-ac)는 그대로 두어도 됩니다. 화면이 꺼져도 PC는 깨어 있기 때문입니다. 노트북을 호스트로 쓴다면 덮개를 닫을 때의 동작도 확인하세요. 덮개를 닫으면 절전으로 들어가는 설정이 기본인 경우가 많습니다.

100.x 주소나 MagicDNS 이름으로 접속하기

접속할 주소는 두 가지 중 하나를 씁니다. 하나는 집 PC의 Tailscale IP(100.x.y.z)입니다. 다른 하나는 MagicDNS 이름입니다. MagicDNS는 Tailscale이 tailnet 기기마다 자동으로 붙여 주는 이름으로, 짧은 이름(home-pc)이나 전체 이름(home-pc.tailXXXX.ts.net)으로 쓸 수 있습니다. IP는 기기를 지우고 다시 등록하면 바뀔 수 있으므로, 평소에는 MagicDNS 이름을 권합니다.

클라이언트 프로그램은 플랫폼마다 다릅니다(2026년 10월 기준).

  • Windows: 기본 내장된 원격 데스크톱 연결(mstsc)을 씁니다. Win + R을 누르고 mstsc를 입력한 뒤, 컴퓨터 칸에 home-pc를 넣습니다.
  • macOS: Mac App Store의 Windows App을 씁니다. Microsoft가 예전의 Microsoft Remote Desktop 앱을 이 이름으로 바꿨습니다. PC를 추가하고 PC 이름에 home-pc를 넣습니다.
  • iPhone, iPad: App Store의 Windows App을 씁니다. 접속 전에 Tailscale 앱의 VPN 연결이 켜져 있어야 합니다.
  • Android: Google Play의 Windows App(예전 이름 Remote Desktop)을 씁니다. 마찬가지로 Tailscale이 켜져 있어야 합니다.

로그인 정보는 집 PC의 Windows 계정입니다. Microsoft 계정으로 로그인하는 PC라면 사용자 이름은 그 계정 이메일이고, 비밀번호는 PIN이 아니라 Microsoft 계정 비밀번호입니다. PIN은 그 PC 앞에서만 쓰는 Windows Hello 로그인 수단이라서 RDP는 받지 않습니다. PIN으로 시도하면 Your credentials did not work(한국어 Windows에서는 같은 뜻의 자격 증명 오류)가 나옵니다.

접속 전에 경로만 따로 확인하고 싶다면 Windows 클라이언트에서 실행합니다.

Test-NetConnection home-pc -Port 3389

TcpTestSucceeded : True가 나오면 tailnet을 거쳐 RDP 포트까지 닿은 것입니다. Mac에서는 nc -vz home-pc 3389의 결과에 succeeded!가 있는지 보면 됩니다.

tailnet 정책으로 3389를 내 기기에만 열기

Tailscale의 기본 정책은 tailnet 안의 모든 기기가 다른 모든 기기의 모든 포트에 접속할 수 있게 허용합니다. 혼자 쓰는 tailnet이라면 큰 문제가 없어 보입니다. 하지만 가족을 초대했거나 VPS나 공유 기기를 넣어 두었다면, 그 기기들도 집 PC의 3389에 닿을 수 있습니다. 그 기기 중 하나가 뚫리면 다음 목표가 집 PC의 로그인 화면이 됩니다.

관리 콘솔의 Access controls 페이지에서 tailnet 정책 파일을 엽니다. 기본 파일에는 대략 이런 전체 허용 규칙이 들어 있습니다.

{
  "acls": [
    {"action": "accept", "src": ["*"], "dst": ["*:*"]}
  ]
}

이 전체 허용 규칙을 지우고, 아래 grant로 바꿉니다. grant는 Tailscale의 현재 접근 규칙 문법입니다.

{
  "grants": [
    {
      "src": ["autogroup:member"],
      "dst": ["autogroup:self"],
      "ip": ["tcp:3389", "udp:3389"]
    }
  ]
}

autogroup:member는 tailnet의 사용자 전체이고, autogroup:self는 "접속을 시도하는 그 사용자 자신의 기기"를 뜻합니다. 그래서 이 규칙은 각 사용자가 자기 기기에만 3389로 접속하게 허용합니다. 가족 구성원의 노트북은 내 집 PC에 닿지 못합니다. udp:3389도 함께 넣은 이유는 RDP가 TCP 연결 외에 UDP 전송도 쓰기 때문입니다. UDP가 막혀도 접속은 되지만, 화면 전송이 TCP로만 이뤄져 더 느려집니다.

Tailscale 정책은 기본이 거부입니다. 따라서 전체 허용 규칙을 지우면, 이 grant에 적지 않은 다른 통신(예를 들어 기기 사이의 파일 공유나 다른 서비스 포트)도 함께 막힙니다. 필요한 통신은 grant를 하나씩 추가해서 다시 여세요. 이 규칙은 접속을 받는 기기의 Tailscale이 직접 걸러 내므로, 허용되지 않은 패킷은 집 PC의 RDP 서비스에 닿기 전에 버려집니다. 정책을 어디까지 믿을 수 있는지 궁금하다면 Tailscale의 보안 구조와 조정 서버가 볼 수 있는 것을 참고하세요.

Windows 방화벽 원격 데스크톱 규칙을 Tailscale 대역으로 좁히기

tailnet 정책은 Tailscale을 거쳐 오는 연결만 거릅니다. 같은 집 LAN에 있는 다른 기기, 예를 들어 감염된 IoT 기기나 손님의 노트북은 Tailscale을 거치지 않고 192.168.0.x 주소로 3389에 바로 접속할 수 있습니다. 이 경로는 Windows 방화벽에서 막아야 합니다.

먼저 현재 원격 데스크톱 규칙이 무엇을 허용하는지 직접 확인합니다. 규칙 그룹 이름은 한국어 Windows에서 "원격 데스크톱"으로 번역되어 있습니다. 그래서 언어와 상관없이 같은 그룹을 가리키는 그룹 ID @FirewallAPI.dll,-28752를 씁니다.

Get-NetFirewallRule -Group "@FirewallAPI.dll,-28752" | ForEach-Object {
  [pscustomobject]@{
    Rule    = $_.DisplayName
    Enabled = $_.Enabled
    Profile = $_.Profile
    Remote  = (($_ | Get-NetFirewallAddressFilter).RemoteAddress -join ', ')
  }
}

Remote 열이 Any라면 어떤 주소에서 오든 허용한다는 뜻이고, LocalSubnet이라면 같은 LAN에서 오는 연결을 허용한다는 뜻입니다. Enabled가 True인 규칙이 실제로 적용 중인 규칙입니다.

이제 원격 주소를 Tailscale 대역으로 좁힙니다. Tailscale은 IPv4 주소를 100.64.0.0/10 범위(CGNAT, 통신사급 NAT용으로 예약된 공유 주소 대역)에서, IPv6 주소를 fd7a:115c:a1e0::/48에서 나눠 줍니다. MagicDNS 이름은 IPv6 주소로도 해석될 수 있으므로 두 범위를 모두 넣어야 합니다. IPv4만 넣으면 클라이언트가 IPv6로 접속할 때 방화벽이 막습니다. 그러면 100.x 주소로는 되는데 이름으로는 안 되는 현상이 생깁니다.

Set-NetFirewallRule -Group "@FirewallAPI.dll,-28752" -RemoteAddress "100.64.0.0/10","fd7a:115c:a1e0::/48"

위의 확인 명령을 다시 실행해서 Remote 열이 두 범위로 바뀌었는지 봅니다. 이 설정 뒤에는 집 안에서도 192.168.0.x 주소로는 접속되지 않습니다. 집 안에서도 home-pc 이름으로 접속하면 됩니다.

마지막으로, 예전에 포트포워딩을 하면서 3389용 규칙을 따로 만들어 둔 적이 있다면 그 규칙은 위 그룹에 속하지 않아 그대로 남습니다. 3389를 여는 모든 규칙을 찾으려면 실행합니다.

Get-NetFirewallPortFilter | Where-Object LocalPort -eq 3389 | Get-NetFirewallRule | Format-Table DisplayName, Enabled, Group

Group이 비어 있는 규칙이 있다면 직접 만든 규칙입니다. 필요 없으면 비활성화하거나 같은 방식으로 범위를 좁히세요.

원격 데스크톱이 느리고 끊길 때: 직접 연결인지 확인

접속은 되는데 마우스가 늦게 따라오고 화면이 뭉개진다면, 연결이 중계(relayed) 상태일 가능성이 큽니다. Tailscale은 먼저 두 기기를 직접 잇는 경로를 찾고, 양쪽 NAT(network address translation, 네트워크 주소 변환) 때문에 실패하면 DERP(Designated Encrypted Relay for Packets)라는 Tailscale 중계 서버를 거칩니다. RDP는 키 입력과 화면 갱신이 계속 왕복하는 프로토콜이라, 중계 서버까지 돌아가는 거리가 그대로 지연으로 느껴집니다. 중계 서버의 대역폭도 직접 연결보다 제한적입니다. 클라이언트에서 tailscale ping home-pc를 실행해 결과에 via DERP(...)가 계속 나오면 중계 상태이고, IP 주소와 포트가 나오면 직접 연결입니다. 원인 찾기와 해결 방법은 Tailscale이 느릴 때 직접 연결과 중계 연결을 구분하는 방법에 정리해 두었습니다.

원격 데스크톱 접속이 안 될 때 확인할 순서

"원격 컴퓨터에 연결할 수 없습니다" 류의 오류가 나옵니다. 영어 Windows에서는 Remote Desktop can't connect to the remote computer로 시작합니다. 이 메시지는 원인을 구분하지 않으므로 아래 순서대로 좁힙니다. 먼저 tailscale status에서 집 PC가 offline인지 봅니다. offline이면 절전, 무인 모드, 키 만료 중 하나입니다. online인데 Test-NetConnection home-pc -Port 3389가 실패하면 tailnet 정책이나 Windows 방화벽이 막고 있습니다. 둘 다 통과하는데도 실패하면 원격 데스크톱 자체가 꺼져 있는지 Get-NetTCPConnection -LocalPort 3389 -State Listen으로 확인합니다.

재부팅 뒤에만 접속이 안 됩니다. 무인 모드가 꺼져 있다는 신호입니다. 누군가 집 PC에 로그인하면 다시 보이는 패턴이라면 거의 확실합니다.

몇 달 잘 되다가 갑자기 안 됩니다. 관리 콘솔의 Machines 페이지에서 집 PC에 Expired 표시가 있는지 봅니다. 있다면 키가 만료된 것입니다. PC 앞에서 다시 로그인하고 키 만료를 끄세요.

100.x로는 되는데 이름으로는 안 됩니다. MagicDNS가 IPv6 주소를 돌려주는데 방화벽에 IPv6 범위가 없는 경우입니다. 위의 Set-NetFirewallRule 명령에 fd7a:115c:a1e0::/48이 들어 있는지 확인하세요.

같은 방식으로 Linux VPS 데스크톱도 지키기

여기서 쓴 원칙은 Windows에만 해당하지 않습니다. 원격 데스크톱 포트는 인터넷에 열지 않고, tailnet 안에서 내 기기의 접속만 받게 하는 것입니다. Linux VPS에 xrdp나 VNC로 데스크톱 환경을 올릴 때도 같은 구조가 그대로 통합니다. 서버 방화벽에서 3389나 5901을 공개 인터페이스에 열지 않고 tailscale0 인터페이스에만 열면 됩니다. 구체적인 설치 과정은 Linux VPS에 원격 데스크톱 환경을 올리는 방법에서 다룹니다.

FAQ

Windows Home PC에 Tailscale로 원격 데스크톱 접속을 할 수 있나요?

Home PC에서 다른 PC로 접속하는 것은 됩니다. Home PC가 접속을 받는 것은 안 됩니다. Windows Home에는 원격 데스크톱 호스트 기능이 없고, Tailscale도 이 제한을 바꾸지 못합니다. Pro로 업그레이드하거나, Chrome 원격 데스크톱처럼 Home에서 무인 접속을 지원하는 다른 도구를 쓰세요. RDP Wrapper 같은 패치는 업데이트 때마다 깨지기 쉽고 라이선스 조건에도 맞지 않습니다.

집 PC를 재부팅하면 Tailscale 원격 데스크톱이 안 되는 이유는 무엇인가요?

Windows용 Tailscale은 기본적으로 로그인한 사용자에게 묶여 동작합니다. 그래서 PC가 재부팅되어 로그인 화면에 머물면 tailnet에서 사라질 수 있습니다. 트레이 아이콘의 Preferences > Run unattended를 켜거나 tailscale set --unattended=true를 실행하면, 아무도 로그인하지 않아도 연결이 유지됩니다. 몇 달 뒤 갑자기 끊긴다면 관리 콘솔에서 그 기기의 키 만료(Disable key expiry)도 끄세요.

Tailscale을 쓰면 공유기 포트포워딩은 지워도 되나요?

지워야 합니다. Tailscale은 공개 포트 없이 연결을 만들기 때문에 3389 포트포워딩이 필요 없습니다. 규칙을 남겨 두면 집 PC의 로그인 화면이 계속 인터넷에 공개되어 비밀번호 대입 공격을 받습니다. ipTIME이라면 고급 설정 > NAT/라우터 관리 > 포트포워드 설정에서 3389 규칙을 삭제하세요.

Tailscale 원격 데스크톱 접속 시 비밀번호가 맞는데 로그인이 안 됩니다. 왜 그런가요?

Microsoft 계정으로 로그인하는 PC라면 PIN을 넣고 있을 가능성이 큽니다. RDP는 PIN을 받지 않습니다. 사용자 이름에는 Microsoft 계정 이메일을, 비밀번호에는 Microsoft 계정 비밀번호를 넣으세요. 로컬 계정이라면 그 계정의 Windows 비밀번호를 씁니다.

Windows 방화벽에서 원격 데스크톱을 Tailscale에서만 허용하려면 어떻게 하나요?

관리자 PowerShell에서 Set-NetFirewallRule -Group "@FirewallAPI.dll,-28752" -RemoteAddress "100.64.0.0/10","fd7a:115c:a1e0::/48"을 실행합니다. 이 그룹 ID는 한국어 Windows에서도 원격 데스크톱 규칙 그룹을 가리킵니다. 두 범위는 Tailscale의 IPv4와 IPv6 주소 대역입니다. IPv6 범위를 빼면 MagicDNS 이름으로 접속할 때 막힐 수 있습니다. 적용 후 Get-NetFirewallRule -Group "@FirewallAPI.dll,-28752" | Get-NetFirewallAddressFilter로 원격 주소가 바뀌었는지 확인하세요.