- Tailscale Peer Relays เป็นความสามารถรีเลย์ทราฟฟิกแบบใหม่ที่มาแทน เซิร์ฟเวอร์ DERP แบบเดิม โดยเป็นโครงสร้างที่ผู้ใช้สามารถนำไปติดตั้งและดูแลจัดการเองได้
- แต่ละโหนดสามารถทำหน้าที่เป็นรีเลย์ได้ด้วยการ เปิดเพียงพอร์ต UDP เดียว และ มีอยู่ในไคลเอนต์ Tailscale ในตัว จึงเปิดใช้งานได้อย่างง่ายดาย
- รองรับการเชื่อมต่อ ความเร็วสูงและปริมาณงานสูง ทำให้ได้ ประสิทธิภาพใกล้เคียงการเชื่อมต่อโดยตรง แม้อยู่หลัง Cloud NAT หรือไฟร์วอลล์
- ทราฟฟิกทั้งหมดคงไว้ซึ่ง การเข้ารหัสแบบ end-to-end บนพื้นฐาน WireGuard® พร้อมรองรับ fallback อัตโนมัติ ไปยัง DERP และ Custom DERP
- ขณะนี้เปิดให้ใช้งานในสถานะ Public Beta และทุกแพ็กเกจสามารถใช้ Peer Relay ฟรีได้สูงสุด 2 ตัว
ภาพรวมของ Tailscale Peer Relays
- Tailscale Peer Relays เป็น กลไกรีเลย์ทราฟฟิกที่ผู้ใช้ดูแลเอง ซึ่งสามารถใช้แทน เซิร์ฟเวอร์ DERP แบบจัดการโดย Tailscale ได้
- โหนด Tailscale ใด ๆ ก็สามารถตั้งค่าให้เป็นรีเลย์ได้ และทำหน้าที่ส่งต่อทราฟฟิกระหว่างโหนดภายใน tailnet เดียวกัน
- รีเลย์จะส่งต่อได้เฉพาะโหนดที่อยู่ใน tailnet เดียวกับตัวเองเท่านั้น
- เนื่องจากลูกค้าดูแลจัดการเอง จึงมี ข้อจำกัดด้านปริมาณงานน้อยกว่า DERP และให้ประสิทธิภาพสูงได้แม้ใน โครงสร้างพื้นฐานคลาวด์แบบปิดหรือสภาพแวดล้อมที่มีไฟร์วอลล์
- ในการทดสอบกับพาร์ตเนอร์ระยะแรก พบว่าให้ ปริมาณงานใกล้เคียงการเชื่อมต่อโดยตรง และยืนยันประสิทธิภาพที่ เร็วกว่า DERP เดิมหลายสิบเท่า
รับมือกับสภาพแวดล้อม Hard NAT
- Tailscale ใช้เทคนิค NAT traversal ที่ปรับปรุงมาเพื่อรักษา การเชื่อมต่อโดยตรง (มากกว่า 90%) ให้ได้มากที่สุดแม้อยู่ในสภาพแวดล้อม NAT
- อย่างไรก็ตาม ใน สภาพแวดล้อมคลาวด์ บางแห่ง การเชื่อมต่อโดยตรงอาจทำไม่ได้หรือไม่มีประสิทธิภาพ
- DERP แบบเดิมให้การเชื่อมต่อที่เสถียร แต่มีข้อจำกัดด้าน QoS และเพดานประสิทธิภาพ ทำให้เกิดความท้าทายในบางสภาพแวดล้อมการติดตั้ง
- Peer Relays ถูกออกแบบมาเป็น เครื่องมือเชื่อมต่อที่เน้นประสิทธิภาพ โดยใช้ การสื่อสารแบบหน่วงต่ำบน UDP และมี โครงสร้างที่ฝังอยู่ในไคลเอนต์ จึงติดตั้งใช้งานได้ง่าย
- ลูกค้าสามารถวางรีเลย์เองเพื่อสร้าง เครือข่ายที่มีสมรรถนะสูงและยืดหยุ่นสูง ได้
วิธีการทำงาน
- Peer Relay ใช้ พอร์ต UDP เดียว ที่ทั้งสองฝั่งของโหนดสามารถเข้าถึงได้
- สามารถเปิดใช้งานได้ง่ายด้วยคำสั่ง CLI
tailscale set --relay-server-port
- หากไม่สามารถเชื่อมต่อโดยตรงได้ ระบบจะ fallback อัตโนมัติตามลำดับ Peer Relay → DERP (แบบจัดการหรือแบบกำหนดเอง)
- การเชื่อมต่อทั้งหมดได้รับการปกป้องด้วย การเข้ารหัส WireGuard®
- สามารถตั้งค่าให้ อนุญาตเฉพาะทราฟฟิกภายใน tailnet ได้ พร้อมลดข้อยกเว้นบนไฟร์วอลล์ให้เหลือน้อยที่สุด
- รองรับทั้งการขยายข้ามภูมิภาค ความทนทานต่อความขัดข้องของเครือข่าย และความสามารถในการ fallback ไปยัง DERP โดยอัตโนมัติ
กรณีใช้งานที่หลากหลาย
- รีเลย์ทราฟฟิกที่ไม่สามารถเชื่อมต่อโดยตรงได้ด้วยความเร็วสูงใน สภาพแวดล้อม Cloud NAT (เช่น AWS Managed NAT Gateway)
- ใน สภาพแวดล้อมไฟร์วอลล์ที่เข้มงวด สามารถเปิดเพียงพอร์ต UDP เดียวเพื่อลดขั้นตอนการอนุมัติ
- ช่วย ลดภาระของเครือข่าย DERP และ ไม่จำเป็นต้องดูแลรักษา Custom DERP
- เมื่อต้อง เข้าถึงเครือข่ายลูกค้าแบบปิด สามารถเปิดเพียงพอร์ตขั้นต่ำผ่านเอนด์พอยต์ที่คาดเดาได้
- ลูกค้าจริงได้นำ Peer Relay ไปใช้เพื่อทำ การเข้าถึงเครือข่ายที่ไม่ได้จัดการ, ควบคุมเส้นทางการเชื่อมต่อกับพาร์ตเนอร์ และ ออกแบบเครือข่ายแบบละเอียดด้วย VPC peering เป็นต้น
Public Beta และนโยบายการให้บริการ
- Tailscale Peer Relays เปิดให้ใช้งานได้ทันทีในเวอร์ชัน Public Beta
- ขณะนี้กำลังดำเนินการปรับปรุงบางส่วนด้าน การมองเห็นระบบและการดีบัก
- พาร์ตเนอร์ระยะแรกยืนยันแล้วถึง ความง่ายในการติดตั้งและประสิทธิภาพที่เสถียร
- ทุกแพ็กเกจ (รวมถึงแพ็กเกจฟรี) ได้รับ Peer Relay ฟรีสูงสุด 2 ตัว และสามารถขยายเพิ่มได้สำหรับรีเลย์เพิ่มเติม
- หากต้องการรีเลย์เพิ่มเติม สามารถขยายได้โดย ติดต่อทีมขายของ Tailscale
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
คิดว่าฟีเจอร์นี้ สมเหตุสมผล มาก
ใช้โหนดกลางเฉพาะตอนที่เชื่อมต่อโดยตรงไม่ได้ และทราฟฟิกก็ยังเป็น การเข้ารหัสแบบ end-to-end
คล้ายกับการรัน derp server เอง แต่ไม่ต้องเปิดพอร์ต และยังช่วยลดการใช้รีเลย์ของ Tailscale เลยประหยัดค่าแบนด์วิดท์ได้ด้วย
แต่อยากรู้ว่าทำไมถ้าใช้รีเลย์มากกว่าสองตัวถึงต้องเสียเงิน
ถ้าไม่ใช่แบบนั้น ตั้งแต่แรกก็อาจไม่จำเป็นต้องใช้ tailscale
แต่ก็มีข้อยกเว้นที่ไคลเอนต์สองตัวเข้าถึงรีเลย์ได้ แต่เชื่อมต่อหากันโดยตรงไม่ได้
เมื่อก่อน tinc ก็แก้ปัญหานี้ได้อยู่แล้ว
ทุกโหนดสามารถทำหน้าที่เป็นรีเลย์ได้ และทำงานเป็น mesh network จริง ๆ โดยไม่มีเซิร์ฟเวอร์กลาง
แทนที่จะสร้างใหม่ ผมว่าพอร์ตมันขึ้นมาใหม่บนพื้นฐาน wireguard ด้วยภาษาแบบ memory-safe จะดีกว่า
บางครั้งเพิ่ง SSH ติดได้ไม่นาน เส้นทางก็หายไปแล้ว
เพราะทราฟฟิกถูกถอดรหัสแล้วเข้ารหัสใหม่ที่โหนดรีเลย์ ถ้าจะให้เป็น การเข้ารหัสแบบ end-to-end ต้องใช้โปรโตคอลแบบ experimental
อยากเขียนใหม่บนพื้นฐานโปรโตคอล cjdns เหมือนกัน แต่ไม่ง่ายเลย
ฟีเจอร์ Peer Relay ใหม่ของ Tailscale ดูคล้ายกับสิ่งที่ ZeroTier เคยทำมาก่อน
จะบอกว่าเป็น “ฟีเจอร์เฉพาะของ Tailscale” ก็ดูฝืนไปหน่อย และรู้สึกว่าการคิดเงินเพิ่มนอกเหนือจากค่าบริการต่อผู้ใช้นั้นแรงเกินไป
ปัญหากลับเป็นเรื่องวิธีเข้ารหัสของตัวเอง, ประสิทธิภาพ single-thread ที่ตกลง, และความเร็วในการพัฒนาที่ช้า
ลองมาหลายทางเลือกแล้ว แต่ตอนนี้ก็ยังไม่มีตัวไหนที่ได้ทั้งฟีเจอร์และประสิทธิภาพเท่า Tailscale
รู้สึกเหมือนการเปรียบเทียบแนว ๆ “มี FTP แล้วจะใช้ Dropbox ไปทำไม”
อยากรู้ว่าสามารถระบุ ที่อยู่ IPv4/IPv6 ภายนอก ได้โดยตรงหรือไม่
เพราะบางทีทราฟฟิกขาเข้าและขาออกใช้อีกคนละที่อยู่ หรือจากหลายที่อยู่อินเทอร์เน็ตมีแค่บางตัวที่ไฟร์วอลล์อนุญาต
สัปดาห์ก่อนเพิ่งตั้งค่า headscale กับ split horizon SSL ไป สุดท้ายก็พบว่า ใช้ได้แค่ DERP
เลยคิดว่าการเปิด UDP port บนเครือข่ายโลคัลโดยตรงน่าจะดีกว่า
ถ้าความปลอดภัยของไคลเอนต์ Wireguard ถูกพิสูจน์มาดีพอ แบบนั้นก็สะดวกกว่า
คือพยายามเปิดพอร์ตของ Wireguard ตรง ๆ หรือว่าหมายถึงพอร์ตของ Tailscale กันแน่
ถ้าใช้ฟีเจอร์นี้แทน DERP จะใช้ในเบราว์เซอร์ไม่ได้
เพราะมันอิงกับ native UDP
เลยสงสัยว่าในอนาคตจะทำผ่าน WebTransport ได้ไหม
แต่ก็ยังแก้ปัญหา NAT traversal ไม่ได้
ก็กำลังตามดูความคืบหน้าของ QAD จาก Iroh อย่างใกล้ชิด
ถ้าทุกอย่างลงตัวก็น่าจะได้เครือข่ายที่ เหมือนเวทมนตร์ มากขึ้นอีก
คิดว่าขั้นต่อไป ถ้าให้ไคลเอนต์ tailscale ทุกตัวรับ คำขอ forwarding อัตโนมัติ แล้วทำให้ mesh network ซ่อมตัวเองได้แบบไร้รอยต่อก็น่าสนใจ
แต่ประเด็นสำคัญคือจะยอมให้มี การรีเลย์ทราฟฟิก ของคนอื่นหรือไม่
Tailscale ทำให้บริการต่าง ๆ เชื่อมต่อกันได้ แต่ก็สงสัยว่าถ้า Tailscale ล่ม บริการของผมจะคุยกันเองไม่ได้ไปด้วยไหม
ต่อ tailscale ไม่ได้ เลยเชื่อมใหม่ก็ไม่ได้
เพราะงั้นตอนนี้เลยจะตั้ง headscale เอง
ที่อุปกรณ์ใน LAN เดียวกันยังคุยกันไม่ได้ก็ดูน่าหงุดหงิดพอสมควร
สุดสัปดาห์ที่ผ่านมาเพิ่งทำโซลูชันชั่วคราวสำหรับ Kubernetes Operator อยู่ทั้งวัน แต่ตอนนี้ด้วยฟีเจอร์นี้น่าจะรื้อทิ้งได้หมดแล้ว
Bravo จริง ๆ
ก่อนหน้านี้สงสัยว่า use case ของฟีเจอร์นี้คืออะไร
เหมือนจะเหมาะกับกรณีที่ผลิตภัณฑ์ SaaS ต้องการข้อมูลจากระบบของลูกค้า แล้วให้ฝั่งลูกค้าเปิดข้อมูลผ่านรีเลย์เพื่อทำ integration
แต่ถึงอย่างนั้นก็น่าจะยังต้องมีซอฟต์แวร์สำหรับ authentication, logging ฯลฯ อยู่ดี
เพราะหลายครั้งเจาะ NAT ไม่ผ่าน เลยต้องใช้ DERP บ่อย ซึ่งมันช้า
ตอนนี้สามารถกำหนด peer ที่เชื่อมต่อดีภายในเครือข่ายให้เป็นรีเลย์เพื่อให้เร็วขึ้นได้
มันไม่ใช่ use case ใหม่ แต่เป็น เวอร์ชันปรับปรุงประสิทธิภาพ ของ DERP เดิมมากกว่า
แทนที่จะใช้โครงสร้าง hub-and-spoke แบบดั้งเดิม มันมุ่งไปที่ สถาปัตยกรรม P2P ที่ให้ทุกโหนดเชื่อมต่อกันตรง ๆ ผ่าน UDP/IP ให้ได้มากที่สุด
แต่เพราะ NAT และไฟร์วอลล์ ทำให้หลายกรณีเชื่อมต่อกันตรง ๆ ไม่ได้ DERP จึงทำหน้าที่รีเลย์ให้
DERP นั้นช้าและผู้ใช้ก็ไม่มีทางปรับปรุงประสิทธิภาพเองได้ แต่ด้วย Peer Relay ครั้งนี้ ผู้ใช้สามารถรันรีเลย์เองได้แล้ว
ถ้าวางตำแหน่งดี ๆ ก็ช่วยลด latency ได้
แน่นอนว่าไม่ใช่ฟีเจอร์ที่ผู้ใช้ทุกคนจำเป็นต้องมี