Headscale คืออะไร
Headscale เป็นการใช้งานโอเพนซอร์สของเซิร์ฟเวอร์การควบคุม Tailscale ซึ่งช่วยให้คุณสามารถเรียกใช้งาน Tailscale control server ของคุณเองบน VPS ได้เลย แทนที่จะเชื่อมต่อไปยังเซิร์ฟเวอร์ SaaS ของ Tailscale Inc. Tailscale นั้นสร้างบนพื้นฐาน WireGuard ซึ่งเป็นโปรโตคอล VPN ที่ปลอดภัยและประสิทธิภาพสูง และใช้สถาปัตยกรรม mesh network ที่อนุญาตให้อุปกรณ์เชื่อมต่ออย่างตรงไปตรงมาผ่านกันและกันแทนที่จะผ่าน VPN gateway ส่วนกลาง อย่างไรก็ตาม การประสานงานและการค้นหาอุปกรณ์ยังคงต้องอาศัยเซิร์ฟเวอร์การควบคุม Headscale ช่วยให้คุณเรียกใช้เซิร์ฟเวอร์นี้เองซึ่งนำเสนอข้อดี: ความเป็นส่วนตัวที่สูง ไม่มีข้อจำกัดจำนวนอุปกรณ์ และการปฏิบัติตามข้อบังคับ
สรุปสั้น: Headscale เป็นเซิร์ฟเวอร์ควบคุม Tailscale แบบโอเพนซอร์สที่คุณติดตั้งบน VPS ของคุณเอง โดยยังคงใช้ client Tailscale อย่างเป็นทางการทั้งหมด แต่เซิร์ฟเวอร์ควบคุมอยู่ภายใต้ควบคุมของคุณจึงไม่มีข้อจำกัดอุปกรณ์ ข้อมูลอยู่ในประเทศของคุณ และ ACL นั้นยืดหยุ่นได้อย่างสมบูรณ์
เหตุใดจึงควรใช้ Headscale แทน Tailscale ปกติ
มีหลายเหตุผลที่องค์กรและผู้ใช้ส่วนตัวเลือก Headscale ประการแรก Tailscale ฟรีจำกัด 3 อุปกรณ์เท่านั้น ด้วย Headscale คุณสามารถเชื่อมต่อได้กี่อุปกรณ์ก็ได้ ประการที่สอง ข้อมูลการเชื่อมต่อและที่อยู่ IP ทั้งหมดจะอยู่บนเซิร์ฟเวอร์ของคุณเท่านั้น ไม่มีการส่งไปยัง Tailscale Inc. ซึ่งเป็นประโยชน์อย่างมากสำหรับความเป็นส่วนตัวและการปฏิบัติตามข้อบังคับเช่น GDPR ประการที่สาม คุณได้รับการควบคุมเต็มอำนาจเหนือกฎ ACL (Access Control Lists) และสามารถกำหนดค่า MagicDNS ชื่อเซิร์ฟเวอร์ และพฤติกรรมอื่นๆ ได้ตามต้องการ ประการที่สี่ หากองค์กรของคุณมีข้อกำหนดเรื่องการเก็บข้อมูลทั้งหมดภายในประเทศ Headscale ช่วยให้คุณปฏิบัติตามนั้นได้
Headscale เทียบกับ Tailscale เทียบกับ WireGuard บริสุทธิ์
เพื่อให้เข้าใจบริบท ลองพิจารณาความแตกต่างสามทาง WireGuard คือโปรโตคอล VPN ระดับต่ำที่ปลอดภัยอย่างน่าเหลือเชื่อและเร็ว แต่ต้องการการกำหนดค่าด้วยตนเอง เช่น การสร้างคีย์การตั้งค่าเปลี่ยนเส้นทาง และการจัดการทะเบียน IP Tailscale นั้นสร้างขึ้นบน WireGuard และเพิ่มความสะดวก ได้แก่ การค้นหาเพื่อนโดยอัตโนมัติ การเคลื่อนตัวผ่าน NAT และ MagicDNS ซึ่งทำให้ใช้งานได้ง่ายเหมือนการป้อนชื่อเซิร์ฟเวอร์แทนที่จะป้อน IP อย่างไรก็ตาม Tailscale อย่างเป็นทางการนั้นข้อมูลของคุณผ่านเซิร์ฟเวอร์ Tailscale Inc. บนคลาวด์ Headscale จำลองเซิร์ฟเวอร์การควบคุม Tailscale โดยอยู่บน VPS ของคุณ ดังนั้นคุณจึงได้รับความสะดวก Tailscale ทั้งหมด (client ทั่วไป MagicDNS NAT traversal) แต่เซิร์ฟเวอร์ยังคงอยู่ภายใต้ควบคุมของคุณ
ข้อควรระวัง: Headscale และ Tailscale ไม่ใช่ตัวแลกเปลี่ยน 100% ตัวอย่างเช่น Headscale ไม่รองรับ OIDC/SSO ในลักษณะเดียวกับ Tailscale ฟรี และคุณต้องตั้ง HTTPS และโดเมนของคุณเองซึ่งแตกต่างจากการสมัครสมาชิก Tailscale
ข้อกำหนดเบื้องต้นและการเตรียมการ
ก่อนที่จะเริ่ม ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้: (1) VPS ที่เรียกใช้ Ubuntu 22.04 LTS (หรือ Debian ที่คล้ายกัน) พร้อมการเข้าถึง root (2) ที่อยู่ IP สาธารณะเต็มรูปแบบไม่ใช่ CGNAT (Carrier Grade NAT) เนื่องจาก Headscale ต้องการ IP ประวัติ (3) ชื่อโดเมน DNS ที่ชี้ไปยัง IP ของ VPS (ตัวอย่างเช่น headscale.example.com) ซึ่งจำเป็นสำหรับใบรับรอง HTTPS (4) Docker และ Docker Compose ติดตั้ง (หรือคุณสามารถติดตั้ง Headscale ฐานข้อมูล) และ (5) ความรู้พื้นฐานเกี่ยวกับบรรทัดคำสั่ง Nginx และไฟร์วอลล์ Linux หากคุณมีอย่างครบ ลองตั้งค่า DNS A record สำหรับโดเมนของคุณเพื่อชี้ไปยัง IP ของ VPS ก่อนดำเนินการต่อ
ติดตั้ง Headscale: วิธี Docker Compose
สำหรับการตั้งค่าที่ง่ายและรวดเร็ว Docker Compose นั้นเหมาะสม ตรวจสอบว่า Docker ติดตั้งแล้ว:
docker --version && docker-compose --version
สร้างไดเรกทอรี่สำหรับ Headscale:
mkdir -p /opt/headscale/data /opt/headscale/config cd /opt/headscale
สร้างไฟล์ docker-compose.yml:
version: '3.8'
services:
headscale:
image: headscale/headscale:latest
container_name: headscale
hostname: headscale
ports:
- "8080:8080"
- "51820:51820/udp"
volumes:
- ./data:/var/lib/headscale
- ./config.yaml:/etc/headscale/config.yaml
environment:
- TZ=Asia/Bangkok
restart: unless-stopped
networks:
- headscale
networks:
headscale:
driver: bridge
ดาวน์โหลดไฟล์การกำหนดค่า Headscale ตัวอย่าง:
docker run --rm headscale/headscale:latest headscale generate config > /opt/headscale/config.yaml
เริ่มตัวถังปลั๊กอิน:
cd /opt/headscale docker-compose up -d docker-compose logs -f
ตรวจสอบสถานะ:
docker exec headscale headscale nodes list
เคล็ดลับ: หาก port 8080 ขัดแย้ง ให้เปลี่ยน ports ใน docker-compose.yml เป็น 8888:8080 เป็นต้น จากนั้น Nginx reverse proxy ด้านหน้าจะจัดการการเปลี่ยนเส้นทาง HTTPS
ติดตั้ง Headscale: ไบนารี่ดั้งเดิม (ทางเลือก)
หากคุณต้องการการควบคุมมากขึ้นหรือต้องการหลีกเลี่ยง Docker ให้ติดตั้งไบนารี่ Headscale ดาวน์โหลดเวอร์ชันล่าสุด (ตรวจสอบ GitHub releases):
cd /tmp
HEADSCALE_VERSION=0.22.0
wget https://github.com/juanfont/headscale/releases/download/v${HEADSCALE_VERSION}/headscale_${HEADSCALE_VERSION}_linux_amd64 -O headscale
chmod +x headscale
sudo mv headscale /usr/local/bin/
สร้างผู้ใช้ระบบและไดเรกทอรี่:
sudo useradd -r -s /bin/false headscale sudo mkdir -p /etc/headscale /var/lib/headscale sudo chown -R headscale:headscale /var/lib/headscale /etc/headscale
สร้างไฟล์ systemd service:
sudo tee /etc/systemd/system/headscale.service > /dev/null <<'EOF' [Unit] Description=Headscale VPN Control Server After=network.target Wants=network-online.target [Service] Type=simple User=headscale Group=headscale WorkingDirectory=/var/lib/headscale ExecStart=/usr/local/bin/headscale serve -config /etc/headscale/config.yaml Restart=on-failure RestartSec=5s StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable headscale
การกำหนดค่า config.yaml
ไฟล์ config.yaml ที่สร้างไว้มีการตั้งค่ามากมาย นี่คือส่วนสำคัญที่คุณต้องแก้ไข ก่อนอื่นให้แก้ไข config.yaml:
server:
listen_addr: 0.0.0.0
listen_port: 8080
server_url: https://headscale.example.com
db:
type: sqlite3
sqlite3:
path: /var/lib/headscale/db.sqlite3
derp:
server:
enabled: true
region_id: 900
region_code: "headscale"
region_name: "Headscale DERP"
stun_listen_addr: "0.0.0.0:3478"
dns:
base_domain: example.com
magic_dns: true
domains:
- example.com
- headscale.example.com
policy:
mode: file
path: /etc/headscale/acl.yaml
log:
level: info
เปลี่ยน example.com และ headscale.example.com เป็นโดเมนของคุณ server_url เป็นสิ่งสำคัญอย่างยิ่ง - Tailscale client ใช้นี่เพื่อค้นหาเซิร์ฟเวอร์การควบคุม ห้าม HTTP ใช้ HTTPS เท่านั้น ที่เหลือกำหนดค่าฐานข้อมูล SQLite ถูกตั้งค่าเริ่มต้น DERP (Detour Encrypted Relay Protocol) เป็นเซิร์ฟเวอร์ relay สำหรับอุปกรณ์ที่ไม่สามารถเชื่อมต่อโดยตรงได้ และ MagicDNS อนุญาตให้อุปกรณ์ค้นหากันตามชื่อแทนที่จะป้อน IP
เซ็ตอัพ HTTPS ด้วย Nginx และ Let's Encrypt
Tailscale client คาดหวัง HTTPS บน server_url หากไม่มี TLS client จะปฏิเสธเซิร์ฟเวอร์ ใช้ Nginx เป็น reverse proxy ด้านหน้า Headscale และใช้ Certbot เพื่อให้ได้ใบรับรอง Let's Encrypt ติดตั้ง Nginx:
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx curl
สร้างไฟล์ Nginx config สำหรับ Headscale:
sudo tee /etc/nginx/sites-available/headscale > /dev/null <<'EOF'
upstream headscale_backend {
server localhost:8080;
}
server {
listen 80;
listen [::]:80;
server_name headscale.example.com;
location / {
proxy_pass http://headscale_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
}
}
EOF
เปิดใช้งานไซต์ (หากไม่ได้สำหรับ Docker):
sudo ln -s /etc/nginx/sites-available/headscale /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-enabled/default sudo nginx -t sudo systemctl restart nginx
รันตั้งค่า Certbot เพื่อสร้างใบรับรอง HTTPS:
sudo certbot --nginx -d headscale.example.com
ตัวเลือก Certbot แบบโต้ตอบจะถามว่าต้องการเปลี่ยนเส้นทาง HTTP ไป HTTPS หรือไม่ (เลือก "2" เพื่อให้ Certbot จัดการทุกอย่าง) Certbot จะสร้างใบรับรองและอัปเดต Nginx config อัตโนมัติ
ข้อควรระวัง: อย่าลืมเปิดพอร์ต 80 (HTTP) และ 443 (HTTPS) บนไฟร์วอลล์ VPS ของคุณสำหรับการต่ออินเทอร์เน็ต ยิ่งไปกว่านั้น สำหรับ Headscale ให้เปิด UDP port 51820 สำหรับ WireGuard traffic
ตั้งค่า Namespace, Users และ Pre-Auth Keys
หลังจากเซิร์ฟเวอร์ Headscale ทำงาน ให้สร้าง namespace (คิดว่ามันเป็น "workspace" หรือ "team") สำหรับอุปกรณ์ของคุณ สำหรับ Docker:
docker exec headscale headscale namespaces create mycompany docker exec headscale headscale users create admin
สำหรับไบนารี่ดั้งเดิม:
sudo -u headscale /usr/local/bin/headscale namespaces create mycompany sudo -u headscale /usr/local/bin/headscale users create admin
สร้าง pre-auth key เพื่อให้อุปกรณ์เข้าร่วม namespace นั้น:
docker exec headscale headscale preauthkeys create --namespace mycompany --reusable --expiration 24h
นี่จะพิมพ์ pre-auth key ที่เป็นสตริงสำหรับใช้บนอุปกรณ์ client
เชื่อมต่อ Tailscale Client
บนอุปกรณ์ของคุณ (Mac, Linux, Windows, iOS, Android) ติดตั้ง Tailscale client ตามปกติจาก tailscale.com จากนั้นเปิด Terminal/Command Prompt และเรียกใช้:
tailscale up --login-server=https://headscale.example.com
ใช้ --login-server flag เพื่อบอก client ให้ใช้เซิร์ฟเวอร์ Headscale ของคุณแทน official Tailscale server client จะแสดง URL ให้ไปและป้อน pre-auth key ที่คุณสร้าง ตรวจสอบ node (อุปกรณ์) ต่างๆ ที่เชื่อมต่อ:
docker exec headscale headscale nodes list
อุปกรณ์ของคุณควรปรากฏด้วย Tailscale IP (เรียมมี 100.x.x.x)
การจัดการ ACL (Access Control List)
ไฟล์ ACL อยู่ใน /etc/headscale/acl.yaml (หรือใน Docker volume) และระบุว่าอุปกรณ์ใดสามารถพูดคุยกับอุปกรณ์ใดได้ ตัวอย่างพื้นฐาน:
groups:
"group:admin":
- admin
"group:developers":
- dev1
- dev2
- dev3
acls:
- action: accept
src:
- group:admin
dst:
- "*:*"
- action: accept
src:
- group:developers
dst:
- "10.0.0.0/24:22"
- "10.0.1.0/24:443"
- action: deny
src:
- "*"
dst:
- "*:*"
กฎนี้อนุญาต admin group เข้าถึงทุกอุปกรณ์บนทุกพอร์ต developers group ได้เพียง SSH (port 22) ไปยัง 10.0.0.0/24 และ HTTPS (port 443) ไปยัง 10.0.1.0/24 ส่วนอื่นๆ ถูกปฏิเสธ ให้ตั้งค่า ACL แล้ว reload Headscale:
docker exec headscale headscale serve --config /etc/headscale/config.yaml
หรือสำหรับไบนารี่:
sudo systemctl restart headscale
ความปลอดภัยและการดูแลรักษา
เมื่อ Headscale ทำงาน ให้จำไว้แนวทางความปลอดภัยสำคัญบางประการ ประการแรก ไฟร์วอลล์ VPS ของคุณ อนุญาตเพียง port 443 (HTTPS) และ 51820 (WireGuard UDP) จากข้างนอก จำกัด port 8080 (Headscale internal) เฉพาะการเข้าถึงภายในเครือข่าย localhost ประการที่สอง หากคุณมีการบูรณาการ API ให้เก็บ API key/secret ในสภาแห่งความลับ ไม่ใช่ในสคริปต์อย่างชัดแจ้ง ประการที่สาม ให้อัพเดต Headscale อย่างสม่ำเสมอ สำหรับ Docker: docker pull headscale/headscale:latest & docker-compose up -d สำหรับไบนารี่ ดาวน์โหลดไฟล์ release ที่ใหม่กว่าจาก GitHub ประการที่สี่ ทำการสำรองข้อมูลฐานข้อมูล SQLite (/var/lib/headscale/db.sqlite3) อย่างสม่ำเสมอ (ใช้ cron job หรือการสำรองข้อมูล VPS ของคุณ) ประการที่ห้า ตรวจสอบบันทึก Headscale เป็นประจำเพื่อหาสัญญาณการเจาะระบบหรือการเข้าถึงที่ผิดปกติ สำหรับ Docker: docker logs headscale สำหรับไบนารี่: journalctl -u headscale -n 50
เคล็ดลับ: บน VPS ของ AsiaGB ที่มี SSD เร็ว SQLite ฐานข้อมูล จะทำงานได้อย่างราบรื่นแม้ว่าจะมีอุปกรณ์นับร้อย สำหรับการขยายขนาดขั้นสูง (พันอุปกรณ์) พิจารณา PostgreSQL หรือ MySQL ต่อมา โปรแกรมสร้าง Headscale รองรับทั้งสองนี้ผ่านไฟล์ config
สรุป
ตอนนี้คุณมี Headscale VPN server ที่ใช้งานได้เต็มที่บน VPS โดยมีความเป็นส่วนตัว การควบคุม ACL ที่ไม่มีข้อจำกัด และไม่มีขีดจำกัดจำนวนอุปกรณ์ของ Tailscale ฟรี ด้วยการตั้ง HTTPS Nginx reverse proxy และ Let's Encrypt ของคุณ client ของคุณเชื่อมต่ออย่างปลอดภัย Headscale นำเสนอความสมดุลที่ยอดเยี่ยมระหว่างความปลอดภัยของ WireGuard และความสะดวกของ Tailscale ทีม VPS ของ AsiaGB มี CPU และ SSD ที่เร็วพอที่จะเรียกใช้เซิร์ฟเวอร์ Headscale ที่เสถียร ตอนนี้ให้เชื่อมต่ออุปกรณ์ตั้งแต่ 1 เครื่องขึ้นไปและเพลิดเพลินกับเน็ตเวิร์ก mesh ที่ปลอดภัยของคุณเอง
คำถามที่พบบ่อย (FAQ)
Headscale ต้องการฐานข้อมูล PostgreSQL หรือ MySQL หรือ SQLite ก็เพียงพอ?
SQLite ก็เพียงพอสำหรับการตั้ง small-to-medium (ร้อย-พันอุปกรณ์) Headscale จัดการทั้ง SQLite PostgreSQL และ MySQL ผ่านไฟล์ config สำหรับการขยายขนาดขั้นสูง ให้ลองใช้ PostgreSQL
ฉันลืม pre-auth key ของฉันได้ไหม?
ใช่ได้ ให้สร้าง pre-auth key ใหม่ด้วย `headscale preauthkeys create --namespace mycompany --reusable --expiration 24h` และใช้มันบนอุปกรณ์ใหม่
Headscale มีการตรวจสอบสิทธิ 2FA หรือไม่?
Headscale นั้นเล็กน้อยง่ายกว่า Tailscale อย่างเป็นทางการและไม่มี 2FA built-in อย่างไรก็ตาม คุณสามารถ restrict API keys และ pre-auth keys ด้วย expiration ได้
ฉันปิด Headscale control server ได้ไหม จะเกิดอะไรขึ้น?
Tailscale devices จะยังคงเชื่อมต่ออยู่ผ่านเส้นทางที่ถูกจัดเก็บไว้ก่อนหน้านี้ แต่พวกเขาจะไม่สามารถค้นหาอุปกรณ์ใหม่ นำเข้า ข้อเสนอแนะหรือเปลี่ยน ACL ได้ เซิร์ฟเวอร์ควบคุมถูกต้อง "ควบคุม" แต่ไม่ได้ relay ทราฟฟิก
เริ่มต้นใช้งาน VPS AsiaGB วันนี้
VPS AsiaGB ใช้ SSD Storage ทุก Plan เลือก Datacenter ไทยหรือสิงคโปร์ได้ พร้อม Root Access เต็มรูปแบบ เริ่มต้น 500 บาท/เดือน (Linux) พร้อมทีมซัพพอร์ตภาษาไทย
ดูแพ็กเกจ VPS