Tailscale
Tailscale은 WireGuard 기반의 메시 VPN 서비스다. 복잡한 VPN 설정 없이 기기 간 직접 연결(P2P)을 자동으로 구성해주는 것이 핵심이다.
특징
- Zero Config: 설치 후 로그인만 하면 같은 계정의 기기끼리 자동 연결
- 메시 구조: Hub-and-Spoke가 아닌 기기 간 직접 연결
- NAT 통과: 방화벽·NAT 뒤에 있는 기기도 P2P 연결 가능
- MagicDNS: 기기 이름으로 접근 가능 (
my-laptop.tail1234.ts.net) - ACL: 기기 간 접근 권한을 정책으로 관리
아키텍처
┌────────────────────────────────────────────┐
│ Tailscale Control Plane │
│ (조정 서버 — 공개키 교환, 라우팅 정보 배포) │
└────────────┬──────────────┬────────────────┘
│ │
┌──────▼──────┐ ┌─────▼──────┐
│ 기기 A │ │ 기기 B │
│ WireGuard │ │ WireGuard │
└──────┬──────┘ └─────┬──────┘
└──── P2P ─────┘
(직접 연결 가능한 경우)
또는
└── DERP 릴레이 경유 ──┘
(NAT 통과 실패 시)
Control Plane vs Data Plane
| 구분 | 역할 | 경로 |
|---|---|---|
| Control Plane | 공개키 배포, ACL 정책 전달 | Tailscale 서버 경유 |
| Data Plane | 실제 데이터 전송 | 기기 간 직접 (WireGuard) |
NAT 통과 메커니즘
Tailscale은 다양한 NAT 통과 기법을 자동으로 시도한다.
- 직접 연결: 동일 네트워크 또는 포트 예측 가능한 NAT
- STUN: 공개 IP·포트 탐색
- 홀 펀칭(UDP Hole Punching): 양측에서 동시에 패킷 전송
- DERP 릴레이: 위 방법 모두 실패 시 Tailscale 릴레이 서버 경유
DERP (Designated Encrypted Relay for Packets)
- 직접 연결 불가 시 암호화된 패킷을 중계
- 릴레이여도 Tailscale 서버는 내용 복호화 불가 (End-to-End 암호화)
- 전 세계 여러 지역에 분산 배포
주요 기능
MagicDNS
- 기기 이름으로 내부 서비스에 접근
my-server→my-server.tail1234.ts.net자동 해석- Split DNS: 내부 도메인만 Tailscale DNS로 처리하고 나머지는 일반 DNS 사용
Subnet Router
- Tailscale이 설치되지 않은 내부 기기(프린터, NAS 등)를 Tailscale 네트워크에 노출
- 한 기기가 라우터 역할을 맡아 서브넷 트래픽을 중계
# 특정 서브넷을 Tailscale 네트워크에 광고
tailscale up --advertise-routes=192.168.1.0/24Exit Node
- Tailscale 기기 하나를 인터넷 출구로 사용 (VPN 게이트웨이와 동일)
# Exit Node로 등록
tailscale up --advertise-exit-node
# Exit Node 사용
tailscale up --exit-node=<기기_IP>Taildrop
- Tailscale 기기 간 파일 전송 기능
ACL (Access Control List)
Tailscale 관리 콘솔에서 HuJSON 형식으로 정책 정의.
{
"acls": [
// 개발 서버에는 개발자만 접근
{
"action": "accept",
"src": ["group:developers"],
"dst": ["tag:dev-server:*"]
},
// 프로덕션 서버는 ops 팀만
{
"action": "accept",
"src": ["group:ops"],
"dst": ["tag:prod-server:*"]
}
],
"groups": {
"group:developers": ["user@example.com"],
"group:ops": ["admin@example.com"]
},
"tagOwners": {
"tag:dev-server": ["group:ops"],
"tag:prod-server": ["group:ops"]
}
}주요 명령어
# 설치 (Linux)
curl -fsSL https://tailscale.com/install.sh | sh
# 로그인 (브라우저 인증)
tailscale up
# 로그아웃
tailscale down
# 현재 상태 확인
tailscale status
# 내 IP 확인
tailscale ip
# 특정 기기로 ping
tailscale ping my-laptop
# 연결 경로 확인 (직접 P2P인지 DERP 경유인지)
tailscale netcheckHeadscale (Self-hosted Control Plane)
Tailscale의 Control Plane을 자체 호스팅할 수 있는 오픈소스 대안. Data Plane(WireGuard)은 동일하게 사용하고 조정 서버만 교체한다.
- GitHub:
juanfont/headscale - 클라이언트에서
--login-server옵션으로 자체 서버 지정
Tailscale vs 전통적 VPN
| 항목 | Tailscale | 전통적 VPN |
|---|---|---|
| 구조 | 메시 (P2P) | Hub-and-Spoke |
| 설정 | 거의 없음 | 서버 구성 필요 |
| NAT 통과 | 자동 | 수동 포트포워딩 |
| 확장성 | 기기 추가만 | 서버 용량 증설 필요 |
| 기반 프로토콜 | WireGuard | OpenVPN / IPsec |