HeadlinesBriefing favicon HeadlinesBriefing.com

Tailcat : netcat sur Tailscale

Hacker News •
×

Tailcat est un remix de composants open source de Tailscale pour agir comme netcat, mais sur le plan de données de Tailscale, sans son plan de contrôle. Le plan de données de Tailscale (magicsock, en interne) fournit des tunnels chiffrés point à point Wire Guard® entre deux machines, avec DERP comme canal latéral de communication pour le perçage de NAT et comme relais de dernier recours si la traversée NAT échoue. Au lieu d'utiliser le plan de contrôle de Tailscale, toutes les métadonnées de connexion tailcat sont échangées hors bande, comme vous le souhaitez. La CLI tailcat (dans cmd/tailcat) est construite sur la bibliothèque Go tailcat (importable comme github.com/tailscale/tailcat).

Que vous utilisiez tailcat comme outil CLI ou bibliothèque, un côté exécute un serveur tailcat (écouteur) et obtient un jeton de connexion court. L'autre côté passe ce jeton au côté client de tailcat pour se connecter. Tout le trafic entre les deux est chiffré de bout en bout avec Wire Guard. La connexion initiale est amorcée via le réseau de relais DERP de Tailscale, puis magicsock effectue la traversée NAT pour passer à une connexion UDP directe point à point lorsque c'est possible (généralement !).

Vous n'avez pas besoin de compte Tailscale, ni d'accès root/admin sur la machine (il ne modifie pas les tables de routage, DNS, etc.). C'est juste une bibliothèque d'espace utilisateur et un outil CLI. Et tout est open source. Vous pouvez utiliser nos relais DERP gratuits avec limite de débit (la carte DERP par défaut est https://tailcat.dev/derpmap.json) ou vous pouvez exécuter les vôtres.

Utilisation : Canalisez stdin/stdout entre deux machines. Le serveur démarre, imprimant son adresse éphémère : $ tailcat # Région de relais d'amorçage sélectionnée 302, San Francisco # Serveur à l'écoute avec nouvelle adresse : tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu (suspendu, en attente...) Et puis le client peut : $ echo hello | tailcat tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu $ Ensuite, le serveur se débloque : $ tailcat # Région de relais d'amorçage sélectionnée 302, San Francisco # Serveur à l'écoute avec nouvelle adresse : tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu hello $ Exposer des ports locaux via le tunnel Ou vous pouvez servir un port TCP local, transféré vers localhost : $ tailcat --serve=8080,8443 # ou --serve=all # Serveur à l'écoute avec nouvelle adresse : tc XXXXXXXXX Et puis le client : $ tailcat tc XXXXXXXXX 8080 GET / HTTP/1.1 Host: foo HTTP/1.1 200 OK.... Serveur SSH sans authentification Sur Linux et macOS, vous pouvez également exécuter un serveur SSH sans authentification. (Si vous voulez l'authentification, vous pouvez simplement tailcat --serve=22 et proxy vers votre serveur SSH système) $ tailcat --serve=no-auth-ssh # Serveur à l'écoute avec nouvelle adresse : tc XXXXXXXXX Et côté client : $ tailcat ssh tc XXXXXXXXX $ tailcat ssh tc XXXXXXXXX ls -la Commandes diverses Ping pour tester la connectivité ; chaque pong indique s'il est arrivé via un relais DERP ou un chemin direct. --until-direct continue de pinger (jusqu'à --timeout, défaut 10s) jusqu'à ce qu'un chemin direct fonctionne, sortant avec un code non nul si ce n'est pas le cas : $ tailcat ping --until-direct <token> pong in 42.1ms via DERP(sfo) pong in 1.2ms via 203.0.113.7:41641 Exécuter une commande via un proxy SOCKS5 routé sur le tunnel : $ tailcat socks <token> curl http://server.tailcat:8081/ Les jetons fonctionnent également directement comme noms d'hôte URL : le proxy SOCKS les reconnaît et les compose, donc l'argument jeton est optionnel. (Les jetons sont sensibles à la casse ; cela fonctionne avec curl et la plupart des outils CLI, mais pas avec les navigateurs, qui mettent les noms d'hôte en minuscules.) $ tailcat socks curl http://<token>:8081/ Agir comme nœud de sortie pour que le client puisse atteindre le réseau du serveur : $ tailcat --serve=exit-node Analyser un jeton de connexion et imprimer son contenu (la clé publique Wire Guard du serveur et les informations DERP) en JSON, sans se connecter à rien : $ tailcat parse tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu {"Server Public": "nodekey:9c8d2e6728da80a1dd37e275a82595b42d9a838610bc53f74a7670d1610f2e34","Region ID": 302} Résoudre un jeton court (qui référence une région DERP par ID, nécessitant que les clients récupèrent la carte DERP) en un jeton plus long autonome avec les informations du serveur DERP intégrées...