DIY Guide · 2026-09 · v2.0 · 공개 배포용

뭄바이 Tailscale Exit Node 구축 가이드

유료 VPN을 사는 대신, GCP 뭄바이에 내 VM을 잠깐 만들어 인도 IP로 나가고 끝나면 지우는 방법입니다. 꺼져 있으면 0원, 켜져 있으면 시간당 약 23원, 2시간 뒤엔 구글이 알아서 삭제합니다.

대기 중 ₩0 사용 중 ~₩23/시간 2시간 자동 삭제 소요 시간: 첫 구축 ~15분

00이 문서의 쓰임

이 페이지는 사람이 그대로 따라 하거나, LLM에게 통째로 전달해 구축을 시킬 수 있게 쓰였습니다. 모든 명령은 범용 형태이며, 자리표시자(<...>)만 본인 값으로 바꾸면 됩니다.

LLM에게 전달하는 법

이 페이지를 복사해 LLM에게 붙여넣고 이렇게 말하세요:

"이 가이드대로 GCP 뭄바이 Tailscale exit node를 구축하고 싶어.
내 환경은 (맥/윈도우, GCP 프로젝트 보유 여부)이야.
단계별로 명령을 알려주고, 각 단계의 확인 방법까지 짚어줘."

01원리

내 기기맥/윈도우/폰 — Tailscale 앱에서 출구 선택
암호화 터널WireGuard 직결 (UDP 41641)
뭄바이 VMGCP e2-micro · asia-south1 — 인도 출구
인터넷상대 서비스엔 인도 IP로 보임
상용 VPN과 달리 출구 서버가 내 계정의 VM이라 로그가 남지 않고, VM을 지우면 과금도 흔적도 사라집니다.

02준비물 (최초 1회)

준비물어디서비용
GCP 프로젝트 (빌링 연결) + Compute Engine APIconsole.cloud.google.com켜두는 것 자체는 무료
gcloud CLI 로그인cloud.google.com/sdk/docs/install무료
Tailscale 계정 + 내 기기에 앱 설치tailscale.com무료 (개인 플랜)
Tailscale 인증키 (Reusable + Ephemeral)관리 콘솔 → Settings → Keys → Generate auth key무료, 최대 90일 수명
인증키 보관 키는 비밀번호급 비밀입니다. 로컬 파일에만 저장(권한 600)하고 Git·메신저·문서에 넣지 마세요. 이 키가 있으면 누구든 내 Tailscale 네트워크에 기기를 등록할 수 있습니다.

03구축 — 순서대로 복사해서 실행

1변수 선언

export GCP_PROJECT='<빌링-연결된-프로젝트-ID>'
export GCP_ZONE='asia-south1-a'      # 뭄바이
export INSTANCE='mumbai-exit'

2시작 스크립트 작성 — VM이 부팅되자마자 Tailscale을 깔고 출구 노드로 광고

아래 내용을 startup.sh로 저장합니다. 인증키는 스크립트에 박지 않고 메타데이터로 전달합니다.

#!/bin/bash
exec > /var/log/exit-node-setup.log 2>&1

# IP 포워딩 (exit node 필수)
cat > /etc/sysctl.d/99-tailscale.conf <<EOF
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sysctl -p /etc/sysctl.d/99-tailscale.conf

# Tailscale 설치
curl -fsSL https://tailscale.com/install.sh | sh

# NIC 튜닝 (직결 성능)
NIC=$(ip -o route get 8.8.8.8 | awk '{print $5}')
ethtool -K "$NIC" rx-udp-gro-forwarding on rx-gro-list off

