Tailscale: Mesh VPN untuk Server dan Homelab Anda

Foto oleh Arenamontanus on flickr
Tailscale adalah mesh VPN yang dibangun di atas protokol WireGuard, memberikan setiap perangkat IP privat yang stabil dan menghubungkan perangkat secara langsung satu sama lain kapan pun memungkinkan. Berbeda dengan VPN tradisional yang merutekan semua lalu lintas melalui satu gateway pusat, Tailscale hanya menggunakan server koordinasinya untuk autentikasi dan pertukaran kunci, sehingga data sesungguhnya bisa berjalan peer to peer dengan latensi lebih rendah dan tanpa titik kegagalan tunggal.
Headscale adalah implementasi ulang open source dan dikelola komunitas dari server kontrol Tailscale yang berbicara protokol sama dengan klien resmi Tailscale. Tim memilihnya ketika ingin control plane berjalan di infrastruktur yang benar-benar mereka miliki, baik untuk kepatuhan regulasi, kendali biaya pada jumlah perangkat besar, atau sekadar menghindari ketergantungan pada layanan pihak ketiga untuk konektivitas inti.
Subnet router adalah perangkat tailnet biasa yang mengumumkan seluruh rentang jaringan lokal, misalnya LAN homelab, ke sisa mesh. Perangkat lain di tailnet kemudian bisa menjangkau apa pun di subnet yang diumumkan itu, termasuk printer, appliance NAS, atau perangkat embedded, tanpa perlu menginstal klien Tailscale di masing-masing perangkat tersebut.
Ya, Tailscale menerapkan kontrol akses melalui file kebijakan tailnet yang ditulis dalam sintaks mirip JSON. Anda memberi tag pada perangkat berdasarkan peran, misalnya server atau homelab, lalu menulis aturan accept eksplisit yang menyebutkan tag sumber, tag tujuan, dan port yang diizinkan, sehingga begitu ada satu aturan, semua yang tidak diizinkan secara eksplisit akan ditolak secara default.
Koneksi peer to peer yang sudah ada tetap berjalan karena kunci WireGuard sudah dipertukarkan dan disimpan di masing-masing perangkat sebelum gangguan terjadi. Pendaftaran perangkat baru dan pertukaran kunci baru akan gagal sampai server kontrol kembali online, tetapi mesin yang sudah terhubung tetap bisa saling berkomunikasi melalui terowongan terenkripsi yang sudah terbentuk.

