HeadlinesBriefing favicon HeadlinesBriefing.com

Tailcat: netcat über Tailscale

Hacker News •
×

Tailcat ist ein Remix von Tailscale-Open-Source-Komponenten, der wie netcat funktioniert, aber über die Tailscale-Datenebene, ohne Kontrollebene. Die Datenebene von Tailscale (intern magicsock genannt) bietet Punkt-zu-Punkt-Wire-Guard®-verschlüsselte Tunnel zwischen zwei Maschinen, mit DERP als seitlichem Kommunikationskanal für NAT-Lochstanzen und als letztes Relais, wenn NAT-Traversal fehlschlägt. Anstatt die Tailscale-Kontrollebene zu verwenden, werden alle tailcat-Verbindungsmetadaten out-of-band ausgetauscht, wie Sie möchten. Die tailcat-CLI (in cmd/tailcat) basiert auf der tailcat-Go-Bibliothek (importierbar als github.com/tailscale/tailcat).

Ob Sie tailcat als CLI-Tool oder Bibliothek verwenden, eine Seite führt einen tailcat-Server (Listener) aus und erhält ein kurzes Verbindungstoken. Die andere Seite übergibt dieses Token an die Client-Seite von tailcat, um sich zu verbinden. Der gesamte Verkehr zwischen beiden ist Ende-zu-Ende mit Wire Guard verschlüsselt. Die anfängliche Verbindung wird über das DERP-Relaisnetzwerk von Tailscale gebootet, und dann führt magicsock NAT-Traversal durch, um auf eine direkte Punkt-zu-Punkt-UDP-Verbindung aufzurüsten, wenn möglich (normalerweise!).

Sie benötigen kein Tailscale-Konto, keinen Root-/Admin-Zugriff auf der Maschine (es ändert keine Routing-Tabellen, DNS usw.). Es ist nur eine Userspace-Bibliothek und ein CLI-Tool. Und alles ist Open Source. Sie können unsere kostenlosen, ratenbegrenzten DERP-Relais verwenden (die Standard-DERP-Karte ist https://tailcat.dev/derpmap.json) oder Ihre eigenen betreiben.

Verwendung: Leiten Sie stdin/stdout zwischen zwei Maschinen. Der Server startet und gibt seine temporäre Adresse aus: $ tailcat # Ausgewählte Bootstrap-Relaisregion 302, San Francisco # Server lauscht mit neuer Adresse: tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu (hängt, wartet...) Und dann kann der Client: $ echo hello | tailcat tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu $ Dann wird der Server entsperrt: $ tailcat # Ausgewählte Bootstrap-Relaisregion 302, San Francisco # Server lauscht mit neuer Adresse: tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu hello $ Lokale Ports durch den Tunnel freigeben Oder Sie können einen lokalen TCP-Port bedienen, der an localhost weitergeleitet wird: $ tailcat --serve=8080,8443 # oder --serve=all # Server lauscht mit neuer Adresse: tc XXXXXXXXX Und dann der Client: $ tailcat tc XXXXXXXXX 8080 GET / HTTP/1.1 Host: foo HTTP/1.1 200 OK.... SSH-Server ohne Authentifizierung Unter Linux und macOS können Sie auch einen SSH-Server ohne Authentifizierung ausführen. (Wenn Sie Authentifizierung möchten, können Sie einfach tailcat --serve=22 und Proxy zu Ihrem System-SSH-Server) $ tailcat --serve=no-auth-ssh # Server lauscht mit neuer Adresse: tc XXXXXXXXX Und auf der Client-Seite: $ tailcat ssh tc XXXXXXXXX $ tailcat ssh tc XXXXXXXXX ls -la Verschiedene Befehle Ping zum Testen der Konnektivität; jeder Pong meldet, ob er über ein DERP-Relais oder einen direkten Pfad angekommen ist. --until-direct pingt weiter (bis --timeout, Standard 10s), bis ein direkter Pfad funktioniert, und beendet sich mit Nicht-Null, wenn nicht: $ tailcat ping --until-direct <token> pong in 42.1ms via DERP(sfo) pong in 1.2ms via 203.0.113.7:41641 Führen Sie einen Befehl über einen SOCKS5-Proxy aus, der über den Tunnel geroutet wird: $ tailcat socks <token> curl http://server.tailcat:8081/ Tokens funktionieren auch direkt als URL-Hostnamen: Der SOCKS-Proxy erkennt und wählt sie, daher ist das Token-Argument optional. (Tokens sind case-sensitiv; dies funktioniert mit curl und den meisten CLI-Tools, aber nicht mit Browsern, die Hostnamen in Kleinbuchstaben umwandeln.) $ tailcat socks curl http://<token>:8081/ Als Exit-Node fungieren, damit der Client das Netzwerk des Servers erreichen kann: $ tailcat --serve=exit-node Analysieren Sie ein