# 메타데이터에서 인증키 읽기
AUTHKEY=$(curl -fsS -H "Metadata-Flavor: Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/attributes/ts-authkey)

tailscale up \
  --auth-key="$AUTHKEY" \
  --advertise-exit-node \
  --hostname=mumbai-exit \
  --ssh \
  --accept-dns=false

tailscale status

3VM 생성 — 이 한 줄이 전부

gcloud compute instances create "$INSTANCE" \
  --project="$GCP_PROJECT" \
  --zone="$GCP_ZONE" \
  --machine-type=e2-micro \
  --provisioning-model=STANDARD \
  --image-family=debian-12 \
  --image-project=debian-cloud \
  --boot-disk-size=10GB \
  --boot-disk-type=pd-standard \
  --boot-disk-auto-delete \
  --network-tier=STANDARD \
  --can-ip-forward \
  --max-run-duration=2h \
  --instance-termination-action=DELETE \
  --metadata-from-file="startup-script=./startup.sh,ts-authkey=<인증키-파일-경로>" \
  --no-service-account \
  --no-scopes

핵심 스위치 두 개: --max-run-duration=2h + --instance-termination-action=DELETE — 2시간 뒤 구글이 VM을 강제 삭제합니다. 이게 과금 안전망입니다.

확인 — 30~40초 뒤 Tailscale 관리 콘솔 Machines에 mumbai-exit가 뜨면 성공. 안 뜨면 gcloud compute ssh로 들어가 /var/log/exit-node-setup.log를 읽습니다.

4출구 노드 승인 (새 VM마다 1회)

Tailscale 관리 콘솔(login.tailscale.com) → Machines → mumbai-exit⋯ → Edit route settings → "Use as exit node" ON → Save. VM이 광고만 한 상태에서는 라우팅이 안 되고, 이 승인이 마지막 스위치입니다.

확인 — 내 기기에서 tailscale exit-node list에 mumbai-exit가 보이면 완료.

5사용

맥/윈도우/폰의 Tailscale 앱 → Exit Node → mumbai-exit 선택. 목록에 안 보이면 앱을 완전히 껐다 켭니다.

확인curl ifconfig.me가 인도 IP를 찍고, 브라우저에서 IP 지역 확인 사이트가 Mumbai/India를 가리켜야 합니다. 이게 아니면 VPN이 켜진 게 아닙니다.

6정리 — 정지(stop)가 아니라 삭제(delete)

gcloud compute instances delete "$INSTANCE" \
  --project="$GCP_PROJECT" --zone="$GCP_ZONE" --quiet

# 잔여물 확인 — 둘 다 빈 배열 [] 이어야 함
gcloud compute instances list --project="$GCP_PROJECT" --format=json \
  | jq --arg n "$INSTANCE" '[.[] | select(.name == $n)]'
gcloud compute disks list --project="$GCP_PROJECT" --format=json \
  | jq --arg n "$INSTANCE" '[.[] | select(.name == $n)]'
확인 — 인스턴스·디스크 목록이 비고, 예약 IP를 만든 적 없으면 과금은 0원으로 수렴합니다. Ephemeral 노드는 VM이 꺼지면 tailnet에서도 곧 사라집니다.
절대 stop 하지 마세요 gcloud compute instances stop은 2시간 자동삭제 타이머를 리셋합니다. GCP 과금은 "켜짐"이 아니라 "존재"를 따라갑니다. 정리는 언제나 삭제입니다. 고정 IP 예약도 금지 — VM과 분리된 예약 IP는 계속 과금됩니다.

04비용 상세 (GCP 뭄바이, 2026-08 측정)

항목시간당비고
외부 IPv4 (임시)₩7.26시간당 최대 항목
컴퓨트 e2-micro (0.25 vCPU)₩9.51
메모리 1 GiB₩5.10
디스크 10 GiB 표준~₩1
트래픽 (소량 조회 용도)₩0무료 구간 내
합계≈ ₩23/시간1회 최대 ₩46 (2시간 상한)

실측 예시: 712초 사용 + 60MB 전송 = 약 ₩4.5. 대용량 다운로드 용도로는 맞지 않고, 지역 확인·가입·결제 화면 열람 같은 소량 작업용입니다.

05왜 승인을 수동으로 두는가

Tailscale은 exit node 광고 자동 승인(autoApprovers)을 지원하지만 이 구성에서는 끕니다. 자동 승인을 켜면 재사용 인증키를 얻은 사람이 관리자 검토 없이 내 네트워크에 출구 노드를 등록할 수 있습니다. 어차피 VM을 새로 만들 때마다 1회 클릭이면 되므로, 편의보다 통제를 택하는 게 합리적입니다.

06장애 맵

증상원인조치
VM은 떴는데 콘솔에 노드가 없음인증키 오류 / 시작 스크립트 실패VM 안의 setup 로그 확인
노드는 떴는데 선택 불가출구 노드 승인 전콘솔에서 "Use as exit node" ON
앱 목록에 노드가 안 보임앱 캐시Tailscale 앱 완전 종료 후 재실행
IP가 인도가 아님리존 착오 / 출구 미선택zone 확인 → 출구 선택 → IP 재확인 순
느림 (DERP 경유)UDP 직결 경로 막힘기능상 정상. 느리면 GCP 방화벽에 인바운드 UDP 41641 허용 검토
2시간 뒤 사라짐설계된 안전망다시 만들면 됨 (3번부터)
인증키가 갑자기 안 먹음키 90일 만료콘솔에서 키 재발급

07용도와 경계

이 구성은 로그인·결제가 없는 공개 페이지의 지역 확인을 위한 도구입니다. 접근 통제·결제 현지화·서비스 약관을 우회하는 장치로 쓰는 것은 각 서비스의 약관 문제이며, 이 가이드는 그 용도를 권장하지 않습니다. GCP와 Tailscale 무료 범위 내에서, 쓴 만큼만 내고, 다 쓰면 지우는 것이 이 설계의 전부입니다.