Foto oleh Arenamontanus on flickr
Ringkasan Utama
Tailscale membangun jaringan mesh terenkripsi di atas WireGuard, memberi setiap server, laptop, dan perangkat homelab alamat IP privat yang stabil serta koneksi peer-to-peer langsung tanpa melewati satu gateway VPN. Panduan ini membahas instalasi Tailscale, membuka akses ke subnet homelab lewat router node, mengunci akses dengan ACL, dan menghosting sendiri control plane-nya lewat Headscale.
Setiap developer pada akhirnya menghadapi masalah yang sama: database di sebuah VPS yang seharusnya tidak pernah tersentuh internet publik, NAS homelab di belakang router rumahan tanpa IP statis, dan laptop yang perlu menjangkau keduanya tanpa membuka satu pun port. VPN tradisional menyelesaikan ini dengan gateway pusat yang justru menjadi bottleneck dan titik kegagalan tunggal. Tailscale mengambil pendekatan yang sama sekali berbeda.
Tailscale membangun jaringan mesh di atas WireGuard, di mana setiap perangkat mendapat IP privat yang stabil dan berkomunikasi langsung dengan perangkat lain melalui terowongan terenkripsi, di mana pun perangkat itu secara fisik berada. Tulisan ini membahas cara instalasi di server dan homelab, mengunci lalu lintas dengan access control list, mengekspos seluruh subnet lewat node router, dan akhirnya menggantikan server koordinasi hosted milik Tailscale dengan instance Headscale yang di-self-host sendiri.
VPN klasik merutekan setiap paket melalui satu gateway. Gateway itu harus berskala mengikuti total trafik, menjadi satu-satunya hal yang bisa menjatuhkan seluruh jaringan jika gagal, dan menambah satu hop latensi pada setiap koneksi bahkan antara dua mesin yang berada di data center yang sama. Jaringan mesh membalik ini: server kontrol hanya menangani autentikasi dan pertukaran kunci publik, sementara data sesungguhnya berjalan peer to peer kapan pun jalur langsung tersedia.
Mulailah dengan menginstal Tailscale di tepat dua mesin, laptop rumah dan satu server cloud, lalu pastikan Anda bisa melakukan ping ke server melalui IP privat yang diberikan sebelum menambahkan apa pun lagi. Membuat mesh terkecil yang berfungsi lebih dulu membuat setiap langkah berikutnya, ACL, subnet route, self-hosting, jauh lebih mudah untuk di-debug.
Klien terinstal dengan cara yang sama di Linux, macOS, dan Windows, dan proses pertama akan memandu Anda melalui autentikasi berbasis browser ke penyedia identitas Anda. Setelah terautentikasi, perangkat diberi IP stabil pada rentang 100.64.0.0 hingga 100.127.255.255 yang tidak pernah berubah meski Anda bergabung kembali ke jaringan di kemudian hari. MagicDNS kemudian memberikan setiap perangkat hostname yang mudah dibaca seperti homelab-nas titik nama tailnet Anda, sehingga Anda hampir tidak pernah perlu menghafal alamat IP sama sekali.
# Install on a Linux server
curl -fsSL https://tailscale.com/install.sh | sh
# Authenticate and join the tailnet
sudo tailscale up
# Check assigned IP and hostname
tailscale ip -4
tailscale status
# Ping another node by its MagicDNS name
ping homelab-nas.tailnet-name.ts.netMenginstal klien di setiap perangkat dalam homelab tidak selalu praktis, terutama untuk perangkat embedded, printer, atau appliance NAS yang tidak menjalankan sistem operasi umum. Subnet router menyelesaikan ini dengan mengumumkan seluruh rentang jaringan lokal ke tailnet dari satu mesin yang memang menjalankan klien, sehingga setiap perangkat lain di mesh bisa menjangkau apa pun di subnet itu tanpa menginstal apa-apa lagi.
# Enable IP forwarding on the router node
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
# Advertise the homelab's LAN subnet
sudo tailscale up --advertise-routes=192.168.1.0/24
# On another device, accept the route from the admin console,
# then enable it locally if using the CLI approval flow
sudo tailscale up --accept-routesSubnet router yang mengumumkan 0.0.0.0/0 atau rentang yang terlalu luas bisa secara tidak sengaja mengekspos jauh lebih banyak jaringan Anda daripada yang dimaksudkan. Selalu umumkan blok CIDR paling sempit yang hanya mencakup perangkat yang benar-benar ingin Anda jangkau, dan periksa ulang daftar route yang disetujui di admin console setelah setiap perubahan.
Secara default setiap perangkat di tailnet bisa menjangkau setiap perangkat lain, yang baik-baik saja untuk uji coba dua mesin tetapi bukan yang Anda inginkan begitu server, laptop, dan akun kontraktor rekan kerja berbagi mesh yang sama. File kebijakan tailnet, ditulis dalam sintaks mirip JSON bernama HuJSON, memungkinkan Anda mendefinisikan tag untuk kelompok perangkat lalu menulis aturan accept eksplisit yang menjelaskan tepatnya kelompok mana yang boleh menjangkau port mana pada kelompok lain.
{
"tagOwners": {
"tag:server": ["autogroup:admin"],
"tag:homelab": ["autogroup:admin"]
},
"acls": [
{
"action": "accept",
"src": ["autogroup:member"],
"dst": ["tag:homelab:22,80,443,8080"]
},
{
"action": "accept",
"src": ["tag:server"],
"dst": ["tag:server:5432,6379"]
}
],
"ssh": [
{
"action": "check",
"src": ["autogroup:member"],
"dst": ["tag:server"],
"users": ["autogroup:nonroot"]
}
]
}| Konsep | Fungsinya | Catatan praktis |
|---|---|---|
| Tag | Melabeli perangkat berdasarkan peran, bukan pemilik, misalnya server atau homelab. | Tag tetap ada meski perangkat didaftarkan ulang, berbeda dengan aturan per pengguna. |
| ACL rule | Pernyataan accept eksplisit yang menyebutkan sumber, tujuan, dan port yang diizinkan. | Semua yang tidak diizinkan secara eksplisit akan ditolak begitu ada satu aturan. |
| Autogroup | Kelompok bawaan seperti members atau admin yang merujuk pada peran akun. | Berguna untuk aturan yang berlaku untuk setiap pengguna manusia, bukan tag tertentu. |
| SSH check | Blok kebijakan yang mengatur akses SSH melalui fitur SSH milik Tailscale sendiri. | Menghilangkan kebutuhan mendistribusikan kunci SSH terpisah ke setiap server. |
Server koordinasi hosted milik Tailscale gratis untuk penggunaan pribadi dan menangani autentikasi, pertukaran kunci, serta fallback relay DERP untuk Anda, tetapi beberapa tim ingin control plane itu sendiri berjalan di infrastruktur milik mereka, baik untuk kepatuhan, biaya pada skala besar, atau sekadar penasaran. Headscale adalah implementasi ulang open source dan dikelola komunitas dari server kontrol tersebut yang berbicara protokol yang sama dengan klien resmi Tailscale, sehingga skrip instalasi dan perintah CLI yang sama bekerja tanpa modifikasi terhadapnya.
# docker-compose.yml
services:
headscale:
image: headscale/headscale:0.23.0
container_name: headscale
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./config:/etc/headscale
- ./data:/var/lib/headscale
command: headscale serve
# Register a new device against your own control server
sudo tailscale up --login-server=https://vpn.example.comHeadscale dikelola komunitas dan bukan produk resmi Tailscale, tetapi secara sengaja menargetkan kompatibilitas protokol dengan klien Tailscale asli, sehingga Anda tetap mendapatkan pengalaman instalasi yang sama seperti yang sudah dikenal tim Anda sambil memiliki control plane sendiri.
Sebelum memperlakukan mesh VPN apa pun sebagai infrastruktur produksi untuk server sungguhan, kerjakan daftar periksa singkat ini agar kesalahan konfigurasi tidak berubah menjadi downtime atau, lebih buruk, kebocoran yang tidak disengaja.
Mesh VPN yang dibangun di atas WireGuard menghilangkan satu kategori penuh masalah jaringan: tidak perlu lagi membuka lubang firewall secara manual, tidak perlu lagi berurusan dengan IP rumahan yang dinamis, dan tidak ada lagi titik kegagalan tunggal antara laptop Anda dan server yang perlu Anda SSH pada pukul dua pagi. Baik Anda tetap menggunakan control plane hosted milik Tailscale atau berpindah ke instance Headscale yang di-self-host, mesh yang mendasarinya berperilaku sama, yang menjadikannya infrastruktur langka yang bisa Anda adopsi secara bertahap tanpa terkunci pada control plane satu vendor selamanya.