Tailcat - Tailscale 계정 없이 두 머신을 연결하는 netcat

3 weeks ago 35

Tailscale의 오픈소스 데이터 평면을 이용해, Tailscale 계정이나 제어 서버 없이 두 머신을 연결하는 netcat 형태의 CLI·Go 라이브러리 서버가 출력한 짧은 연결 토큰을 상대에게 전달하면 표준 입출력이나 TCP 포트를 WireGuard 암호화 터널로 연결할 수 있음 연결은 DERP 릴레이를 통해 시작하고, NAT 통과에 성공하면 직접 P2P UDP 경로로 전환하며 실패하면 릴레이를 계속 사용함 root 권한이나 운영체제 네트워크 설정 변경 없이 포트 전달, SSH, SOCKS5 프록시, exit node 등을 사용할 수 있음 기본 토큰은 실행이 끝나면 폐기되지만 고정 주소와 클라이언트 제한도 구성할 수 있으며, 공개 DERP와 API·CLI는 안정성 보장 없이 제공됨 Tailscale에서 제어 평면을 뺀 도구 Tailscale의 magicsock, WireGuard, DERP, 사용자 공간 네트워크 스택을 조합해 netcat처럼 두 머신 사이의 데이터를 전달함 일반적인 Tailscale에서 계정·기기 등록과 피어 정보 전달을 담당하는 제어 평면은 사용하지 않음 대신 서버의 WireGuard 공개 키와 접속할 DERP 정보를 담은 연결 토큰을 사용자가 원하는 방법으로 상대에게 전달함 프로젝트가 스스로를 “Tailscale이 만든, Tailscale 없는 Tailscale”이라고 표현하는 이유도 여기에 있음 CLI뿐 아니라 Go 라이브러리로도 제공되어 같은 연결 방식을 다른 애플리케이션에 내장할 수 있음 토큰 하나로 연결하기 서버에서 tailcat을 실행하면 실행 중에만 유효한 연결 토큰을 출력하고 클라이언트의 접속을 기다림 다른 머신에서 토큰을 인수로 넘기면 표준 입력을 서버의 표준 출력으로 전달할 수 있음 echo hello | tailcat <token> 토큰에는 서버의 WireGuard 공개 키와 DERP 지역 정보가 들어 있으며, 중앙 제어 서버가 별도로 연결 정보를 관리하지 않음 일반 토큰은 약 50바이트이며 DERP 지역 ID만 담고 있어, 클라이언트가 접속할 때 DERP 맵을 조회함 tailcat resolve나 --full-address를 사용하면 DERP 서버 정보까지 포함한 더 긴 독립형 토큰을 만들 수 있음 CLI 활용 방식 --serve=8080,8443 또는 --serve=all로 로컬 TCP 포트를 터널에 노출하고, 클라이언트가 토큰과 포트 번호로 접속할 수...

Read Entire Article