WireGuard vs Tailscale vs Headscale เลือกอะไรดี
Tailscale ใช้ WireGuard พร้อม control plane สำหรับค้นหา peer, เจาะ NAT และกำหนดนโยบาย เปรียบเทียบต้นทุนและการดูแล เพื่อเลือกใช้บน VPS ให้เหมาะสม
WireGuard กับ Tailscale: คำตอบแบบสั้น
WireGuard กับ Tailscale ไม่ใช่การเลือกระหว่างโปรโตคอล 2 แบบ เพราะ Tailscale คือ WireGuard โดย Tailscale ใช้การเข้ารหัสและทันเนลเดียวกัน จากนั้นจึงเพิ่ม control plane ซึ่งเป็นเซิร์ฟเวอร์ประสานงานที่แลกเปลี่ยน public key แจกจ่าย address เจาะช่องทางผ่าน NAT (network address translation) และบังคับใช้นโยบายการเข้าถึง สิ่งที่คุณกำลังเลือกคือ คุณต้องการให้การประสานงานส่วนใดทำงานด้วยตนเองมากเพียงใด
มีคำตอบที่ชัดเจนอยู่ 3 แบบ ใช้ WireGuard แบบปกติเมื่อคุณมี server 1 เครื่องและ client จำนวนเล็กน้อยที่เชื่อมต่อเข้ามายัง server นั้นทั้งหมด ใช้ Tailscale เมื่อคุณต้องการให้ทุกเครื่องเข้าถึงเครื่องอื่นได้โดยไม่ต้องดูแลไฟล์กำหนดค่า ใช้ Headscale เมื่อคุณต้องการเครือข่ายแบบ mesh ดังกล่าว แต่ไม่ต้องการให้ผู้ให้บริการภายนอกถือรายการ nodeไว้
สิ่งที่ control plane มอบให้จริง
WireGuard แบบพื้นฐานไม่มีการค้นหาอุปกรณ์ คุณต้องเขียนข้อมูลของ peer แต่ละรายการด้วยตนเอง ซึ่งประกอบด้วย public key, บรรทัด AllowedIPs และ Endpoint หาก peer นั้นสามารถเข้าถึงได้ การเพิ่มเครื่อง 1 เครื่องในเครือข่ายที่มี 10 เครื่องหมายถึงต้องแก้ไขไฟล์การกำหนดค่า 10 ไฟล์ เพราะแต่ละฝั่งต้องมี key ของอีกฝั่ง นี่เป็นเหตุผลที่การติดตั้ง WireGuard แบบ self-hosted เกือบทั้งหมดใช้รูปแบบ hub-and-spoke คือมีเซิร์ฟเวอร์ 1 เครื่องที่มี public IP และมีไคลเอ็นต์ที่สื่อสารกับเซิร์ฟเวอร์นั้นเท่านั้น
control plane ทำให้ไม่ต้องแก้ไขไฟล์เหล่านี้ แต่ละ node ลงทะเบียน 1 ครั้ง รับ address จากช่วง 100.64.0.0/10 CGNAT (carrier grade NAT) และได้รับ public key ของ node ที่ตนได้รับอนุญาตให้เข้าถึง อุโมงค์ยังคงเป็นการเชื่อมต่อ WireGuard โดยตรงระหว่าง peer 2 ราย และ traffic ของคุณจะไม่ผ่าน coordination server สิ่งที่เซิร์ฟเวอร์จัดเก็บคือ metadata ได้แก่ มีใครอยู่ในระบบ, key ใดเป็นของใคร และใครสามารถสื่อสารกับใครได้
สิ่งนี้ให้ประโยชน์ที่เป็นรูปธรรม 3 ประการ
การทำ NAT traversal แล็ปท็อป 2 เครื่องที่อยู่หลัง home router คนละตัวไม่มี public IP ที่ใช้เชื่อมต่อถึงกัน Tailscale ใช้ STUN (session traversal utilities for NAT) เพื่อค้นหา address และ port ภายนอกของแต่ละฝั่ง จากนั้นทั้ง 2 ฝั่งจะส่ง packet ในเวลาใกล้เคียงกัน เพื่อให้ router แต่ละตัวเห็น flow ขาออกก่อนและยอมรับการตอบกลับ เมื่อวิธีนี้ล้มเหลว traffic จะเปลี่ยนไปใช้ DERP relay ซึ่งเป็น relay ที่ Tailscale ดำเนินการ ข้อมูลของคุณยังคงเข้ารหัสแบบ end-to-end ผ่าน relay เนื่องจาก relay ไม่เคยมี key เรียกใช้ tailscale status แล้วบรรทัดของ peer แต่ละรายการจะแสดง direct หรือ relay เรียกใช้ tailscale netcheck เพื่อดูว่า relay ใดอยู่ใกล้ที่สุด และเครือข่ายของคุณอนุญาต UDP หรือไม่
การหมุนเวียน key พร้อมวันหมดอายุ key ของ WireGuard ไม่มีวันหมดอายุ key ที่ออกให้เมื่อ 3 ปีก่อนยังใช้งานได้ตลอดไป เว้นแต่คุณจะลบ peer block ด้วยตนเอง Tailscale จะกำหนดวันหมดอายุให้ node key แทน และ ณ July 2026 ระยะเวลาหมดอายุเริ่มต้นของ tailnet ใหม่คือ 180 วัน เครื่องที่ไม่ได้ทำการยืนยันตัวตนอีกครั้งจะหยุดการเชื่อมต่อ คุณสามารถปิดการหมดอายุเป็นรายอุปกรณ์ได้สำหรับเซิร์ฟเวอร์หรือ subnet router ที่ไม่มีผู้ดูแลอยู่เพื่อเข้าสู่ระบบ
ใช้นโยบายแทนการกำหนดเส้นทาง ใน WireGuard แบบพื้นฐาน AllowedIPs ทำหน้าที่เป็นทั้ง routing table และ access control list ดังนั้นข้อความว่า “alice เข้าถึง database ได้” ต้องแสดงด้วยช่วง IP Tailscale แยก policy file ออกมา โดยกฎจะระบุ users, groups และ tags กฎหนึ่งสามารถระบุว่า tag:laptop เข้าถึง tag:db ผ่าน port 5432 ได้เท่านั้น และห้ามเข้าถึงสิ่งอื่น กฎดังกล่าวยังคงมีผลแม้เครื่องจะได้รับ address ใหม่
ต้นทุนที่คุณต้องรับจาก control plane
เซิร์ฟเวอร์ประสานงานรู้ข้อมูลเครือข่ายของคุณ เซิร์ฟเวอร์นี้เก็บ public key ของทุก node ชื่อของทุก node ที่อยู่ที่แจกจ่าย และนโยบาย เมื่อใช้ Tailscale แบบโฮสต์ เซิร์ฟเวอร์นี้อยู่ภายใต้การควบคุมของบริษัทภายนอก เครือข่ายนี้ไม่สามารถอ่าน packet ของคุณได้ เพราะ private key ของ WireGuard ยังคงอยู่บนเครื่องของคุณ แต่บริษัทดังกล่าวมองเห็นโครงสร้างเครือข่ายของคุณได้ และความสามารถในการเชื่อมต่อของคุณขึ้นอยู่กับการที่บริการของบริษัททำงานอยู่ รวมถึงสถานะบัญชีของคุณต้องเป็นปกติ
ยังมีต้นทุนอีกประการหนึ่งที่มองข้ามได้ง่าย Tailscale ทำงานเป็น daemon บนทุกเครื่อง ดังนั้นคุณต้องคอยติดตั้งแพตช์ให้ซอฟต์แวร์นี้บนทุกเครื่อง Plain WireGuard บน Ubuntu 24.04 เป็น kernel module ที่มากับ distribution และได้รับการอัปเดตพร้อมกับ kernel
ต้นทุนประการที่สามคือค่าบริการ ณ July 2026 แผน Personal ไม่มีค่าใช้จ่ายและรองรับอุปกรณ์ไม่จำกัดสำหรับผู้ใช้สูงสุด 6 คน แผน Standard มีค่าใช้จ่าย $8 ต่อผู้ใช้ต่อเดือน และแผน Premium มีค่าใช้จ่าย $18 ต่อผู้ใช้ต่อเดือน ครัวเรือนหนึ่งยังคงใช้งานได้ฟรี แต่ทีมที่มีสมาชิก 10 คนไม่สามารถใช้งานได้ฟรี
เมื่อ WireGuard แบบพื้นฐานเป็นตัวเลือกที่เหมาะสม
เลือกใช้ WireGuard แบบพื้นฐานเมื่อโทโพโลยีเป็นแบบฮับและสโปกอย่างแท้จริง มี VPS 1 เครื่องที่มี public IP และอุปกรณ์ 3 หรือ 4 เครื่องที่เชื่อมต่อไปยัง VPS ดังกล่าว โดยไม่มีข้อกำหนดให้อุปกรณ์เหล่านั้นเชื่อมต่อถึงกัน การตั้งค่าพอดีกับหน้าจอเดียว ไม่มี daemon ที่ต้องอัปเดต ไม่มีบัญชีที่อาจสูญเสียการเข้าถึง และไม่มีบริการภายนอกคั่นกลางระหว่างคุณกับเซิร์ฟเวอร์
WireGuard แบบพื้นฐานยังเหมาะสมเมื่อคุณต้องการทำความเข้าใจชั้นพื้นฐานที่ระบบอื่นสร้างขึ้นบนชั้นนี้ การโฮสต์ WireGuard VPN บน VPS ด้วยตนเอง อธิบายการสร้างคีย์, wg0.conf, การส่งต่อ IP, NAT และความล้มเหลวของ handshake กลไกเหล่านี้ทั้งหมดยังคงทำงานอยู่เบื้องหลัง tailnet หากคุณยังพิจารณาตัวเลือกแบบเดิมอยู่ WireGuard เทียบกับ OpenVPN อธิบาย 4 กรณีที่ OpenVPN ยังคงมีข้อได้เปรียบ
การติดตั้งใช้ขั้นตอนไม่มาก:
sudo apt update && sudo apt install -y wireguard
sudo modprobe wireguard && echo okWireGuard แบบพื้นฐานเริ่มใช้งานไม่สะดวกทันทีที่อุปกรณ์ทุกเครื่องต้องเชื่อมต่อถึงอุปกรณ์อื่นทุกเครื่อง full mesh ของโหนด N โหนดต้องมี peer block จำนวน N เท่าของ N ลบ 1 เมื่อมีอุปกรณ์ 6 เครื่อง จะมี block จำนวน 30 รายการที่ต้องดูแลให้ตรงกันด้วยตนเอง และรายการ AllowedIPs ที่ซ้ำกันจะดึงทราฟฟิกไปจาก peer ที่มีรายการนั้นก่อนโดยไม่แจ้งข้อผิดพลาดใด ๆ ออกมาเลย
เมื่อ Tailscale เป็นคำตอบที่เหมาะสม
เลือก Tailscale เมื่อเครื่องเปลี่ยนเครือข่ายอยู่เสมอ เช่น แล็ปท็อปที่เชื่อมต่อเครือข่ายโรงแรม โทรศัพท์ที่ใช้เครือข่ายข้อมูลมือถือ หรือเซิร์ฟเวอร์ที่บ้านซึ่งอยู่หลังเราเตอร์ที่คุณควบคุมไม่ได้ กรณีเหล่านี้เป็นกรณีที่ WireGuard แบบทั่วไปจัดการได้ไม่ดี เพราะทั้งสองฝั่งไม่มี public endpoint ที่คงที่สำหรับใส่ใน Endpoint
ติดตั้ง client ด้วยคำสั่งเดียวจากตัวติดตั้งอย่างเป็นทางการ:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale statustailscale up จะแสดง URL ให้เปิด URL ดังกล่าว ลงชื่อเข้าใช้ แล้วเครื่องจะเข้าร่วมเครือข่าย ไม่มีคีย์ที่ต้องคัดลอกและไม่ต้องเปิดพอร์ตขาเข้า เพราะ daemon จะสร้างการเชื่อมต่อขาออกไปยัง coordination server และคงการเชื่อมต่อนั้นไว้ นี่เป็นเหตุผลที่ node ของ Tailscale ทำงานได้บนเครือข่ายที่คุณไม่สามารถควบคุม firewall ได้เลย
หลังจากนั้น การตั้งค่า 2 รายการจะทำงานที่มีประโยชน์ส่วนใหญ่ให้เสร็จสิ้น Subnet router จะประกาศ LAN ทั้งหมดเข้าสู่เครือข่าย ทำให้คุณไม่ต้องติดตั้ง client บนอุปกรณ์ทุกเครื่อง:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
sudo tailscale set --advertise-routes=192.0.2.0/24เส้นทางจะยังไม่ทำงานจนกว่าคุณจะอนุมัติเส้นทางนั้นใน admin console ซึ่งเป็นการออกแบบโดยตั้งใจ: node ไม่สามารถเพิ่มเส้นทางเข้าสู่เครือข่ายของคุณได้เอง นอกจากนี้ client บน Linux ต้องใช้ sudo tailscale set --accept-routes เนื่องจาก Linux ไม่ยอมรับเส้นทางที่ประกาศโดยค่าเริ่มต้น ดังนั้นเส้นทางที่ดูเหมือนได้รับอนุมัติจากฝั่งเซิร์ฟเวอร์จะยังไม่ทำงานบนแล็ปท็อป Linux จนกว่าคุณจะตั้งค่าดังกล่าว
Exit node จะส่ง traffic ทั้งหมดของ client ผ่านเครื่องหนึ่งเครื่อง ซึ่งเป็นลักษณะ full tunnel ที่ผู้คนมักหมายถึงเมื่อพูดว่า "VPN":
sudo tailscale set --advertise-exit-nodeHeadscale เป็นคำตอบที่เหมาะสมเมื่อใด
Headscale เป็นการนำเซิร์ฟเวอร์ประสานงานมาใช้งานแบบโอเพนซอร์ส และทำงานบน VPS ที่คุณเป็นเจ้าของ ไคลเอนต์ Tailscale อย่างเป็นทางการจะเชื่อมต่อไปยังเซิร์ฟเวอร์นี้แทนบริการที่โฮสต์ไว้:
sudo tailscale up --login-server https://headscale.example.comเส้นทางข้อมูลยังคงเหมือนเดิมทั้งหมด ยังคงใช้ WireGuard และยังคงเชื่อมต่อโดยตรงระหว่างเพียร์เมื่อเครือข่ายอนุญาต สิ่งที่เปลี่ยนแปลงคือรายการโหนด คีย์ และนโยบายจะอยู่ในไฟล์ SQLite บนดิสก์ที่คุณเป็นเจ้าของ บุคคลภายนอกจะไม่สามารถเห็นโครงสร้างเครือข่ายของคุณ ปิดใช้งานบัญชีของคุณ หรือเรียกเก็บค่าบริการตามจำนวนผู้ใช้ได้
สิ่งที่แลกมาคือการต้องดูแลระบบจริง คุณจะต้องให้บริการ HTTPS สาธารณะ ซึ่งหมายถึงต้องมีชื่อ DNS ใบรับรอง และ reverse proxy ที่ส่งต่อการอัปเกรด WebSocket ได้อย่างถูกต้อง คุณต้องรับผิดชอบ uptime ของบริการ และเมื่อเซิร์ฟเวอร์ประสานงานหยุดทำงาน โหนดใหม่จะลงทะเบียนไม่ได้ ส่วนโหนดที่มีอยู่จะไม่สามารถรับทราบการเปลี่ยนแปลงได้ Headscale ยังมีเวอร์ชันต่ำกว่า 1.0 และรุ่นย่อยที่ออกมามีการเปลี่ยนแปลงที่ไม่เข้ากันได้กับรุ่นเดิม ดังนั้นควรอ่าน changelog ก่อนการอัปเกรดทุกครั้ง การเรียกใช้ Headscale เป็นเซิร์ฟเวอร์ควบคุม Tailscale ของคุณเอง ครอบคลุมการติดตั้ง config.yaml, preauth keys และพอร์ตที่ต้องเปิด
ข้อควรระวังประการหนึ่งมักถูกพบเมื่อแก้ไขได้ยากแล้ว Headscale ไม่มีเครือข่ายรีเลย์ทั่วโลกของ Tailscale มาให้ เมื่อเพียร์สองเครื่องไม่สามารถเชื่อมต่อโดยตรงได้ คุณต้องเปิดใช้รีเลย์ที่ฝังอยู่บนเซิร์ฟเวอร์ของคุณเอง หรือกำหนดค่าให้ใช้รีเลย์อื่น และรีเลย์นั้นจะเป็นเซิร์ฟเวอร์เพียงเครื่องเดียวในภูมิภาคเดียว ไม่ใช่กลุ่มเซิร์ฟเวอร์ทั่วโลก เพียร์ที่อยู่ห่างไกลอีกฟากหนึ่งของโลกจะได้รับผลกระทบจากความแตกต่างนี้
วิธีตัดสินใจในครั้งเดียว
ถามว่ามีเครื่องกี่เครื่องที่ต้องติดต่อถึงกัน หากคำตอบคือทุกเครื่องเพียงติดต่อกับเซิร์ฟเวอร์เท่านั้น การใช้ WireGuard แบบธรรมดาจะมีซอฟต์แวร์น้อยกว่าและให้ผลลัพธ์เดียวกัน
ถามว่าเครื่องเหล่านั้นมี public address ที่คงที่หรือไม่ หากเครื่องส่วนใหญ่อยู่หลัง NAT ที่คุณควบคุมไม่ได้ คุณควรใช้ control plane เพราะ hole punching เป็นส่วนที่ทำได้ยาก และไม่คุ้มที่จะสร้างขึ้นใหม่
ถามว่าใครได้รับอนุญาตให้ทราบโครงสร้างเครือข่ายของคุณ หากคำตอบคือไม่อนุญาตให้บริษัทภายนอกรับทราบ หรือจำนวนผู้ใช้ทำให้การคิดค่าบริการต่อ seat เป็นภาระ ให้ใช้ Headscale และยอมรับว่าคุณต้องดูแล control server เอง
คุณสามารถเปลี่ยนใจได้โดยมีต้นทุนต่ำ เนื่องจาก data plane ใช้โปรโตคอลเดียวกันทั้ง 3 แบบ การเปลี่ยนจาก WireGuard แบบธรรมดาไปเป็น coordinated mesh จึงเป็นเพียงการติดตั้งไคลเอนต์ ไม่ใช่การออกแบบระบบใหม่ และการเปลี่ยนจาก Tailscale ไปเป็น Headscale คือการลงทะเบียนแต่ละ node ใหม่กับ login server คนละตัว
สิ่งที่ทั้งสามแบบไม่มีให้
ไม่มีแบบใดเป็นไฟร์วอลล์ อุโมงค์จะกำหนดว่าแพ็กเก็ตใดถูกส่งผ่านเท่านั้น ไม่ได้กำหนดว่าบริการใดกำลังรอรับการเชื่อมต่อ เซิร์ฟเวอร์ที่เข้าถึงได้ผ่านอุโมงค์ยังคงเข้าถึงได้จากอินเทอร์เน็ตผ่านพอร์ตใดก็ตามที่คุณเปิดไว้ ดังนั้นให้ กฎไฟร์วอลล์ UFW บน VPS ยังคงทำหน้าที่ของตนต่อไป ไฟล์นโยบายของ Tailscale จะจำกัดสิ่งที่โหนดอื่นเข้าถึงได้ และไม่มีผลใด ๆ ต่ออินเทอร์เฟซสาธารณะ
ไม่มีแบบใดให้การตรวจสอบสิทธิ์แยกตามบริการ และไม่มีแบบใดเป็นบันทึกตรวจสอบว่าผู้ใช้ดำเนินการอะไรหลังจากเชื่อมต่อแล้ว ให้ถือว่าทั้งสามแบบเป็นกลไกการรับส่งข้อมูล และให้แอปพลิเคชันจัดการการตรวจสอบการเข้าสู่ระบบ
FAQ
Tailscale เป็นเพียง WireGuard ที่มีขั้นตอนเพิ่มเติมใช่หรือไม่
Tailscale ใช้โปรโตคอล WireGuard สำหรับเส้นทางข้อมูล ดังนั้นการเข้ารหัสและ tunnel จึงเหมือนกัน สิ่งที่เพิ่มเข้ามาคือการประสานงาน ได้แก่ การแลกเปลี่ยน key การกำหนด address การข้าม NAT ด้วย STUN และ relay ของ DERP การหมดอายุของ key และไฟล์นโยบายที่ระบุชื่อผู้ใช้แทนช่วง IP ส่วนเหล่านี้เป็นสิ่งที่ WireGuard แบบปกติให้คุณจัดการเอง และจะเริ่มจัดการได้ยากเมื่อเครื่องย้ายไปอยู่คนละ network
Traffic ของฉันจะผ่าน server ของ Tailscale หรือไม่
โดยปกติจะไม่ผ่าน Peer จะเชื่อมต่อถึงกันโดยตรงหลังจาก coordination server แนะนำให้รู้จักกัน และ tailscale status จะแสดง direct ในบรรทัดของ peer เหล่านั้น หากไม่สามารถสร้างเส้นทางโดยตรงได้ traffic จะเปลี่ยนไปใช้ relay ของ DERP และบรรทัดจะแสดง relay แม้ในกรณีนั้น relay จะส่งต่อ packet ที่เข้ารหัสแล้ว และไม่มี private key ของ WireGuard จึงไม่สามารถอ่านเนื้อหาได้ เรียกใช้ tailscale netcheck เพื่อดูว่า network ของคุณบล็อก UDP ที่จำเป็นต่อการเชื่อมต่อโดยตรงหรือไม่
ฉันสามารถใช้ Headscale กับแอป Tailscale อย่างเป็นทางการได้หรือไม่
ได้ Headscale ใช้ control protocol เดียวกัน ดังนั้น client อย่างเป็นทางการจึงเข้าร่วมได้ด้วย sudo tailscale up --login-server https://headscale.example.com แอปสำหรับ desktop และ mobile สามารถกำหนดให้ใช้ login server แบบกำหนดเองได้เช่นกัน แต่ตำแหน่งการตั้งค่าจะแตกต่างกันในแต่ละ platform และแอป mobile มีแนวโน้มต้องใช้ version ที่ระบุเป็นพิเศษมากที่สุด ให้ทดสอบกับโทรศัพท์ 1 เครื่องก่อนย้ายทั้ง network
ฉันยังต้องเปิด port สำหรับ Tailscale หรือ Headscale หรือไม่
Tailscale client ไม่ต้องใช้ inbound port เพราะจะเริ่มการเชื่อมต่อออกไปยัง coordination server และรักษาการเชื่อมต่อนั้นไว้ เซิร์ฟเวอร์ Headscale ที่โฮสต์เองต้องมี inbound port ได้แก่ 443 สำหรับ control protocol, 80 หากใช้การท้าทายใบรับรองแบบ HTTP-01 และ 3478/udp เฉพาะเมื่อเปิดใช้ relay ที่ฝังมาในระบบ WireGuard แบบปกติต้องเปิด UDP listen port ซึ่งโดยทั่วไปคือ 51820 ทั้งบนเซิร์ฟเวอร์และบน firewall ของ network อื่นที่ผู้ให้บริการของคุณดูแล
ระบบใดใน 3 ระบบนี้เร็วที่สุด
Throughput เท่ากัน เพราะทั้ง 3 ระบบส่ง packet ด้วย WireGuard ความแตกต่างจะเห็นได้จากเวลาเริ่มสร้างการเชื่อมต่อและคุณภาพของเส้นทาง WireGuard แบบปกติที่กำหนดค่า Endpoint อย่างถูกต้องจะเชื่อมต่อโดยตรงทุกครั้ง Tailscale และ Headscale เชื่อมต่อโดยตรงได้เกือบตลอดเวลา และจะเปลี่ยนไปใช้ relay เมื่อ network บล็อกการทำ hole punching ซึ่งเส้นทางผ่าน relay จะเพิ่ม latency ให้ตรวจวัดเส้นทางของคุณเองด้วย tailscale ping <node> ซึ่งรายงานว่าเส้นทางเป็นแบบ direct หรือ relayed หรือใช้ iperf3 ผ่าน tunnel