[Tailscale #-] 노트북 → 데스크톱 원격 개발 + 외부 접근 환경 구축

이서진·2026년 9월 9일

[Infrastructure]

목록 보기
5/9
post-thumbnail

1. 목표

이 글을 통해 얻어갈 수 있는 것

  1. 노트북에서 데스크톱 개발환경(WSL2, Docker, Kubernetes)에 SSH로 접속하는 구조
  2. Tailscale로 서로 다른 네트워크에 있는 기기를 연결하는 방법
  3. VS Code Remote-SSH로 파일 복사 없이 원격 프로젝트 편집하는 방법
  4. WSL2에서 띄운 Kubernetes 서비스를 노트북 브라우저로 접근하는 방법
  5. SSH·경로·네트워크 관련 오류 원인과 해결 방법

2. 전체 환경 및 아키텍처

2-1. Windows 데스크톱 + 노트북 원격 개발 환경

  • 노트북: VS Code 클라이언트, 코드 편집만 담당
  • 데스크톱: 실제 개발/실행 환경. WSL2, Docker, Kubernetes 전부 여기서 동작
  • 원칙: 프로젝트 파일을 cp/scp로 계속 복사하지 않고, 데스크톱 환경을 노트북에서 그대로 사용

2-2. Windows / WSL2 / Docker / Kubernetes 구성

			Tailscale
      │					  │
      ▼					  ▼
┌───────────┐      	┌──────────────┐
│  laptop  │ ─────▶	│   desktop   │
└───────────┘    	│   Windows   │
					│             │
                  	│  OpenSSH    │
                  	│  Tailscale  │
                 	│      │      │
                 	│      ▼      │
                  	│    WSL2     │
                  	│      │      │
                  	│      ▼      │
                  	│  Kubernetes │
                  	│      │      │
                  	│      ▼      │
                  	│    Nginx    │
                  	└──────────────┘
[laptop] ── Tailscale ──▶ [desktop Windows]
   │ VS Code                    │ OpenSSH / Remote-SSH
                                 ▼
                             WSL2 Linux
                             ├── Docker
                             ├── kind / kubectl
                             └── Kubernetes → Nginx
  • Windows: OpenSSH Server, Docker Desktop, Tailscale
  • WSL2(Ubuntu): 실제 개발 작업 공간, kubectl/kind 실행
  • Kubernetes(kind): Docker 컨테이너로 노드 구성

3. Tailscale 네트워크 구성

3-1. 서로 다른 네트워크에서 개발 환경에 접근해야 했던 이유

  • 노트북과 데스크톱이 항상 같은 공유기 밑에 있는 건 아님. 카페, 학교 등 다른 네트워크에서도 데스크톱에 붙어야 하는 상황
  • 공유기 포트포워딩으로 직접 열어두는 방식은 보안·설정 부담이 큼
  • Tailscale: 서로 다른 네트워크의 기기를 VPN처럼 사설망으로 묶어주는 도구. 어느 네트워크에서든 같은 사설 IP로 접속 가능

3-2. Tailscale 설치 및 연결

Windows

  1. tailscale.com에서 설치 파일 다운로드 및 설치
  2. 트레이 아이콘 → 로그인 (Google/Microsoft/GitHub 계정 등)
  3. 로그인 계정 기준으로 기기가 Tailnet에 등록

WSL2(Ubuntu)

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
  • 출력되는 인증 URL을 브라우저에서 열어 동일 계정으로 로그인
  • WSL2도 별도 기기로 Tailnet에 등록됨

Tailscale IP 확인

<tailscale ip> -4
  • Windows 쪽 명령과 WSL2 쪽 명령이 서로 다른 IP를 출력

3-3. Windows와 WSL2의 네트워크 구성

  • Windows Tailscale IP, WSL2 Tailscale IP는 각각 별개로 발급됨
  • 즉 한 데스크톱 안에 Tailnet 상 두 개의 서로 다른 노드가 존재하는 셈
  • Windows 접속용 IP와 WSL2 서비스 접근용 IP를 구분해서 써야 함

4. SSH와 VS Code Remote-SSH 구성

4-1. Windows OpenSSH Server 설정

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue
Get-NetTCPConnection -LocalPort 22 -State Listen

4-2. Tailscale을 통한 SSH 접속

ssh <user>@<tailscale ip>
  • 계정 관련 삽질: 초기엔 SSH 비밀번호가 없어서 sshuser 계정 별도 생성
  • sshuser로 접속 후 wsl 실행 시 기존 user 계정의 Ubuntu가 안 보임
    • 원인: WSL 배포판은 Windows 계정 단위로 등록. 새 계정 생성으로 자동 연결 안 됨
  • chmod로 권한 문제인 줄 알고 삽질했으나 실패 (계정/WSL 등록 문제였음)
  • 결론: sshuser 삭제, 기존 환경 있는 user 계정으로 SSH 통일
데스크톱: user (WSL Ubuntu, Docker Desktop, Kubernetes)
노트북: SSH → user@<tailscale ip>
  • wsl 명령은 실행 위치에 따라 결과가 다름
    • 노트북에서 wsl → 노트북 WSL
    • SSH로 데스크톱 접속 후 wsl → 데스크톱 WSL

4-3. VS Code Remote-SSH를 이용한 원격 개발

  • Remote-SSH로 데스크톱 프로젝트 폴더 직접 오픈
    • 편집: 노트북 VS Code
    • 실행: 데스크톱 WSL
    • Docker/Kubernetes: 전부 데스크톱 자원 사용
  • Remote-SSH 접속 상태 = VS Code 파일 탐색기가 데스크톱 파일을 보는 것 → 복사/동기화 불필요
  • Git 저장소
    데스크톱: \\wsl$\Ubuntu\home\user\
     노트북: C:\Users\user\

4-4. Windows와 WSL2 경로 이해

  • /mnt/c = 현재 실행 중인 WSL이 속한 Windows의 C 드라이브
  • ~ = /home/user

5. Kubernetes 서비스 외부 접근

WSL2 위에 로컬 테스트용 Kubernetes 클러스터가 떠 있고, Nginx Pod가 배포된 상태를 전제로 함.

5-1. Nginx Pod 실행

  • 클러스터에 Nginx Pod 배포, 정상 기동 확인

5-2. kubectl port-forward

kubectl port-forward pod/nginx 8080:80

5-3. localhost 접근 문제

  • 기본값은 127.0.0.1에만 bind
  • WSL2 내부에서는 열리는데, 노트북 브라우저에서는 접근 안 됨

5-4. --address를 이용한 외부 접근

kubectl port-forward --address 0.0.0.0 pod/nginx 8080:80
# 특정 인터페이스만 열고 싶으면
kubectl port-forward --address <tailscale ip> pod/nginx 8080:80
  • 0.0.0.0: 모든 IPv4 인터페이스에서 listen
  • 특정 IP 지정: 해당 인터페이스로만 접근 범위 제한
  • bind만 해준다고 외부 접근이 자동으로 되는 건 아님. Tailscale, WSL2 네트워크, 방화벽까지 같이 맞아야 함

5-5. Tailscale을 통한 노트북 브라우저 접근

  • Windows에만 Tailscale 깔았을 땐 Remote-SSH는 문제없었는데, port-forward를 노트북에서 접근하려니 WSL2 자체 네트워크 인터페이스가 필요했음
  • WSL2에 Tailscale 추가 설치 → 별도 IP 확보 → 그 IP로 --address 바인딩 → 노트북 브라우저에서 Nginx 확인 성공
노트북 → Tailscale → WSL2(<WSL2 tailscale ip>:8080) → port-forward → Nginx Pod:80
  • Tailscale 공식 문서는 Windows+WSL2 동시 실행을 advanced 구성으로 분류. 필수는 아니고, 지금 잘 되면 굳이 안 바꿔도 됨

6. 네트워크 구성 대안 및 트러블슈팅

6-1. netsh portproxy

wsl hostname -I

netsh interface portproxy add v4tov4 ^
listenport=8080 listenaddress=0.0.0.0 ^
connectport=8080 connectaddress=<WSL-IP>
  • 장점: WSL Tailscale 추가 설치 안 해도 됨
  • 단점: WSL IP가 바뀔 수 있어서 관리 신경 써야 함
  • 저같경 계속 바뀌는 WSL IP를 잡기 번거로와 그냥 WSL도 tailscale 로 ip고정해버렸습니다

6-2. WSL2 Mirrored Networking

# %USERPROFILE%\.wslconfig
[wsl2]
networkingMode=mirrored
  • Windows 11 22H2 이상에서 지원, 네트워크 통합이 개선됨
  • 이걸 켜도 port-forward bind는 여전히 따로 지정해야 함
  • 설정 바꾸면 wsl --shutdown으로 재시작

6-3. Kubernetes Service로 서비스 노출

  • port-forward는 개발·디버깅용 임시 접근일 뿐
  • 실제 서비스는 ClusterIP / NodePort / LoadBalancer / Ingress·Gateway로 노출
방식용도
ClusterIP클러스터 내부 접근
NodePort노드 포트로 테스트 노출
LoadBalancer클라우드 외부 진입점
Ingress/Gateway경로별 라우팅

6-4. SSH·네트워크 문제 해결 순서

Connecting with SSH timed out 뜨면:

  1. 노트북 CMD에서 직접 접속 시도

    ssh <user>@<tailscale ip>

    정상 작동 확인되면

  2. VS Code Remote-SSH 쪽 확인
    안되면

  3. Tailscale, sshd, 방화벽, 22번 포트 순으로 확인

Get-Service sshd
Get-NetTCPConnection -LocalPort 22 -State Listen
<tailscale ip> -4
  • 로그 더 자세히 보고 싶으면 ssh -v <user>@<tailscale ip>

전체 오류 모음

오류원인해결
SSH 후 wsl에 배포판 없음별도 계정에 WSL 미등록기존 WSL 있는 계정으로 SSH 통일
/mnt/c/...에서 노트북 파일 검색SSH 후 /mnt/c는 데스크톱 C:로컬/원격 경로 구분
Nginx localhost는 되는데 노트북에서 안 열림127.0.0.1 bind, Windows↔WSL 경로 없음--address 0.0.0.0 또는 WSL Tailscale IP

7. 핵심 요약

서로 다른 네트워크의 개발 환경 연결

  • 노트북과 데스크톱이 다른 네트워크에 있어도 Tailscale로 같은 사설망처럼 연결

Tailscale + SSH + Remote-SSH 구성

  • Windows/WSL2 각각 Tailscale 설치, 로그인
  • OpenSSH Server + Tailscale IP로 SSH 접속
  • VS Code Remote-SSH로 복사 없이 원격 편집

Kubernetes 서비스를 외부에서 접근

  • port-forward 기본 bind는 127.0.0.1, 외부 접근하려면 --address 지정 필요
  • 임시 접근은 port-forward, 실제 노출은 Service + Ingress/LB 구조

0개의 댓글