HeadlinesBriefing favicon HeadlinesBriefing.com

Tailcat: Tailscale डेटा प्लेन पर netcat

Hacker News •
×

Tailcat Tailscale ओपन सोर्स घटकों का रीमिक्स है, netcat की तरह, लेकिन Tailscale डेटा प्लेन पर, नियंत्रण प्लेन के बिना। Tailscale का डेटा प्लेन (आंतरिक रूप से magicsock) दो मशीनों के बीच पॉइंट-टू-पॉइंट Wire Guard®-एन्क्रिप्टेड टनल प्रदान करता है, DERP के साथ NAT-होल-पंचिंग संचार साइड चैनल और अंतिम रिले-ऑफ-लास्ट-रिसॉर्ट के रूप में यदि NAT ट्रैवर्सल विफल हो जाता है। Tailscale नियंत्रण प्लेन का उपयोग करने के बजाय, सभी tailcat कनेक्शन मेटाडेटा आउट ऑफ बैंड एक्सचेंज किया जाता है, जैसा आप चाहें। tailcat CLI (cmd/tailcat में) tailcat Go लाइब्रेरी पर बनाया गया है (github.com/tailscale/tailcat के रूप में आयात योग्य)।

चाहे आप tailcat को CLI टूल या लाइब्रेरी के रूप में उपयोग करें, एक पक्ष tailcat सर्वर (लिसनर) चलाता है और एक छोटा कनेक्शन टोकन प्राप्त करता है। दूसरा पक्ष उस टोकन को tailcat के क्लाइंट पक्ष को कनेक्ट करने के लिए पास करता है। दोनों के बीच सभी ट्रैफिक Wire Guard के साथ एंड-टू-एंड एन्क्रिप्टेड है। प्रारंभिक कनेक्शन Tailscale के DERP रिले नेटवर्क के माध्यम से बूटस्ट्रैप होता है, और फिर magicsock NAT ट्रैवर्सल करता है ताकि सीधे पॉइंट-टू-पॉइंट UDP कनेक्शन में अपग्रेड हो सके जब संभव हो (आमतौर पर!)।

आपको Tailscale खाते की आवश्यकता नहीं है, मशीन पर रूट/एडमिन एक्सेस की आवश्यकता नहीं है (यह आपकी मशीन की रूटिंग टेबल, DNS आदि नहीं बदलता है)। यह केवल एक यूज़रस्पेस लाइब्रेरी और CLI टूल है। और यह सब ओपन सोर्स है। आप हमारे मुफ्त दर-सीमित DERP रिले का उपयोग कर सकते हैं (डिफ़ॉल्ट DERP मैप https://tailcat.dev/derpmap.json है) या आप अपना खुद का चला सकते हैं।

उपयोग: दो मशीनों के बीच stdin/stdout पाइप करें। सर्वर शुरू होता है, अपना अस्थायी पता प्रिंट करता है: $ tailcat # चयनित बूटस्ट्रैप रिले क्षेत्र 302, सैन फ्रांसिस्को # सर्वर नए पते के साथ सुन रहा है: tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu (लटका हुआ, इंतज़ार कर रहा है...) और फिर क्लाइंट कर सकता है: $ echo hello | tailcat tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu $ फिर सर्वर अनब्लॉक होता है: $ tailcat # चयनित बूटस्ट्रैप रिले क्षेत्र 302, सैन फ्रांसिस्को # सर्वर नए पते के साथ सुन रहा है: tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu hello $ सुरंग के माध्यम से स्थानीय पोर्ट उजागर करें या आप एक स्थानीय TCP पोर्ट सेवा कर सकते हैं, localhost पर अग्रेषित: $ tailcat --serve=8080,8443 # या --serve=all # सर्वर नए पते के साथ सुन रहा है: tc XXXXXXXXX और फिर क्लाइंट: $ tailcat tc XXXXXXXXX 8080 GET / HTTP/1.1 Host: foo HTTP/1.1 200 OK.... प्रमाणीकरण-मुक्त SSH सर्वर Linux और macOS पर, आप बिना प्रमाणीकरण के SSH सर्वर भी चला सकते हैं। (यदि आप प्रमाणीकरण चाहते हैं, तो आप tailcat --serve=22 कर सकते हैं और अपने सिस्टम SSH सर्वर पर प्रॉक्सी कर सकते हैं) $ tailcat --serve=no-auth-ssh # सर्वर नए पते के साथ सुन रहा है: tc XXXXXXXXX और क्लाइंट पक्ष पर: $ tailcat ssh tc XXXXXXXXX $ tailcat ssh tc XXXXXXXXX ls -la विविध कमांड कनेक्टिविटी परीक्षण के लिए पिंग; प्रत्येक पोंग रिपोर्ट करता है कि यह DERP रिले या सीधे पथ के माध्यम से आया है। --until-direct पिंग करता रहता है (अधिकतम --timeout, डिफ़ॉल्ट 10s) जब तक सीधा पथ काम नहीं करता, गैर-शून्य से बाहर निकलता है यदि नहीं: $ tailcat ping --until-direct <token> pong in 42.1ms via DERP(sfo) pong in 1.2ms via 203.0.113.7:41641 सुरंग पर रूट किए गए SOCKS5 प्रॉक्सी के माध्यम से कमांड चलाएं: $ tailcat socks <token> curl http://server.tailcat:8081/ टोकन सीधे URL होस्टनाम के रूप में भी काम करते हैं: SOCKS प्रॉक्सी उन्हें पहचानता है और डायल करता है, इसलिए टोकन तर्क वैकल्पिक है। (टोकन केस-संवेदी हैं; यह curl और अधिकांश CLI टूल के साथ काम करता है, लेकिन ब्राउज़रों के साथ नहीं, जो होस्टनाम को लोअरकेस करते हैं।) $ tailcat socks curl http://<token>:8081/ एक्ज़िट नोड के रूप में कार्य करें ताकि क्लाइंट सर्वर के नेटवर्क तक पहुंच सके: $ tailcat --serve=exit-node एक कनेक्शन टोकन पार्स करें और उसकी सामग्री (सर्वर की Wire Guard सार्वजनिक कुंजी और DERP जानकारी) को JSON के रूप में प्रिंट करें, बिना किसी चीज़ से कनेक्ट किए: $ tailcat parse tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu {"Server Public": "nodekey:9c8d2e6728da80a1dd37e275a82595b42d9a838610bc53f74a7670d1610f2e34","Region ID": 302} एक छोटे टोकन (जो DERP क्षेत्र को ID द्वारा संदर्भित करता है, ग्राहकों को DERP मैप लाने की आवश्यकता होती है) को DERP सर्वर जानकारी के साथ एक लंबे आत्म-निहित टोकन में हल करें...