Service
GitHub - tailscale/tailcat: like netcat, but over Tailscale's data plane, without Tailscale's control plane
tailscale
2026.08.27
·GitHub·by Homin.Lee#CLI#Go#netcat#Tailscale#WireGuard
핵심 포인트
- 1Tailcat은 Tailscale의 제어 평면 없이 데이터 평면인 magicsock과 DERP 릴레이를 활용하여 WireGuard 기반의 종단 간 암호화 터널을 생성하는 오픈 소스 도구입니다.
- 2사용자는 연결 토큰을 통해 서버와 클라이언트 간의 네트워크 경로를 설정하며, NAT traversal을 통해 직접적인 UDP 연결을 시도하고 실패 시 DERP를 우회 경로로 사용합니다.
- 3별도의 관리자 권한이나 라우팅 설정 없이도 TCP 포트 포워딩, SSH 서버, SOCKS5 프록시 등 다양한 네트워크 기능을 안전하게 구현할 수 있습니다.
Tailcat은 Tailscale의 오픈 소스 구성 요소를 활용하여 Tailscale의 Control Plane 없이도 netcat과 유사하게 작동하도록 설계된 도구이자 Go 라이브러리입니다. 이 도구는 복잡한 네트워크 설정이나 관리자 권한 없이, Tailscale의 Data Plane인 magicsock을 통해 종단 간(End-to-End) 암호화된 P2P 터널링을 제공합니다.
핵심 방법론 및 기술적 상세
Tailcat은 다음과 같은 기술 스택을 결합하여 운영됩니다:- WireGuard: 터널링된 모든 트래픽을 암호화하는 핵심 프로토콜로, 별도의 커널 TUN/TAP 디바이스 설정 없이 사용자 공간(Userspace)에서 동작합니다.
- magicsock: Tailscale의 전송 계층으로, STUN 기반의 엔드포인트 발견 및 UDP 홀 펀칭(Hole-punching)을 수행하여 가능한 경우 직접적인 P2P 연결을 생성합니다. 직접 연결이 실패할 경우 DERP(Designated Encrypted Relay for Packets) 릴레이가 최종 수단으로 데이터를 중계합니다.
- Netstack (gVisor): 운영체제의 네트워크 스택에 의존하지 않고 프로세스 내에서 TCP/IP를 처리하는 사용자 공간 스택입니다. 이를 통해 포트 포워딩, SSH 서버 운영, SOCKS5 프록시 등의 기능을 OS 설정 변경 없이 수행합니다.
연결 및 통신 흐름
- Connection Token: 서버는 자신의 WireGuard 공개 키와 DERP 서버 정보를 포함한 CBOR 형식의 연결 토큰을 생성합니다. 이는 사용자가 공유하는 유일한 메타데이터입니다.
- Discovery Handshake: 클라이언트와 서버는 DERP 릴레이를 통해 서로의 공개 키를 교환하고 WireGuard 피어 목록을 구성합니다.
- 데이터 최적화: 연결 초기에는 DERP를 통해 통신하지만, disco 프로토콜을 통해 실시간으로 UDP 엔드포인트를 광고하여 NAT 트래버설을 시도, 지연 시간을 최소화합니다.
주요 기능
- Ephemeral vs. Saved Keys: 기본적으로는 프로세스 종료 시 삭제되는 일회성 키를 사용하지만,
genkey를 통해 디스크에 키를 저장하여 고정된 주소를 사용할 수 있습니다. - 유연한 서비스 노출:
--serve플래그를 통해 로컬 포트를 터널링하거나, 인증 없는 SSH 서버(no-auth-ssh)를 생성하고, Exit node로 동작하여 네트워크를 공유할 수 있습니다. - 커스텀 DERP: Tailscale이 제공하는 기본 릴레이 외에도 사용자가 직접 derper 서버를 구축하여 고유한 DERP 릴레이 환경을 구성할 수 있습니다.
- 보안:
--allow옵션을 통해 특정 WireGuard 공개 키(nodekey:...)를 가진 클라이언트만 접속을 허용하도록 제한할 수 있습니다.