Headscale - Tailscale kontrol sunucusunun self-hosted açık kaynak uygulaması
(github.com/juanfont)- Headscale, Tailscale kontrol sunucusunun açık kaynaklı ve self-hosted bir uygulamasını sunan bir projedir; self-hoster'ları ve hobi geliştiricilerinin proje/lab ortamlarını hedefler
- Tailscale, WireGuard tabanlı modern bir VPN'dir ve NAT traversal kullanarak ağdaki bilgisayarlar arasında bir overlay network gibi çalışır
- Tailscale'in kontrol sunucusu, düğümlerin WireGuard açık anahtar değişimini, istemci IP atamasını, kullanıcı sınırları oluşturmayı, kullanıcılar arasında makine paylaşımını ve düğümlerin duyurduğu rotaları görünür kılmayı üstlenir
- Headscale, kişisel kullanım veya küçük açık kaynak organizasyonları için uygun, kapsamı dar tutulmuş bir tek Tailscale ağı (tailnet) uygulaması sunar
- Proje, Tailscale Inc. ile ilişkili değildir ve Headscale'i çalıştırmak için reverse proxy ve container kullanımını desteklemez veya önermez
Headscale'in amacı ve kapsamı
- Headscale, Tailscale kontrol sunucusuna self-hosted, açık kaynak bir alternatif olmayı hedefler
- Hedef kullanıcılar self-hoster'lar, hobi geliştiricileri ve kişisel proje/lab ortamı kullanıcılarıdır
- Uygulamanın kapsamı dar tutulmuştur ve tek bir tailnet sağlar
- Kişisel kullanım için uygundur
- Küçük açık kaynak organizasyonları için de uygundur
Tailscale ve kontrol sunucusunun rolü
- Tailscale, WireGuard üzerine kurulu modern bir VPN'dir
- Tailscale, ağdaki bilgisayarlar arasında bir overlay network gibi çalışır ve NAT traversal kullanır
- Tailscale'de bazı GUI istemcileri ve kontrol sunucusu dışında tüm bileşenler açık kaynaktır
- İstisna olarak belirtilen GUI istemcileri, Windows ve macOS/iOS gibi kapalı kaynak işletim sistemlerine yönelik istemcilerdir
- Kontrol sunucusu, Tailscale ağ düğümleri arasında WireGuard açık anahtar değişiminin yapıldığı nokta olarak çalışır
- İstemci IP adresleri atar
- Kullanıcılar arasında sınırlar oluşturur
- Kullanıcılar arasında makine paylaşımını mümkün kılar
- Düğümlerin duyurduğu rotaları görünür kılar
- Tailscale network, yani tailnet, Tailscale'in bireysel kullanıcılara veya organizasyonlara atadığı özel ağdır
Dokümantasyon ve sürüm notları
- Kullandığınız sürüme uygun örnek yapılandırmaları görmek için her zaman aynı GitHub tag seçilmelidir
maindalı henüz yayımlanmamış değişiklikler içerebilir- Dokümantasyon kararlı sürüm ve geliştirme sürümü olarak sunulur
- Özellik listesi için Features dokümanı işaret edilir
- İstemci ve işletim sistemi destek kapsamı için Client and operating system support dokümanı işaret edilir
Çalıştırma ve derleme
- Headscale'i çalıştırmak için reverse proxy ve container kullanımı desteklenmez veya önerilmez
- Çalıştırma yöntemi için resmî dokümantasyona bakılması önerilir
- NixOS kullanıcıları için modül
nix/dizininde bulunur maindalının geliştirme derlemeleri container image ve binary olarak sunulur- Ayrıntılar için development builds dokümanına bakılabilir
Proje ilişkisi ve katkı
- Bu proje Tailscale Inc. ile ilişkili değildir
- Headscale'in aktif maintainer'larından biri Tailscale tarafından istihdam edilmektedir ve çalışma saatlerinde projeye katkıda bulunabilir
- Bu maintainer'ın katkıları diğer maintainer'lar tarafından incelenir
- Maintainer'lar, self-hoster, power user ve hobi geliştirici topluluklarını desteklerken sürdürülebilir bir proje oluşturma ilkesi doğrultusunda proje yönünü birlikte belirler
- Katkı sunacakların CONTRIBUTING.md dosyasını okuması gerekir
Geliştirme ortamı ve iş akışı
- Katkı için güncel Go ve Buf gereklidir
- Buf, Protobuf üreticisi olarak kullanılır
- Geliştirme ortamı kurulumu için Nix kullanılması önerilir
nix developçalıştırıldığında gerekli araçlar kurulur ve bir shell sağlanır- Bu yöntem, Headscale maintainer'larıyla aynı geliştirme ortamını garanti eder
- Go kodu
golangci-lintile lint edilir,golinesvegofumptile formatlanırgolinesgenişliği 88 olarak ayarlanmıştır- Commit öncesinde
make lintvemake fmtçalıştırılması önerilir
- Proto kodu
bufile lint edilir veclang-formatile formatlanır - Dokümanlar
mdformatile, Markdown·YAML ve diğer dosyalar iseprettierile formatlanır proto/değiştiğinde Protobuf'tan Go kod üretiminin yeniden yapılması gerekir- Komut:
make generate gen/değişikliklerinin, incelemeyi kolaylaştırmak için ayrı bir commit olarak eklenmesi önerilir
- Komut:
- Test ve derleme sırasıyla
make testvemake buildile çalıştırılır - Önerilen iş akışı,
nix developsonrasındamake testvemake buildçalıştırmaktır- Bağımlılıkları doğrudan yönetenler Make'i doğrudan kullanabilir
- Gerekli araçlar yoksa Makefile uyarı verir ve
nix developçalıştırılmasını önerir - Kullanılabilir hedefler
make helpile görülebilir
1 yorum
Hacker News görüşleri
Birkaç ayda bir bu depoya geri dönüp Tailnet lock nihayet çalışıyor mu, bu arada biri güvenlik denetimi yaptı mı diye bakıyorum
Ne yazık ki ikisinde de bir ilerleme yok gibi görünüyor; bu yüzden bunu kendi altyapımın çekirdek bileşeni olarak ne kadar güvenle kullanabileceğimden giderek daha az emin oluyorum
Tailscale SaaS’in temel vaadi, güvenlik duvarını aşan bir tünel oluşturması ve kullanıcının bu tünel üzerinden neyin yönlendirileceğini sezgisel ve entegre bir şekilde kontrol edebilmesidir
Headscale güvenlik duvarını aşma ve gelişmiş NAT geçişi işini iyi yapıyor gibi görünüyor, ancak az önce aştığı güvenliği telafi edecek kadar kendi güvenliğini sağlayıp sağlayamadığı soru işareti
Kullanıcının, kontrol sunucusunun istemcilere ne yapmalarını söylediğini anlama ya da reddetme imkânı yoksa ve sunucu kodu için de hiçbir güvenlik denetimi yoksa, bu oldukça cüretkâr bir tercih gibi görünüyor
Ben bunun Tailscale’in temel arka uç servislerinin üzerine oturan bir kontrol katmanı olduğunu sanıyordum; yoksa bağlantıları yeni bir şekilde aracılık ederek mi kuruyor?
ZeroTier’i oldukça sık kullanıyorum ama Tailscale’e pek aşina değilim, o yüzden bariz bir soru olabilir
Kendi kendine barındırılan orkestrasyon sunucularıyla ilgileniyorsanız Netbird’e de bakmaya değer
Benzer bir araç; sunucusu da açık kaynak, kendi kendine barındırılan kontrol sunucusu için iyi bir GUI sunuyor ve ücretli sürüm özellikleri de mevcut
https://netbird.io/knowledge-hub/tailscale-vs-netbird
Sağlam, güçlü ve özellik açısından zengin görünüyor; ancak Headscale’i self-host etmek çok daha basit ve daha az gereksinim istiyor
Şimdilik Tailscale’i de çalıştırmaya devam ediyorum ama giderek onu bırakıp tamamen Netbird’e geçmeye yaklaşıyorum
İlgili GitHub sorunu burada
https://github.com/netbirdio/netbird/issues/1103
Başlığa proje adı olan Headscale’i eklemek iyi olur
Headscale, HN’de birkaç kez paylaşılmış bir proje
Headscale örnekler arası eşleme/federasyon desteklese harika olurdu. ACL yeniden çalışmasından sonra gelebilir
Temel sorunlardan biri adres çakışması
Öneri şu: ağı, benzersiz yerel adres (ULA) aralığında IPv6-only bir overlay ağ olarak tanımlamak ve kalan 121 biti, cihaz adresleri için alt 20 bit (yaklaşık 1 milyon adet) ile sunucu açık anahtar hash’i için üst 101 bit arasında bölmek
Ardından başka örneklerin açık anahtarlarını ekleyip federasyon kurar, düğümler arası iletişimi de politika ve ACL’lerle yönetirsiniz
Bence iyi bir fikir ama 2023’te gündeme getirdiğimde bakımcı kradalby bunun kapsam dışı olduğunu söylemişti: https://github.com/juanfont/headscale/issues/1370
Headscale’i yarım yıldır memnuniyetle kullanıyorum
O kadar iyi ki, eskiden Tailscale ağı olmadan nasıl yaşadığımı bilmiyorum
OpenBSD için paketlenmiş durumda ve ben bu paketi sunucu olarak kullanıyorum
Headscale’i seviyorum; az önce prodüksiyona aldım ve gayet iyi çalışıyor
Giriş için Gmail alan adını kullanıyorum; kullanıcıların kendi cihazlarını kendilerinin kaydedebilmesi büyük bir avantaj
Eski OpenVPN’de operasyon ekibinin sertifikaları ve yapılandırmayı elle dağıtması gerekiyordu
Tek dezavantaj, kullanıcıların yanlışlıkla kendi sunucumuz yerine Tailscale giriş sunucusuna bağlanıp sonra neden hizmetlere erişemediklerini anlamaya çalışmaları
Kullanıcı grupları üzerinden erişilebilen hizmetler yapılandırıyorum
Hâlâ eski bir Headscale sürümü kullanıyorum çünkü yeni kontrol düzlemine taşımam gereken entegrasyonlar var
headscale node list | wcçıktısına göre yaklaşık 250 düğüm var ve çoğu sunucuTailscale’in yönlendirme tablosuna ve güvenlik duvarı kurallarına sihirli şekilde dokunmasını pek sevmiyorum ama genel olarak sorun olmadı ve oldukça iyi çalıştı
Birçok kullanım senaryosunda, örneğin mobil erişim veya macOS GUI'de, Headscale kullanabilmek için resmi Tailscale istemcisinin kontrol sunucusunu ayarlayabilme özelliğini koruması gerekir
Tailscale'de kaçınılmaz kalite düşüşünün başladığı anda bu özellik ortadan kalkacaktır
Bunu, şu anda Tailscale'den çok memnun bir müşteri olarak söylüyorum; ancak geçmişte başka şirketler satıldığında ya da girişim sermayesi tükendiğinde bunu defalarca yaşamış biri olarak söylüyorum
Bu mantıklı. Headscale çoğunlukla homelab kullanıcıları ve küçük hobi kullanıcıları tarafından kullanılıyor ve PulseSecure, Cisco AnyConnect, GlobalProtect ile değil; self-hosted OpenVPN veya WireGuard ile rekabet ediyor
Boş zamanlarında yeni teknolojileri seven ama altyapı üzerindeki kontrolü bırakmak istemeyen insanlara Tailscale'i tanıtmanın bir yolu
Bu insanlar sonra Tailscale konusundaki uzmanlıklarını ve heyecanlarını işyerlerine taşıyor
Şirketler, IT altyapısını yönetmek temel yetkinlikleri olmadığı sürece bunu pek yapmak istemez
Elbette bazı şirketler Tailscale'in asıl ürünü yerine Headscale'i seçebilir, ancak şirket ölçeği ve tutarlar düşünüldüğünde muhtemelen azınlıkta kalırlar
Bu, gelir maliyetine daha yakın; Facebook reklamlarından ya da Silikon Vadisi yol kenarı billboard'larından çok farklı değil
İşte Tailscale kullanamamamızın nedeni, trafiğin bizim kontrol edemediğimiz sunucular üzerinden yönlendirilmesi
İşte Tailscale'i gerçekten kullanmak isterdim ve pek çok sorunu çözerdi
Port açmamız gerekiyorsa buna katlanabilirim ama o port üzerinden trafiğin tünellenmesi beni ciddi şekilde endişelendiriyor
İlginç görünüyor. WireGuard + OpenWrt kurulumuna kıyasla ne gibi bir katma değer sunduğunu merak ediyorum
Merkezi olarak yönetilen ACL kısıtlamaları altında sadece çalışır
İnsanlar bazen Tailscale'i “sadece bir WireGuard orkestratörü” diye küçümsüyor ama gerçekte bundan çok daha fazlası
Ürün açısından bakıldığında WireGuard sadece bir uygulama ayrıntısı
Ben geçmişte Headscale UI'ın fazla temel olduğunu düşündüğüm için Netbird'ü seçmiştim ama birkaç yıl içinde iyileşmiş olabilir
Çok sayıda istemcide çalışıyor ve benim Apple TV'lerim de Tailscale ağına bağlı
Kurulum yaklaşık 1 dakika sürdü ve ağ geçidi görevi de görebiliyor
Tailscale veya dışarıda barındırılan bir Headscale ile bu şekilde kullanılabilir
Tailscale koordinasyon sunucusu ele geçirilirse ve Tailnet lock açıksa, cihazlarımın tehlikeye girme riski ne kadar olur diye merak ediyorum