계정 없이 두 컴퓨터 사이를 WireGuard로 직접 연결하는 터널 도구
서버와 클라이언트 두 대의 컴퓨터가 서로의 네트워크를 가로막는 방화벽이나 NAT를 뚫고, 암호화된 터널을 통해 데이터를 주고받는 장면을 상상해 보세요. Tailcat은 Tailscale의 데이터 평면 기술만 가져와서 이 연결을 가능하게 하는 도구입니다. Tailscale 계정이 필요 없고, 시스템 설정을 건드리지 않으며, 연결 정보를 별도로 전달하는 방식입니다.
Tailscale 없이 Tailscale의 힘
Tailcat은 Tailscale의 오픈소스 구성 요소를 재구성하여 만든 도구입니다. Tailscale의 데이터 평면인 magicsock을 사용해 두 기계 사이에 WireGuard 암호화 터널을 구축합니다. 이때 DERP 서버는 NAT 관통을 위한 보조 채널이자, 직접 연결이 실패할 경우의 최종 중계기로 작용합니다. Tailscale의 제어 평면은 사용하지 않고, 연결에 필요한 메타데이터는 사용자가 원하는 방식으로 대외적으로 교환합니다. 이 덕분에 Tailscale 계정이 없어도, 루트 권한이 없어도, 시스템의 라우팅 테이블이나 DNS를 수정하지 않아도 됩니다.
주소 하나로 시작하는 연결
사용법은 netcat과 비슷하지만, 연결 정보를 어떻게 전달하느냐가 다릅니다. 서버 측에서 tailcat을 실행하면 짧은 tailcat 주소가 출력됩니다. 이 주소는 서버의 WireGuard 공개 키와 DERP 지역 정보를 포함합니다. 클라이언트는 이 주소를 받아 tailcat 명령에 전달하면 연결이 시작됩니다. 초기 연결은 DERP 서버를 통해 부트스트랩되고, 이후 magicsock이 NAT 관통을 시도해 가능한 경우 직접 P2P UDP 연결로 업그레이드됩니다. 모든 트래픽은 끝에서 끝까지 WireGuard로 암호화됩니다.
포트 포워딩부터 파일 전송까지
단순한 표준 입출력 파이프를 넘어, 로컬 포트를 터널을 통해 노출하거나, 서버의 네트워크 자원에 접근할 수 있습니다.
- SSH 서버 공개 키 인증을 지원하는 SSH 서버를 실행할 수 있습니다.
authorized_keys파일이나 GitHub 계정의 공개 키를 사용할 수 있으며, 인증 없이 터널의 신원만으로 접속하는no-auth-ssh모드도 제공합니다. - 성능 측정 iperf와 유사한 성능 테스트를 수행합니다. TCP와 UDP의 대역폭, 지연 시간, 패킷 손실 등을 측정하며, 직접 연결 경로에서만 테스트를 허용해 중계 서버의 속도 제한 영향을 배제합니다.
- 커맨드 실행 inetd처럼 각 연결마다 특정 명령을 실행할 수 있습니다. 연결의 표준 입출력을 명령어의 입출력으로 사용해, 터널을 통해 특정 프로세스와 상호작용할 수 있습니다.
키 관리와 보안 고려사항
Tailcat 주소는 서버의 WireGuard 공개 키와 사전 공유 키를 포함하므로, 주소를 아는 사람이 연결할 수 있습니다. 저장된 키를 사용하는 경우, 과거에 주소를 공유한 모든 사람이 미래의 서버에도 접속할 수 있으므로 --allow 플래그로 클라이언트를 제한하는 것이 좋습니다. WireGuard 사전 공유 키는 기본적으로 활성화되어 양자 컴퓨팅 공격과 DERP 운영자의 관찰로부터 보호합니다. DNS TXT 레코드에 주소를 공개할 경우, 반드시 --allow나 SSH 공개 키 인증을 함께 사용해야 합니다.
사용 전 확인 사항
Tailcat은 Tailscale의 무료 DERP 중계기를 기본으로 사용하지만, 자체 DERP 서버를 구축해 사용할 수도 있습니다. 브라우저 데모는 실험 단계이며, WebRTC 지원이 추가될 때까지 DERP 중계만 지원합니다. Go 라이브러리로 사용할 경우, UDP 패킷은 tailcat.MaxUDPPayload(1232바이트) 이하로 유지해야 IPv6 터널 MTU에 맞습니다. 이 도구는 시스템 설정을 변경하지 않는 사용자 공간 도구이므로, 기존 네트워크 설정에 영향을 주지 않습니다. 다만, no-auth-ssh나 인증 없는 서버를 사용할 때는 주소가 곧 자격 증명임을 명심하고, 공개 채널에 절대 공유하지 않아야 합니다.