TailGuard เป็นโซลูชันที่ชาญฉลาดสำหรับการเชื่อมต่อเซิร์ฟเวอร์ WireGuard ที่มีอยู่เข้ากับเครือข่าย Tailscale ผ่าน Docker container อย่างง่าย เครื่องมือนี้แก้ไขปัญหาที่ผู้ใช้ VPN หลายคนเจอ คือการต้องการเข้าถึงหลายเครือข่ายโดยไม่ต้องสลับการเชื่อมต่อตลอดเวลา โดยเฉพาะบนอุปกรณ์มือถือที่รองรับ VPN ได้ครั้งละหนึงเชื่อมต่อเท่านั้น
โปรเจกต์นี้มาจากนักพัฒนา Juho Vähä-Herttua ที่สร้าง TailGuard เพื่อแก้ไขปัญหาเครือข่ายในทางปฏิบัติ แทนที่จะแทนที่โครงสร้าง WireGuard ที่มีอยู่ มันทำหน้าที่เป็นสะพานเชื่อมที่ทำให้เครือข่าย WireGuard สามารถเข้าถึงได้ผ่านเครือข่าย mesh ของ Tailscale
แก้ไขปัญหาการสลับ VPN บนมือถือ
หนึ่งในจุดเจ็บปวดที่ใหญ่ที่สุดที่ TailGuard แก้ไขคือข้อจำกัดของ VPN บนมือถือ อุปกรณ์ทั้ง Android และ iOS สามารถรัน VPN ได้ครั้งละหนึงเชื่อมต่อเท่านั้น ทำให้ผู้ใช้ต้องตัดการเชื่อมต่อและเชื่อมต่อใหม่ตลอดเวลาเมื่อต้องการเข้าถึงเครือข่ายที่แตกต่างกัน สิ่งนี้สร้างการหยุดชะงักและทำให้ยากต่อการรักษาการเข้าถึงที่ราบรื่นทั้งเครือข่ายบ้านและ exit nodes
การสนทนาในชุมชนเผยให้เห็นว่านี่เป็นปัญหาที่แพร่หลาย บริการ VPN ของ Android ระบุอย่างชัดเจนว่าสามารถรัน VPN ได้ครั้งละหนึงเชื่อมต่อเท่านั้น โดยจะปิดใช้งาน interface ที่มีอยู่เมื่อมีการสร้างใหม่ ผู้ใช้ Linux ไม่เจอข้อจำกัดนี้ แต่ผู้ใช้มือถือติดอยู่กับข้อจำกัดนี้
TailGuard แก้ไขปัญหานี้โดยการนำทุกอย่างไว้ใต้ VPN เดียว ผู้ใช้เชื่อมต่อกับ Tailscale บนอุปกรณ์มือถือ ซึ่งจะให้การเข้าถึงเครือข่าย WireGuard ผ่านสะพานเชื่อม ทำให้ไม่ต้องสลับระหว่างแอป VPN ที่แตกต่างกัน
การจัดการ Key และการตั้งค่าอุปกรณ์ที่ง่ายขึ้น
การตั้งค่า WireGuard แบบดั้งเดิมต้องการการแจกจ่าย private keys ให้กับแต่ละอุปกรณ์ที่ต้องการเข้าถึง TailGuard รวมศูนย์สิ่งนี้โดยการเก็บ WireGuard keys ไว้ในเครื่องเดียว ขณะที่อนุญาตให้อุปกรณ์ใหม่เข้าร่วมผ่านระบบ SSO ของ Tailscale
แนวทางนี้ลดภาระการบริหารจัดการ key เมื่อมีคนได้อุปกรณ์ใหม่ พวกเขาเพียงแค่เข้าสู่ระบบบัญชี Tailscale แทนที่จะต้องโอนไฟล์การกำหนดค่า WireGuard และ private keys ระบบนี้ยังทำให้ง่ายขึ้นในการสลับระหว่าง exit nodes ที่แตกต่างกันโดยไม่ต้องเชื่อมต่อกับบริการ VPN แยกต่างหาก
พารามิเตอร์การกำหนดค่า TailGuard
พารามิเตอร์ | คำอธิบาย | ค่าเริ่มต้น |
---|---|---|
WG_DEVICE |
ชื่ออุปกรณ์ WireGuard ต้องตรงกับไฟล์กำหนดค่า | wg0 |
TS_DEVICE |
ชื่ออุปกรณ์ Tailscale | tailscale0 |
TS_PORT |
หมายเลขพอร์ต Tailscale (ควรเปิดให้ใช้งานโดย Docker ) | 41641 |
TS_AUTHKEY |
คีย์การยืนยันตัวตน Tailscale | - |
TS_DEST_IP |
IP ปลายทางสำหรับเส้นทางการรับส่งข้อมูล Tailscale | - |
TS_HOSTNAME |
ชื่อโฮสต์ Tailscale สำหรับอุปกรณ์ | - |
การใช้งานจริงและกรณีการใช้งาน
ชุมชนได้ระบุการใช้งานในทางปฏิบัติหลายอย่างสำหรับ TailGuard กรณีการใช้งานที่น่าสนใจอย่างหนึ่งเกี่ยวข้องกับการเชื่อมต่อกับบริการคลาวด์อย่าง Fly.io ซึ่งให้การเข้าถึง WireGuard ไปยังเครือข่ายส่วนตัวของพวกเขา แทนที่จะกำหนดค่า WireGuard clients โดยตรง ผู้ใช้สามารถรัน TailGuard เพื่อทำให้เครือข่ายส่วนตัวเหล่านี้เข้าถึงได้ผ่านการตั้งค่า Tailscale ที่มีอยู่
สถานการณ์ทั่วไปอีกอย่างหนึ่งเกี่ยวข้องกับการเชื่อมต่อเครือข่ายบ้านผ่านเราเตอร์ที่รองรับ WireGuard แต่ไม่รองรับ Tailscale เราเตอร์ผู้บริโภคหลายตัวมีการรองรับ WireGuard ในตัว แต่ขาดการรวม Tailscale TailGuard เชื่อมช่องว่างนี้ ทำให้เครือข่ายบ้านทั้งหมดสามารถเข้าร่วม Tailscale meshes ได้
เครื่องมือนี้ยังพิสูจน์ให้เห็นคุณค่าสำหรับการเข้าถึงเครือข่ายที่อยู่หลัง dynamic IP addresses หรือการเชื่อมต่อ CGNAT ที่การเชื่อมต่อโดยตรงแบบดั้งเดิมอาจไม่น่าเชื่อถือ
ความสามารถและการตั้งค่า Docker ที่จำเป็น
--cap-add NET_ADMIN
- ความสามารถในการดูแลระบบเครือข่าย--device /dev/net/tun
- การเข้าถึงอุปกรณ์ TUN สำหรับการสร้างอุโมงค์ VPN--sysctl net.ipv4.ip_forward=1
- เปิดใช้งานการส่งต่อแพ็กเก็ต IPv4--sysctl net.ipv6.conf.all.forwarding=1
- เปิดใช้งานการส่งต่อแพ็กเก็ต IPv6--sysctl net.ipv4.conf.all.src_valid_mark=1
- เปิดใช้งานการทำเครื่องหมายตรวจสอบแหล่งที่มา- พอร์ต
41641/udp
- การเปิดพอร์ต UDP เริ่มต้นของ Tailscale
การใช้งานทางเทคนิคและกรณีขอบ
แม้ว่าแนวคิดจะฟังดูง่าย แต่การใช้งานจัดการกับความท้าทายทางเทคนิคมากมาย นักพัฒนาเจอปัญหากับเครือข่าย dual-stack IPv4/IPv6, การแก้ไข DNS สำหรับ dynamic endpoints, การรวม firewall และการ masquerading traffic ระหว่างส่วนเครือข่ายที่แตกต่างกัน
มันเริ่มต้นเป็นแค่ hack ที่ผมไม่คิดว่าจะคุ้มค่าแชร์ แต่สิ่งต่าง ๆ พังมากกว่าที่ผมจินตนาการไว้
Container จะแยกวิเคราะห์การกำหนดค่า WireGuard โดยอัตโนมัติเพื่อโฆษณา subnets ที่เหมาะสมบนเครือข่าย Tailscale อย่างไรก็ตาม การบรรลุการ routing แบบสองทิศทางที่แท้จริงต้องการการกำหนดค่าด้วยตนเองในด้าน WireGuard เพื่อ route address spaces ของ Tailscale กลับผ่าน tunnel
TailGuard แสดงถึงโซลูชันที่ใช้งานได้จริงสำหรับปัญหาการจัดการ VPN ทั่วไป โดยเฉพาะสำหรับผู้ใช้ที่เจอข้อจำกัดของอุปกรณ์มือถือหรือการตั้งค่าหลายเครือข่ายที่ซับซ้อน แม้ว่าจะเพิ่มอีกชั้นหนึ่งให้กับสถาปัตยกรรมเครือข่าย แต่มันทำให้ประสบการณ์ผู้ใช้ง่ายขึ้นและลดความซับซ้อนของการจัดการการเชื่อมต่อ VPN หลายตัวข้ามอุปกรณ์ที่แตกต่างกัน
อ้างอิง: TailGuard