Tailcat: 테일스케일이 만든 '테일스케일 없는 테일스케일'
Tailscale 팀이 자사의 오픈소스 데이터 플레인(WireGuard 암호화 + NAT 통과 + DERP 릴레이)만을 활용하는 CLI 도구 'tailcat'를 공개했습니다. IP 주소, 계정, 제어 서버, 관리자 권한 없이도 서버-클라이언트 간 양방향 연결을 netcat처럼 사용할 수 있어, 가벼운 P2P 보안 통신이 필요한 실무자에게 유용합니다.
블로그 | 제품 2026년 8월 31일 Tailcat: Tailscale 없는 Tailscale, Tailscale이 직접 만나다. 작성자: Brad Fitzpatrick
오늘 우리는 tailcat을 출시합니다. tailcat은 Tailscale의 여러 구성 요소를 재조합한 것으로, Tailscale을 만든 사람들이 직접 작성한, Tailscale 제어 플레인 없이 오픈소스 Tailscale 데이터 플레인(WireGuard® + NAT 통과 + DERP)을 사용할 수 있게 해줍니다. 즉, Tailscale이 만든, Tailscale 없는 Tailscale입니다.
구체적으로 tailcat은 오픈소스 Go 패키지이자 그 패키지를 사용하는 CLI 도구입니다. 서버 측 리스너와 여기에 연결하는 클라이언트를 실행하여 양방향 바이트를 주고받을 수 있습니다. 다시 말해 netcat과 비슷하지만 Tailscale의 magicsock(WireGuard 암호화 + NAT 통과 + DERP 렌데부/폴백 릴레이) 위에서 동작합니다.
특히 tailcat에는 다음이 없습니다:
- IP 주소 없음
- 계정 없음 (로그인, 비밀번호, SSO 없음)
- 제어 플레인 없음
- 사용자 없음
- 관리자 없음
- 관리 통제 기능 없음
- root 또는 OS 관리자 권한 불필요
- Tailscale이라는 회사와의 관계나 의존성 없음 (자체 cmd/derper DERP 서버를 운영하는 경우)
"Tailscale"은 대체 무슨 뜻일까?
사람들이 온라인에서 서로 Tailscale을 설명하는 모습을 보면, 각자에게 "Tailscale"이 무엇을 의미하는지 매우 다른 해석이 존재함을 알 수 있습니다.
한 부류는 "그냥 WireGuard를 직접 운영하면 되지"라는 말을 자주 하는 사람들로, WireGuard 부분에 집중하고 NAT 통과, DERP 폴백, 중앙 관리되는 방화벽(ACL) 규칙, SSO 로그인, 태깅, MDM 정책, 감사 로그 같은 부분은 고려하지 않거나(또는 관심이 없거나) 합니다. 공인 IP에서 WireGuard만 필요한 경우일 수 있습니다. 그것도 괜찮습니다.
또 다른 부류는 회사, 기업 구조, 장기적 생존 가능성, 창립자, 투자 단계, 가격 정책, 인증, 신뢰성, 보안 취약점 공개의 책임 있는 처리 등에 대해 이야기합니다.
또 다른 부류는 Tailscale이 오픈소스인지 여부를 이야기합니다. 다시 상기하자면: 우리의 코어는 오픈소스이고(진짜 OSI 승인 라이선스!), DERP 서버도 오픈소스이며, 클라이언트도 그 자체가 오픈소스인 플랫폼(리눅스와 안드로이드)에서는 오픈소스입니다. 다만 서버 측 제어 플레인은 오픈소스가 아닙니다.
이 독자층의 많은 사람들은 Headscale(우리가 좋아하고 개발을 부분적으로 후원하고 있는 프로젝트)이 존재한다는 점을 높이 평가합니다. 지금 사용하거나, 미래의 폴백 플랜으로 활용할 수 있기 때문입니다.
이 모든 해석은 다 괜찮습니다. 기업 SSO 아이덴티티 프로바이더와 함께 공식 제어 플레인을 감싼 공식 GUI 클라이언트를 쓰든지, 반대 극단으로 자체 호스팅한 Headscale 서버를 향해 리눅스 노드에서 tsnet만 사용하든지, Tailscale과 그 구성 요소들을 연결하고 사용하는 방법은 다양합니다:
- WireGuard + NAT 통과 + DERP 폴백 데이터 플레인
- 제어 플레인
- 회사 (우리에게 비용을 지불하고 운영·지원을 맡기는 것)
- 오픈소스 코드 tailcat은 Tailscale의 하위 집합을 사용하는 또 다른 방법을 제공합니다.
작동 방식
tailcat 서버를 실행한다고 합시다. 다음과 같이 동작합니다:
- 키페어 생성 (일회성 또는 이름을 붙여 재사용)
- DERP 서버 선택 (직접 지정하거나, 대역폭 제한이 있는 Tailscale 운영 서버가 자동 선택)
- tailcat 주소 생성. 형식은 tc + base64(CBOR(공개키 + DERP 부트스트랩 정보)) 형태의 문자열
- 그런 다음 그 주소 문자열을 다른 경로(대역 외)로 공유합니다. 직접 전달하거나, DNS TXT 레코드에 넣고 DNS 호스트명을 대역 외로 공유할 수 있습니다
클라이언트 쪽도 거의 비슷합니다:
- 키 선택 (일회성 또는 로컬에 저장된 이름 있는 키 재사용)
- tailcat 주소에 지정된 렌데부 DERP 서버에 연결
- netmap에 자신을 추가하기 위해 서버의 공개키로 DERP를 통해 MEOW 메시지 전송
이 시점에서 서버가 해당 클라이언트의 공개키를 허용한다면(선택적으로 잠글 수도 있습니다), happy MEOW 응답을 보냅니다. 그러면 클라이언트는 WireGuard 위에 내장된 사용자 공간 TCP 스택을 사용해 상대방 측에 TCP 연결을 수립합니다. 통신 선로상에는 실제 IP 주소(공개키에서 파생된 IPv6)가 존재하지만, 사용자에게는 절대 보이지 않습니다.