Saya mengganti server kontrol Tailscale dengan Headscale, dan perangkat saya tidak menyadarinya


Tailscale adalah salah satu layanan yang saya tambahkan secara santai, dan dengan cepat menjadi bagian dari alur kerja saya. Setelah implementasi awal, ini hanya bekerja dengan tenang di latar belakang dan tidak pernah meminta perhatian. Saya tahu WireGuard menangani sebagian besar pekerjaan di bawah tenda. Saya bahkan mencoba mengganti Tailscale dengan WireGuard mentah, tetapi CGNAT mematikannya di server rumah saya. Tapi kali ini aku punya rencana berbeda. Saya sudah memiliki VPS dengan IP statis, disewa untuk proyek lain. Jadi, saya bisa mengikuti jalur yang sama dan menggunakan WireGuard lagi dan menyambungkan kembali memori otot saya dari klien Tailscale, atau saya bisa mencari sesuatu yang berbeda. Saat itulah saya menemukan Headscale. Ternyata saya masih bisa menggunakan klien Tailscale yang sama, tetapi dengan server kontrol ada di VPS saya, bukan di cloud Tailscale. Servernya sendiri ternyata sangat mudah, namun menghubungkannya ke pengaturan saya yang sudah ada adalah cerita yang berbeda. Terkait Saya mengganti Tailscale dengan Trenggiling untuk akses jarak jauh, dan itu jauh lebih mudah dari yang saya harapkan. Saya tidak berharap peralihan seperti ini menjadi begitu mudah. Server kontrol yang saya tidak pernah tahu saya percaya Tailscale punya otak, dan itu bukan milik saya. Saya telah menggunakan Tailscale di server rumah Debian sejak hari pertama (hampir). Bukan hanya karena dapat diandalkan, saya juga benar-benar membutuhkannya untuk mengakses layanan internal saya ketika saya jauh dari rumah. Kedua ISP saya mendukung CGNAT, sehingga Tailscale sangat cocok. Itu adalah salah satu dari sedikit layanan di tumpukan saya yang tidak pernah meminta perhatian. Saya membuat akun, menginstal klien di semua perangkat saya, dan masuk. Itu saja. Kapan pun saya perlu menghubungi layanan internal mana pun di rumah, saya cukup menyambungkan ke tailnet saya. Itu berhasil, yang membuat saya bertanya-tanya apa yang terjadi di balik layar. Dan rasa ingin tahu itu mendorong saya untuk menghosting sendiri otak Tailscale. Bukan karena paranoia privasi, dan bukan karena saya ingin menggantinya; itu hanya rasa ingin tahu tentang apa yang sebenarnya berjalan di bawah Tailscale yang tampak sederhana. Headscale adalah implementasi server kontrol Tailscale yang dihosting sendiri. Ini menggantikan bidang kendali Tailscale, bukan WireGuard itu sendiri. Di latar belakang, WireGuard masih sama yang menangani semuanya. Dan hal baiknya adalah saya tidak perlu menyentuh klien di perangkat saya; itu adalah aplikasi Tailscale yang sama di mana pun. Satu-satunya hal yang berubah adalah otentikasi, identitas, dan koordinasi rekan dipindahkan ke server saya sendiri. Di atas kertas, semuanya terlihat bagus dan lugas. Saya sudah memiliki VPS dengan sumber daya yang cukup. Saya berpikir, berapa banyak pekerjaan yang harus dilakukan? Dengan file Docker Compose dan beberapa langkah pengaturan, saya akan dapat menggunakannya dalam beberapa menit. Server bukanlah bagian yang melawan saya. Segala sesuatu di sekitarnya melakukannya. Satu kontainer Docker, dan kemudian semuanya rusak. Proksi terbalik saya punya rencana lain. Pengaturan awal cukup mudah. Saya menarik Docker Compose dan menerapkannya melalui tumpukan Portainer. Itu berjalan dalam waktu kurang dari beberapa detik. Saya pikir inilah saatnya; bagian yang sulit sudah berakhir. Saya cukup membuat pengguna dan membuat kunci untuk menghubungkan perangkat saya. Tapi saya tidak pernah mencapai bagian itu. API tidak dapat dijangkau. Pada awalnya, ini terlihat seperti masalah Headscale, tetapi ternyata menjadi sesuatu yang sangat berbeda. services: headscale: image: headscale/headscale:latest container_name: headscale restart: kecuali dihentikan perintah: serve volumes: – ./config:/etc/headscale – ./data:/var/lib/headscale network: – jaringan trenggiling: trenggiling: eksternal: true VPS saya sudah menjalankan Trenggiling, dan Trenggiling menggunakan Traefik untuk menangani proxy terbalik. Jadi, saya berasumsi menambahkan label Docker akan cukup untuk mengekspos Headscale melalui Traefik — tetapi tidak terjadi apa-apa. Kontainer itu tidak terlihat oleh Traefik. Saya membaca berbagai dokumen dan beberapa perintah di sana-sini. Akhirnya, ketika saya menjalankan perintah docker check traefik, terungkap bahwa instance Traefik milik Pangolin hanya memantau API milik Pangolin sendiri, dan tidak ada penyedia Docker yang diaktifkan sama sekali. Saat itulah saya menyadari bahwa Headscale baik-baik saja; masalahnya bahkan tidak ada hubungannya dengan itu. Itu adalah artefak bagaimana Trenggiling mengkonfigurasi Traefik, dan seharusnya hanya berfungsi seperti itu. Namun saat saya telusuri kembali ke pelaku sebenarnya, file konfigurasi Traefik, ternyata file tersebut bersifat bind-mount read-only ke dalam container. Itu berarti saya tidak mungkin dapat mengedit file dari dalam container, karena perubahan harus dilakukan langsung pada host. Akhirnya, saya akhirnya menulis blok router/layanan ke dalam file Dynamic_config.yml alih-alih mengandalkan penemuan otomatis melalui label Docker. Sekarang Traefik sudah berfungsi, saya konfirmasi melalui respon curl, tapi sekarang Headscale mulai beraksi. Setelah saya membuat pengguna, saya menjalankan perintah lain untuk menghasilkan kunci preauth, tetapi Headscale mengharapkan ID numerik untuk tanda –user, bukan nama pengguna yang baru saja saya buat. headscale-router: rule: “Host(`headscale.example.com`)” service: headscale-service entryPoints: – websecure tls: certResolver: letsencrypt headscale-service: loadBalancer: server: – url: “http://headscale:8080” Setelah selesai, saya menemukan masalah besar lainnya: server_url dan base_domain tidak dapat berbagi domain yang sama. Headscale mengharuskan base_domain menjadi subdomain dari URL server, bukan domain yang sama. Setelah selesai, saya akhirnya dapat menghubungkan perangkat saya ke jaringan Headscale. Ironisnya, bagian yang saya khawatirkan, menghubungkan perangkat, ternyata merupakan bagian termudah dari keseluruhan proyek. Dua perangkat digabungkan, dan tidak ada yang terasa berbeda. Itulah intinya Setelah bagian yang sulit, tibalah waktunya untuk pengujian yang sebenarnya. Saya membuat kunci pra-autentikasi yang dapat digunakan kembali, jadi saya tidak memerlukan kunci baru untuk setiap perangkat. Saya awalnya memutuskan untuk tidak menyertakan server rumah produksi saya dalam pengujian ini karena banyak layanan langsung bergantung padanya. Lalu saya menyambungkan kedua perangkat utama saya, PC gaming dan MacBook Pro, ke jaringan hanya menggunakan dua perintah. Satu perintah untuk keluar dari akun Tailscale saya, dan satu lagi untuk masuk ke server Headscale yang saya hosting sendiri. tailscale logout tailscale up –login-server (server_url) –authkey (key) Dan ini adalah salah satu bagian yang mudah; itu menggunakan klien Tailscale yang sama yang diinstal pada perangkat saya. Setelah pengaturan Headscale sebenarnya dilakukan di sisi server, itu adalah klien Tailscale dan satu perintah login. Setelah kedua perangkat ditambahkan, saya menjalankan perintah daftar node headscale dan langsung melihat kedua perangkat online, dengan alamat IPv4 dan IPv6 yang ditetapkan. Saya melihat bukti nyata bahwa itu berfungsi ketika saya menguji satu perangkat dari perangkat lainnya. Pertama, saya mencoba menyambung ke PC gaming dari MacBook saya; gagal pertama kali, kemungkinan karena masalah firewall Windows di sisi PC. Lalu saya menguji MacBook dari PC saya; itu langsung berhasil, dan hasilnya menceritakan kisah yang menarik kepada saya. Balasan pertama berada pada kisaran 90–100 md, namun setelah itu, turun ke kisaran 5–20 md. Nah, itulah estafet DERP publik Tailscale yang melakukan pekerjaan berat. Ini semua terjadi di CLI, dan satu-satunya info status yang saya dapatkan adalah dari perintah daftar node headscale. Saat itulah saya mulai mencari antarmuka web yang bagus. Meskipun Headscale tidak secara resmi mengirimkannya, dokumentasinya merekomendasikan beberapa UI pihak ketiga. Ada lebih dari sepuluh opsi sumber terbuka, tetapi saya memilih dua, Headplane dan headscale-ui, karena antarmukanya yang modern dan tampak Tailscale. Headplane menawarkan fitur-fitur canggih seperti Access Control List (ACL), dukungan untuk OpenID Connect (OIDC), dan kemampuan untuk mengedit pengaturan DNS, namun saya menggunakan headscale-ui karena kesederhanaannya dan jejak sumber daya yang lebih ringan di VPS saya. Saya memang menemukan beberapa kesalahan, seperti “Kebijakan ACL tidak ditemukan”, yang saya perbaiki dengan perintah CLI cepat (pengaturan kebijakan), dan setelah itu lancar. Kesan pertama saya tentang dasbor? Secara mengejutkan, konsol ini terasa mirip dengan konsol admin Tailscale, meskipun ada perubahan infrastruktur. Di halaman beranda sendiri, kedua perangkat saya berwarna hijau, online, dan terlihat sekilas. Headscale tidak membuat Tailscale terasa berbeda, dan itulah tanda paling positif bahwa eksperimen tersebut berhasil. Cloudflare Mesh terkait memberi saya semua yang dilakukan Tailscale, kecuali perusahaan lain di jaringan saya Lebih sedikit perusahaan, akses yang sama, tidak ada keluhan. Jaringan yang sama, tangan yang berbeda Saya tidak memulai percobaan ini dengan tujuan mengganti Tailscale di jaringan saya. Headscale tidak membuat jaringan saya lebih cepat atau mengubah cara kerja Tailscale. Nilainya didapat dari memindahkan bidang kendali ke infrastruktur saya sendiri sambil tetap mempertahankan pengalaman Tailscale yang sama. Ada beberapa rintangan dalam perjalanannya, tetapi begitu rintangan itu teratasi, Headscale mulai terasa seperti sesuatu yang benar-benar dapat saya lakukan. Meskipun saya meminjam relai DERP dari Tailscale, saya berencana untuk menghostingnya sendiri jika saya akhirnya memutuskan untuk memberikan Headscale tempat permanen di tumpukan saya.


Diterbitkan : 2026-07-02 00:00:00

sumber : www.xda-developers.com