Sanallaştırma & Bulut

    Tailscale ve Headscale ile Özel Ağ

    Tailscale'in koordinasyon katmanı ve Headscale ile kendi özel ağınızı kurmanın adımları.

    10 dk okuma Güncellendi: 25 Ağustos 2026

    Elle kurulan bir WireGuard mesh'te işin zor kısmı şifreleme değil, koordinasyondur: hangi düğüm hangi anahtara sahip, kim hangi adresten erişilebilir, biri NAT arkasına düştüğünde ne olacak. On düğümü aştığınızda bu muhasebe elle yönetilemez hale gelir. Tailscale tam olarak bu boşluğu doldurur; veri düzleminde WireGuard'ı kullanır ama anahtar dağıtımı, adres atama ve NAT geçişi gibi işleri merkezî bir koordinasyon sunucusuna devreder. Headscale ise o koordinasyon sunucusunun açık kaynaklı, kendi sunucunuzda çalıştırabileceğiniz karşılığıdır.

    Bu rehberde önce Tailscale'in tam olarak neyi otomatikleştirdiğini ve NAT arkasındaki iki cihazın nasıl doğrudan konuşabildiğini anlatacağım. Sonra pratik kurulumu yapacağız: düğüm ekleme, erişim politikaları, yerel ağı ağa dahil eden subnet router ve tüm trafiği belirli bir düğümden çıkaran exit node. Ardından Headscale'i kendi sunucunuza kurup istemcileri ona bağlayacağız. Son bölümde saf WireGuard, Tailscale ve Headscale arasındaki seçimi ve sahada karşılaştığım tuzakları ele alacağım.

    Tailscale Ne Yapıyor: Koordinasyon Katmanı#

    Tailscale'i anlamak için tek bir ayrımı netleştirmek yeterli: veri düzlemi ile kontrol düzlemi ayrıdır. Trafik düğümler arasında doğrudan, WireGuard ile şifrelenmiş olarak akar; koordinasyon sunucusu bu trafiği görmez ve taşımaz. Sunucunun yaptığı iş şudur:

    1. Düğümlerin açık anahtarlarını toplar ve diğer yetkili düğümlere dağıtır.
    2. Her düğüme ağ içinde benzersiz bir adres atar.
    3. Kimin kime erişebileceğini belirleyen politikayı düğümlere iletir.
    4. NAT arkasındaki düğümlerin birbirini bulmasına aracılık eder.
    5. Doğrudan bağlantı kurulamayan çiftler için bir aktarma yolu sunar.

    Özel anahtarlar hiçbir zaman koordinasyon sunucusuna gitmez; her düğüm kendi anahtar çiftini üretir ve yalnızca açık anahtarını paylaşır. Bu, elle kurduğunuz bir WireGuard mesh ağında da geçerli olan aynı ilkedir; Tailscale sadece anahtar dağıtımının muhasebesini üstlenir.

    Ağa katılan her cihaz 100.64.0.0/10 aralığından bir adres alır. Bu aralık operatör düzeyinde NAT için ayrılmış olduğundan, ev ve ofis ağlarındaki tipik 192.168.x.x veya 10.x.x.x aralıklarıyla çakışma ihtimali çok düşüktür; adres planlaması derdinden kurtulmanız bundandır.

    NAT Delik Açma ve Aktarma#

    Elle kurulan bir mesh'te iki düğüm de NAT arkasındaysa doğrudan tünel kurmak neredeyse imkânsızdır. Tailscale bunu iki aşamalı bir strateji ile çözer.

    Birinci aşamada her düğüm, dışarıdan nasıl göründüğünü öğrenir: hangi dış adres ve porttan çıkıyor, NAT'ı öngörülebilir mi. Koordinasyon sunucusu bu bilgiyi karşı tarafa iletir ve iki düğüm aynı anda birbirine paket göndermeye başlar. NAT cihazları giden paket için çeviri girdisi oluşturduğundan, karşıdan gelen paket bu girdiye denk gelir ve içeri alınır. Buna delik açma denir ve çoğu ev ve ofis NAT'ında başarılı olur.

    İkinci aşama, delik açmanın başarısız olduğu durumlar içindir; simetrik NAT ya da katı kurumsal güvenlik duvarları böyledir. Bu durumda trafik bir aktarma sunucusu üzerinden geçirilir. Aktarma sunucusu trafiği şifreli taşır, içeriğini göremez, ama gecikme artar ve bant genişliği o sunucunun kapasitesine bağlı hale gelir. Bu yüzden bir bağlantının doğrudan mı yoksa aktarma üzerinden mi kurulduğunu bilmek önemlidir:

    # Her düğüm için bağlantı tipini gösterir: "direct" ya da "relay"
    tailscale status
    
    # Ağ ortamınızı analiz eder: NAT tipi, IPv6 desteği, en yakın aktarma noktaları
    tailscale netcheck
    

    tailscale status çıktısında bir düğümün yanında relay yazıyorsa, o bağlantı doğrudan kurulamamış demektir. Yoğun veri aktaracağınız düğüm çiftlerinde bunu düzeltmeye çalışın: UDP trafiğinin dışarı çıkmasına izin verin, mümkünse bir tarafta port yönlendirme tanımlayın ya da o düğümü doğrudan erişilebilir bir sunucuya taşıyın.

    Tailscale Kurulumu ve İlk Düğümler#

    Kurulum tek satırdır ve dağıtımların çoğunda hazır paket bulunur:

    # Debian / Ubuntu için resmi kurulum betiği
    curl -fsSL https://tailscale.com/install.sh | sh
    
    # Servisi başlat ve ağa katıl (tarayıcıda doğrulama bağlantısı verir)
    tailscale up
    
    # Bu düğümün ağ içindeki adresi
    tailscale ip -4
    
    # Ağdaki tüm düğümler ve bağlantı tipleri
    tailscale status
    

    Sunucularda tarayıcı açmak pratik olmadığı için, önceden üretilmiş bir kayıt anahtarıyla etkileşimsiz katılım yapılır. Bu, otomasyona da uygundur:

    # Önceden üretilmiş anahtarla, tarayıcı olmadan katıl
    tailscale up --authkey=tskey-ORNEK-ANAHTAR --hostname=web-01
    
    # SSH oturumu düşmesin diye arka planda çalıştığından emin olun
    systemctl enable --now tailscaled
    

    Sunucu filolarını bağlarken bu adımı elle tekrarlamak yerine yapılandırma yönetimine devretmek daha sağlıklıdır; Ansible ile sunucu otomasyonu yazısındaki yaklaşımla kayıt anahtarını gizli değişken olarak tutup kurulumu tek göreve indirebilirsiniz.

    Subnet Router, Exit Node ve Erişim Politikaları#

    Üç özellik, bu tür ağları basit bir VPN'den ayırır.

    Subnet router, bir düğümün arkasındaki tüm yerel ağı diğer düğümlere açar. Ofisteki her yazıcıya ve ağ cihazına ajan kuramazsınız; bir Linux makinesini yönlendirici yapıp o ağı ilan etmek yeterlidir:

    # Yönlendirmeyi aç
    echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-ts.conf
    sysctl --system
    
    # Bu düğümün arkasındaki yerel ağı ilan et
    tailscale up --advertise-routes=10.20.0.0/24
    
    # Diğer düğümlerde ilan edilen rotaları kabul et
    tailscale up --accept-routes
    

    İlan edilen rotanın yönetim tarafında onaylanması gerekir; onaylanmayan bir rota diğer düğümlere dağıtılmaz. "İlan ettim ama erişemiyorum" şikâyetinin en yaygın sebebi budur.

    Exit node, tüm internet trafiğini belirli bir düğüm üzerinden çıkarmanızı sağlar. Halka açık bir kablosuz ağdayken trafiği kendi sunucunuzdan çıkarmak ya da belirli bir çıkış adresine ihtiyaç duyan bir servise erişmek için kullanılır:

    # Bu düğümü çıkış noktası olarak sun
    tailscale up --advertise-exit-node
    
    # İstemci tarafında kullan
    tailscale up --exit-node=100.101.102.103
    

    Erişim politikaları ise ağın asıl güvenlik katmanıdır. Varsayılan olarak aynı ağdaki tüm düğümler birbirini görür; üretim ortamında bunu daraltmalısınız. Politika, kaynak ve hedef gruplarını tanımlayan bir kural listesidir; mantığı şuna benzer:

    {
      "groups": {
        "group:devops": ["[email protected]", "[email protected]"]
      },
      "tagOwners": {
        "tag:web": ["group:devops"],
        "tag:db": ["group:devops"]
      },
      "acls": [
        { "action": "accept", "src": ["group:devops"], "dst": ["tag:web:22,80,443"] },
        { "action": "accept", "src": ["tag:web"], "dst": ["tag:db:5432"] }
      ]
    }
    

    Buradaki fikir, VLAN ile ağ segmentasyonu yazısında anlattığım yaklaşımın kimlik tabanlı hali: yalıtımı IP aralığıyla değil, cihaz etiketiyle ve kullanıcı kimliğiyle tanımlıyorsunuz. Varsayılanı "her şey yasak" tutup yalnızca ihtiyaç duyduğunuz akışları açmak burada da doğru disiplindir.

    Headscale: Kendi Koordinasyon Sunucunuz#

    Tailscale'in istemcisi açık kaynaktır ama koordinasyon sunucusu bir hizmettir. Kontrol düzleminin tamamen sizde olmasını istiyorsanız, ki veri yerleşimi konusunda kısıtları olan kurumlarda bu bir zorunluluk olabilir, Headscale devreye girer: aynı protokolü konuşan, kendi sunucunuzda çalıştırabileceğiniz açık kaynaklı bir koordinasyon sunucusu.

    Ne kazanırsınız: kontrol düzlemi tamamen sizin altyapınızda, dışarıya bağımlılık yok, düğüm sayısı sınırı sizin belirlediğiniz kadar. Ne kaybedersiniz: resmi yönetim arayüzü, hazır kimlik entegrasyonlarının kolaylığı ve en önemlisi bakım sorumluluğu. Koordinasyon sunucusu düşerse mevcut tüneller bir süre çalışmaya devam eder ama yeni düğüm ekleyemez, anahtar yenileyemez ve politika değiştiremezsiniz. Bu yüzden Headscale sunucusunu izlenen ve yedeklenen bir bileşen olarak planlayın.

    KonuTailscaleHeadscale
    Kontrol düzlemiHizmet olarakSizin sunucunuzda
    Yönetim arayüzüResmi panelKomut satırı, üçüncü taraf paneller
    Bakım yüküYokSize ait
    Kimlik entegrasyonuHazır sağlayıcılarOIDC yapılandırması sizde
    Aktarma altyapısıHazırKendiniz kurabilir ya da varsayılanı kullanabilirsiniz
    Maliyet modeliKullanıcı/düğüm bazlıSunucu maliyeti

    Headscale Kurulumu ve İstemci Bağlama#

    Headscale'i internete açık, sabit adresli ve geçerli bir TLS sertifikası olan bir sunucuya kurmalısınız; istemciler ona HTTPS üzerinden bağlanır. Sertifika tarafını SSL hizmetimizle ya da bir ters vekil sunucu üzerinden otomatik sertifikayla çözebilirsiniz.

    # Paketi kurun (dağıtımınıza uygun sürümü tercih edin)
    apt install -y headscale
    
    # Yapılandırmayı düzenleyin
    nano /etc/headscale/config.yaml
    

    Yapılandırmada dokunmanız gereken alanlar sınırlıdır:

    # Sunucunun istemcilere göründüğü adres
    server_url: https://vpn.firmaniz.com
    
    # Yerelde dinlenen adres (ters vekil sunucu bunun önünde durur)
    listen_addr: 127.0.0.1:8080
    
    # Düğümlere dağıtılacak adres aralıkları
    prefixes:
      v4: 100.64.0.0/10
    
    # İç DNS ayarları
    dns:
      base_domain: mesh.firmaniz.com
      nameservers:
        global:
          - 1.1.1.1
    

    Servisi başlatıp bir kullanıcı ve kayıt anahtarı oluşturun:

    systemctl enable --now headscale
    
    # Kullanıcı oluştur (eski sürümlerde bu kavram "namespace" adıyla geçer)
    headscale users create ekip
    
    # Etkileşimsiz katılım için önceden üretilmiş anahtar
    headscale preauthkeys create --user ekip --reusable --expiration 24h
    
    # Bağlanan düğümleri listele
    headscale nodes list
    

    İstemci tarafında tek fark, hangi koordinasyon sunucusuna bağlanılacağını belirtmektir:

    tailscale up \
      --login-server=https://vpn.firmaniz.com \
      --authkey=URETILEN-ANAHTAR \
      --hostname=web-01
    
    tailscale status
    

    Bundan sonrası birebir aynıdır: subnet router, exit node ve erişim politikaları Headscale tarafında da çalışır. Politikaları dosya üzerinden yönetir ve servisi yeniden yükleyerek uygularsınız.

    Hangisini Seçmeli: Saf WireGuard, Tailscale, Headscale#

    Üçü de aynı şifreleme motorunu kullanıyor; fark yönetim modelinde.

    Saf WireGuard seçin: düğüm sayısı az (yaklaşık ona kadar), adresler sabit, hepsi sizin kontrolünüzde ve ek bir bileşen istemiyorsanız. En az hareketli parçaya sahip çözüm budur ve doğru kurulduğunda unutulabilir. İki lokasyon arasında kalıcı bir bağlantı için siteden siteye VPN tüneli yaklaşımı fazlasıyla yeterlidir.

    Tailscale seçin: düğümler gezici (dizüstü bilgisayarlar, ev ağları), NAT arkasında olanlar var, kullanıcı bazlı erişim kontrolü istiyorsunuz ve bir kontrol düzlemi işletmek istemiyorsanız. Kurulum süresi dakikalarla ölçülür.

    Headscale seçin: Tailscale'in kolaylığını istiyorsunuz ama kontrol düzleminin kendi altyapınızda olması gerekiyorsa. Bunun bedeli bir sunucu daha işletmek, izlemek ve yedeklemektir; bu yükü üstlenecek durumda değilseniz tercih etmeyin.

    Sık Yapılan Hatalar ve Tuzaklar#

    Varsayılan "herkes herkesi görür" politikasıyla üretime çıkmak. Ağa katılan her cihaz varsayılan olarak diğerlerine erişebilir. Ele geçirilen bir dizüstü bilgisayar, veritabanı sunucunuza doğrudan erişim kazanır. İlk gün politika yazın ve varsayılanı reddet yapın.

    İlan edilen rotayı onaylamayı unutmak. Subnet router kurulur, --advertise-routes verilir ama yönetim tarafında onaylanmadığı için hiçbir düğüm o ağı görmez. Kurulumdan sonra rota listesini kontrol edin.

    Aktarma üzerinden çalışan bağlantıları fark etmemek. relay durumundaki bir bağlantı çalışır ama gecikmesi yüksektir ve bant genişliği sınırlıdır. Yedekleme gibi yoğun aktarımlarda önce tailscale status çıktısına bakın.

    Kayıt anahtarlarını süresiz ve yeniden kullanılabilir bırakmak. Sızan bir anahtar, ağınıza yetkisiz düğüm eklenmesi demektir. Anahtarlara kısa süre verin ve kullanıldıktan sonra iptal edin.

    Headscale sunucusunu yedeklememek. Düğüm kayıtları, kullanıcılar ve politikalar bu sunucudaki veritabanında durur. Kaybederseniz tüm düğümleri yeniden kaydetmeniz gerekir. Veritabanını ve yapılandırma dosyasını düzenli yedekleyin.

    Sürüm uyumsuzluğu. Headscale, istemcinin konuştuğu protokolün belirli sürümlerini destekler. İstemcileri otomatik güncellemeye bırakıp sunucuyu eski bırakırsanız, bir gün yeni düğümler bağlanamaz hale gelir. İkisini birlikte planlayın.

    Sıkça Sorulan Sorular#

    Tailscale trafiğimi görebilir mi#

    Hayır. Trafik düğümler arasında WireGuard ile uçtan uca şifrelenir ve özel anahtarlar cihazlardan çıkmaz; koordinasyon sunucusu yalnızca açık anahtarları, adres atamalarını ve düğüm meta verilerini bilir. Doğrudan bağlantı kurulamayıp aktarma sunucusu devreye girdiğinde bile trafik şifreli geçer, aktarma yalnızca paketleri taşır. Yine de kimin kime ne zaman bağlandığı gibi meta veriler kontrol düzleminde görünür; bu bilgiyi de dışarıda tutmak istiyorsanız Headscale'e geçmeniz gerekir.

    Headscale kurmak zor mu#

    Temel kurulum zor değil: paketi kurar, server_url ve adres aralığını ayarlar, önüne geçerli sertifikalı bir ters vekil sunucu koyarsınız. Asıl iş kurulumdan sonra başlar; sunucuyu izlemek, yedeklemek ve istemci sürümleriyle uyumlu tutmak sizin sorumluluğunuzdadır. Bir öğleden sonrada ayağa kaldırabilirsiniz, ama üretimde kullanacaksanız yedekleme ve izlemesini de aynı gün kurun.

    Ücretsiz mi, ne kadar tutar#

    Headscale açık kaynaklıdır ve lisans ücreti yoktur; maliyetiniz onu çalıştırdığınız sunucudur ve küçük bir sanal sunucu çoğu ölçek için yeterlidir. Tailscale'in kişisel kullanım için ücretsiz bir seviyesi vardır, ekip ve kurumsal kullanım kullanıcı bazlı ücretlendirilir. Karar verirken lisans maliyetini, kendi sunucunuzu işletmenin zaman maliyetiyle birlikte değerlendirin.

    Subnet router kullanınca yerel ağıma herkes erişir mi#

    Politika yazmazsanız evet, ilan edilen ağa erişim ağdaki tüm düğümlere açılır. Bu yüzden subnet router kullanan her kurulumda erişim politikası zorunlu hale gelir. Doğru yaklaşım, ilan edilen ağı belirli etiketlere ya da kullanıcı gruplarına açmak ve gerekiyorsa port bazında daraltmaktır. Ayrıca rota ilanının yönetim tarafında onaylanması gerektiğini unutmayın; bu, kazara ağ açılmasına karşı ek bir kapıdır.

    Bağlantım neden aktarma üzerinden kuruluyor#

    En yaygın sebep simetrik NAT'tır: NAT cihazı her hedef için farklı bir dış port kullanır ve delik açma başarısız olur. İkinci sebep, giden UDP trafiğinin güvenlik duvarında engellenmesidir. tailscale netcheck çıktısı NAT tipinizi ve UDP durumunuzu gösterir. Çözüm için giden UDP'ye izin verin, mümkünse bir tarafta port yönlendirme tanımlayın veya yoğun aktarım yapan düğümü doğrudan erişilebilir bir sunucuya taşıyın.

    Kendi WireGuard mesh'imi kurmuşken buna geçmeli miyim#

    Mevcut kurulumunuz on düğümü aşmıyorsa, adresler sabitse ve yönetimi sizi yormuyorsa geçmeye gerek yok; saf WireGuard en az hareketli parçaya sahip çözümdür. Geçişi düşünmeniz gereken üç işaret var: düğüm sayısı arttıkça yapılandırma dosyalarını senkron tutmakta zorlanıyorsanız, gezici cihazlar ve NAT arkasındaki düğümler işi zorlaştırıyorsa, ya da kullanıcı bazlı erişim kontrolüne ihtiyacınız varsa. Bu üçünden ikisi geçerliyse koordinasyon katmanı yatırımı kendini öder.

    Kapanış#

    Tailscale ve Headscale, WireGuard'ın şifreleme gücünü koruyup asıl zahmetli kısmı, yani koordinasyonu otomatikleştiriyor. Aklınızda kalması gereken dört alışkanlık şu: ilk günden erişim politikası yazıp varsayılanı reddet yapın; kayıt anahtarlarına kısa ömür verin ve kullanılmışları iptal edin; tailscale status çıktısında yoğun aktarım yapan çiftlerin doğrudan bağlanıp bağlanmadığını kontrol edin; Headscale kullanıyorsanız veritabanını ve yapılandırmayı yedekleme planına dahil edin. Bir de subnet router ilanlarını onaylamayı unutmayın.

    Headscale sunucusunu ya da mesh'in sabit ucunu barındırmak için sabit IP'li bir makineye ihtiyacınız var; VDS ve bulut sunucu paketlerimiz bu iş için fazlasıyla yeterli, geçerli sertifika tarafını SSL hizmetimizle çözebilirsiniz. Kurulumu, politika tasarımını ve izlemeyi sizin yerinize yapmamızı isterseniz sunucu yönetimi hizmetimiz devreye girer.

    TailscaleWireGuardVPN

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.