
Modern ev-ofis ağlarında hem güvenli uzaktan erişim hem de reklamsız/daha güvenli DNS çözümlemesi beklentisi birlikte geliyor. Bu yazıda Tailscale tabanlı bir dağıtık mesh VPN kurup AdGuard Home ile özelleştirilmiş DNS filtrelemesini “tailnet”’in tamamına yayacağız. Amaç, farklı lokasyonlardaki Linux sunucularını, edge cihazları ve mobil uçları tek bir private overlay ağında buluştururken DNS taleplerini merkezi olarak filtrelemek.
Tailscale’in cazibesi, klasik “merkezi VPN sunucusu kur, port aç, NAT ayarla” döngüsünü ortadan kaldırıp WireGuard tünellerini otomatik olarak mesh şekilde kurması. 5 dakikada şirket ofisi, ev laboratuvarı ve taşınabilir cihazları aynı özel IP alanında toplarken erişimleri ACL’lerle yönetebiliyor, düşen bağlantıları otomatik yeniden ayağa kaldırıyor. Özellikle hibrit çalışanlar, ev laboratuvarları ve küçük ekipler için bu “kur ve unut” yaklaşımı tam bir zaman kazancı.
Temel Kavramlar (Kısaca)
- Tailnet: Tailscale’in her kullanıcı/organizasyon için oluşturduğu özel WireGuard ağı; tüm nodelar aynı tailnet içinde birbirini
100.x.y.z
adresleriyle görür. - MagicDNS: Tailnet’e katılan cihazlara otomatik DNS kayıtları (ad → 100.x IP) dağıtan, yerleşik Tailscale resolver’ı; varsayılan IP’si
100.100.100.100
. - WireGuard: Tailscale’in üzerine kurulduğu modern, hızlı ve minimal VPN protokolü; UDP üzerinden uçtan uca şifreli tünel sağlar.
- Exit Node: Tailnet içindeki belirli bir cihazın tüm internet trafiğini diğer nodelar için üstlenmesi; istemciler “Use Exit Node” diyerek bu cihaz üzerinden dış dünyaya çıkar.
1. Mimarinin Büyük Resmi
- Tailscale kontrol düzlemi: Tailnet kimlik yönetimi, ACL, MagicDNS.
- VPN nodeları (örnekler)
core-gateway
(örnek: Hetzner VPS) → Subnet Router + AdGuard Homehome-nuc
(evde Proxmox/Ubuntu) → Yerel LAN’a erişimbranch-pi
(uzaktaki Raspberry Pi) → Edge cache, lokal servisler
- İstemci cihazlar: macOS, Windows, iOS, Android, kolektif cihazlar.
- DNS katmanı: AdGuard Home Tailscale IP’de koşuyor, upstream olarak DoH/DoT sağlayıcıları veya kendi recursive resolver’ınızı kullanıyor.
Not: Tek bir AdGuard düğümü ciddi bir tekil hata noktası (SPoF - single point of failure) yaratır. Yüksek erişilebilirlik için ikinci bir AdGuard (örn. başka bir VPS veya
branch-pi
) kurup MagicDNS üzerindeadguard.tailnet.
gibi bir kayıtla rotasyon sağlayabilirsiniz. KonfigürasyonlarıAdGuardHome.yaml
dosyasını git/rsync ile çoğaltarak ya da adguardhome-sync benzeri araçlarla otomatik senkronize etmek mümkün; bu yazı tek düğüme odaklandığından çok düğümlü kurguyu ayrı bir rehbere bırakıyorum.
Aşağıdaki akışta görüldüğü gibi cihazlar önce Tailnet’e katılıyor, tüm DNS trafiği Tailscale’in MagicDNS üzerinden AdGuard Home’a yönleniyor, filtrelenen sorgular tekrar güvenli upstream’e gönderiliyor.
macOS / iOS / Windows / Linux
│ (Tailscale App)
▼
Tailscale Mesh Overlay
│
├─ MagicDNS 100.100.100.100
│ │
│ ▼
│ core-gateway (100.77.34.12)
│ │
│ ▼
│ AdGuard Home :53 (DNS) / :3000 (Web UI)
│ │
│ └─→ DoH/DoT (Cloudflare, Quad9, …)
│
├─ home-nuc → 192.168.10.0/24 (LAN subnet)
└─ branch-pi → IoT / lab ağı
2. Ön Koşullar
- Tailscale hesabı (GitHub/Google/OIDC ile giriş)
- En az bir Linux x86_64 sunucu (Ubuntu 22.04 örnek alıyoruz)
- Ev LAN’ına bağlı bir cihaz (Intel NUC, Raspberry Pi 4 vb.)
- AdGuard Home için 512 MB RAM ve 1 vCPU yeterli
- IPv4/IPv6 desteği (Tailscale NAT traversal ile IPv4 üzerinde çalışabilir)
- DNS portu (53/udp, 53/tcp) ve AdGuard yönetim arayüzü (3000/tcp) için firewall izinleri
- Mobil/masaüstü istemcilerde Tailscale uygulaması
3. Tailnet Kurulumu
3.1 Tailscale’e Kaydolma ve Tailnet Oluşturma
- https://tailscale.com/start adresinden kaydolun.
- Organizasyon adı → örn.
acme-tailnet
. Settings → Access controls
menüsünden ACL dosyasını boş bırakın (sonra düzenleyeceğiz).DNS → MagicDNS
özelliğini şimdilik devre dışı bırakın (AdGuard Home entegrasyonu sonrası açacağız).
3.2 Yetki anahtarları oluşturma
CI/CD veya otomatik kurulum için “Reusable auth key” üretin:
Machines → Generate auth key
Reusable
+Preauthorized
seçin (manuel onay gerekmesin).- Süreyi isteğe göre kısaltın (30 gün gibi). Bitince yenileyebilirsiniz.
Anahtarı güvenli saklayın; otomasyon betiklerinde TS_AUTHKEY
olarak kullanacağız.
4. Çekirdek Sunucuda Tailscale + AdGuard Home
Aşağıdaki adımlar core-gateway
sunucusunda uygulanır.
4.1 Tailscale kurulumu (Ubuntu)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up \
--authkey=${TS_AUTHKEY} \
--hostname=core-gateway \
--ssh \
--advertise-exit-node \
--advertise-tags=tag:infra
--ssh
→ Tailscale SSH aktif olur, ayrı port açmaya gerek kalmaz.--advertise-exit-node
→ Tailnet istemcilerine bu sunucuyu internet çıkışı olarak seçme olanağı sağlar.--advertise-tags
→ ACL’de rol tabanlı yetki kullanmak için.
Sunucunun Tailscale IP’sini not alın (örnek: 100.77.34.12
).
4.2 Subnet router olarak LAN paylaşma
Ev ofisinizdeki alt ağa (ör. 192.168.50.0/24
) erişmek için bu sunucudan LAN’a statik rota vermeniz gerekiyorsa:
sudo tailscale up --advertise-routes=192.168.50.0/24 --reset
--reset
parametresi mevcut konfigürasyonu sıfırlayıp yeni parametrelerle yeniden başlatır; öncekiup
komutundaki flag’leri tekrar eklemeyi unutmayın.
Tailnet admin panelinde Machines → core-gateway → Enable subnet routes
onayını verin.
4.3 AdGuard Home kurulumu
curl -sSL https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz -o adguard.tar.gz
tar xzf adguard.tar.gz
sudo ./AdGuardHome/AdGuardHome -s install
Kurulumdan sonra varsayılan olarak IP: 0.0.0.0
, port: 3000
. İlk kurulum sihirbazını tamamlayın:
- Web arayüzü →
http://<tailscale-ip>:3000
- Admin kullanıcı adı/şifre belirleyin.
- Dinlenecek ağ arayüzü olarak Tailscale arayüzünü (
tailscale0
) seçin. - Ağ geçidi DNS portunu
53
olarak bırakın. - Upstream DNS → Cloudflare DoH (
https://1.1.1.1/dns-query
) + yerel fallback (ör.9.9.9.9
).
Sistem servisi /etc/systemd/system/AdGuardHome.service
olarak kurulur; sudo systemctl status AdGuardHome
ile kontrol edin.
4.4 DoT/DoH sertifikaları (isteğe bağlı)
Tailnet içi TLS için kendi CA’nizi üretip AdGuard’a tanıtabilirsiniz.
mkdir -p /opt/adguard/tls
openssl req -x509 -nodes -newkey rsa:4096 \
-keyout /opt/adguard/tls/tailscale.key \
-out /opt/adguard/tls/tailscale.crt \
-days 825 \
-subj "/CN=adguard.tailnet.local"
sudo chown adguardhome:adguardhome /opt/adguard/tls/*
AdGuard arayüzünde Settings → Encryption Settings
bölümünden sertifikayı etkinleştirin.
5. Ev/LAN Tarafında Subnet Router
Evdeki home-nuc
cihazı tailnet’e LAN erişimi için ekliyoruz.
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up \
--authkey=${TS_AUTHKEY} \
--hostname=home-nuc \
--advertise-routes=192.168.10.0/24 \
--advertise-tags=tag:lan
- Bu komutla home-nuc hem kendi DNS sorgularında AdGuard’ı (MagicDNS üzerinden) kullanır hem de LAN rotasını advertise eder.
- Tailscale admin panelinden
192.168.10.0/24
rotasını onaylayın. - Eğer cihazın yerel DNS’ini korumak isterseniz
--accept-dns=false
bayrağını ekleyerek bu davranışı devre dışı bırakabilirsiniz.
Ev LAN’ındaki cihazlar Tailscale istemcisi kurmadan 192.168.10.x
servislerine tailnet içinden erişebilir hale gelir.
5.1 DHCP ile LAN’daki cihazlara AdGuard dağıtımı (opsiyonel)
AdGuard Home’u evdeki bir cihazda (ör. Raspberry Pi, NUC) çalıştırıyorsanız ve tailnet’e dahil olmayan cihazların da filtrelenmesini istiyorsanız:
- Router’ın DHCP ayarlarında birincil DNS olarak AdGuard’ın LAN IP’sini (
192.168.10.5
gibi) tanımlayın. - DHCP lease süresini kısaltın (örn. 1 saat) ki mevcut istemciler hızlıca yeni DNS’i alsın.
- Misafir ağlar için ayrı bir DHCP kapsamı kullanıyorsanız aynı ayarı oraya da uygulayın.
Bu sayede Tailscale kullanmayan cihazlar bile LAN içinde AdGuard’dan hizmet alır; tailnet istemcileri ise MagicDNS üzerinden aynı IP’ye yönlenmeye devam eder.
5.2 Exit node’u kullanarak dış VPS üzerinden internete çıkmak
Bir dış VPS’i (ör. core-gateway
) exit node olarak advertise ettiğimiz için evdeki istemciler tüm internet trafiğini bu sunucu üzerinden tünelleyebilir:
- Tailscale istemcisinde
Preferences → Use exit node
menüsünü açın. - Listede
core-gateway
(ya da exit node olarak advertise edilen cihaz) görünecektir; seçip onaylayın. - macOS/iOS’ta “Route all traffic through exit node”, Android’de “Use exit node” seçeneğini işaretleyin.
- İstemci artık lokal ISP yerine VPS’in IP’si üzerinden internete çıkar; bağlantı doğrulamak için
curl https://ifconfig.me
ya dacurl https://ip.kerimkaan.com
ile kontrol edin. - İnternet sansürü/kısıtlamaları olan yerlerde bu yöntemle trafiğinizi daha özgür bir bölgedeki VPS üzerinden dolaştırabilirsiniz; bulunduğunuz ülkenin mevzuatını ihlal etmediğinizden emin olun.
- Çıkışı durdurmak için aynı menüden “None” seçeneğini işaretleyin veya
tailscale up --exit-node=none
komutunu kullanın.
Not: Exit node’u kullanırken VPS’in bant genişliği limitlerini, veri saklama politikalarını ve bulunduğu ülkenin hukuki gerekliliklerini göz önünde bulundurun.
6. Edge Cihazlarda Tailscale İstemcisi
6.1 macOS / Windows
- https://tailscale.com/download → uygun istemciyi yükleyin.
- Uygulamayı açın, Tailnet hesabıyla giriş yapın.
Preferences → Use exit node
seçeneğindencore-gateway
’i seçmek isteğe bağlı.
6.2 iOS / Android
- App Store / Play Store → “Tailscale” uygulamasını kurun.
- VPN profili izni verin.
DNS → Override local DNS
seçeneğini açın (AdGuard’ı tailnet DNS olarak kullanmak için).- Tailscale uygulamasında
Settings → Connect on Demand
(iOS) ya daVPN settings → Always-on VPN
(Android) seçeneklerini açarak LTE/Wi-Fi geçişlerinde tünelin otomatik kurulmasını sağlayın. - Android 12+ sürümlerinde “Block connections without VPN” opsiyonunu açarsanız bağlantı düştüğünde trafiğiniz açığa çıkmaz.
7. Tailnet DNS ve AdGuard Entegrasyonu
7.1 MagicDNS yapılandırması
Tailscale Admin → DNS
- Primay DNS:
100.77.34.12
(AdGuard Home’un Tailscale IP’si) MagicDNS
’i etkinleştirin.Split DNS
→ Özel domain’ler için (corp.local
,lab.guest
) sorguları belirleyin.
Tailscale, istemcilere AdGuard IP’sini push eder; sistem DNS ayarları otomatik olarak güncellenir.
7.2 AdGuard tarafında istemci haritalama
Settings → Client Settings
bölümünden Tailscale IP’lerini anlamlı isimlerle eşleyin (ör. 100.101.32.45 → macbook
), böylece query log’ları okunaklı olur.
7.3 Filtre listeleri ve upstream tuning
- Reklam + izleme →
AdGuard DNS filter
,OISD
,HaGeZi Multi
,1Hosts
gibi listeler. - Zararlı domain’ler →
Phishing Army
,Spamhaus
. - Upstream Failover →
https://dns.nextdns.io/<id>
gibi DoH endpoint’leri (kişisel analitik varsa). EDNS Client Subnet
→ gizliliği artırmak için devre dışı bırakın (varsayılan).
8. ACL ve Yetkilendirme Politikaları
Tailnet ACL dosyasıyla hangi cihazın hangi servislere erişeceğini tanımlayabiliriz. Örnek JSON:
{
"groups": {
"group:admins": ["user@example.com"],
"group:family": ["alice@example.com", "bob@example.com"]
},
"tagOwners": {
"tag:infra": ["group:admins"],
"tag:lan": ["group:admins"]
},
"acls": [
{
"action": "accept",
"src": ["group:admins"],
"dst": ["tag:infra:*", "100.77.34.12:53"]
},
{
"action": "accept",
"src": ["group:family"],
"dst": ["tag:infra:443", "home-nuc:8123"]
}
],
"dns": {
"overrideLocalDns": true
}
}
tag:infra:*
→ AdGuard ve altyapı servisleri sadece admin grubuna açık.home-nuc:8123
→ Evdeki Home Assistant’ı sadece family grubuna açıyoruz.
ACL değişikliğinden sonra istemciler yeniden bağlanmadan güncellemeyi alır.
9. İzleme ve Loglama
- AdGuard
Query Log
→ Reklam/izleme engelleme oranı, en çok sorgulanan domain’ler. Statistics
→ Saatlik/günlük DNS istek grafikleri.- Syslog entegrasyonu →
Settings → General → Enable syslog
. - Prometheus →
http://<tailscale-ip>:3000/metrics
endpoint’i mevcut; Grafana ile dashboard oluşturabilirsiniz. - Tailscale admin API → Tailnet cihaz listesi ve bağlantı durumu için.
10. Otomasyon (Ansible Örneği)
Aşağıdaki Ansible playbook parçacığı ile Tailscale + AdGuard kurulumunu otomatikleştirebilirsiniz.
---
- hosts: core_gateway
become: true
vars:
tailscale_authkey: "{{ lookup('env', 'TS_AUTHKEY') }}"
tasks:
- name: Install Tailscale
ansible.builtin.shell: |
curl -fsSL https://tailscale.com/install.sh | sh
args:
creates: /usr/sbin/tailscaled
- name: Bring Tailscale up
ansible.builtin.command: >
tailscale up --authkey={{ tailscale_authkey }}
--hostname=core-gateway --ssh --advertise-exit-node
--advertise-tags=tag:infra
register: ts_up
changed_when: "'already logged in' not in ts_up.stderr"
- name: Download AdGuard tarball
ansible.builtin.get_url:
url: https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz
dest: /tmp/adguard.tar.gz
mode: '0644'
- name: Extract and install AdGuard Home
ansible.builtin.shell: |
tar xzf /tmp/adguard.tar.gz -C /opt
/opt/AdGuardHome/AdGuardHome -s install
args:
creates: /etc/systemd/system/AdGuardHome.service
Repo halinde saklayarak farklı ortamlara aynı konfigürasyonu uygulayabilirsiniz.
Not: Playbook örneği yazıyı hazırlarken canlı ortamda test edilmedi; kullanmadan önce lab ortamında doğrulamanız önerilir.
11. Güvenlik Tavsiyeleri
- Tailscale admin hesabında 2FA zorunlu olsun.
tailscale status
ile şüpheli cihazları düzenli gözden geçirin, kullanılmayanlarıtailscale logout <hostname>
.- AdGuard arayüzünü sadece Tailnet IP’den erişilebilir bırakın; ekstra olarak basic auth + mTLS kullanın.
Settings → DNS → Blocked services
ile yetişkin içerik, kumar vb. kategorileri tek tıkla engelleyebilirsiniz.- Tailscale API anahtarlarını .env dosyalarında değil, 1Password/Bitwarden gibi kasalarda saklayın.
12. Bakım ve Güncellemeler
- Tailscale agent’ı haftalık
apt upgrade
içinde güncel tutun. - AdGuard Home sürüm yükseltmeleri →
./AdGuardHome -s update
. - Filtre listelerini
Auto-update interval
ile günlük/haftalık çekin. - Tailnet cihaz kotalarını (20 cihaz limiti) takip edin; gerekirse ücretli plana geçin.
- Yedekleme →
/opt/AdGuardHome/data/
klasörünü rsync/S3 ile yedekleyin.
13. Sorun Giderme Notları
tailscale status
→ Peers bağlantı durumu.tailscale ping <node>
→ NAT traversal çalışıyor mu?- DNS sorunlarında
tailscale netcheck
ile port ve latency incelenir. - AdGuard
Query Log
boşsa istemci DNS’i AdGuard’a yönlenmiyordur; MagicDNS ayarlarını ve istemci profilinde “Override DNS” seçeneğini kontrol edin. - Subnet route erişimi yoksa: Admin panelinde ilgili route yetkisini verdiğinizden emin olun, istemci tarafında
Use subnet routes
seçeneği açık mı bakın.
14. Sonuç
Tailscale’in NAT dostu WireGuard overlay’i ve AdGuard Home’un esnek DNS filtrelemesi birleştiğinde ev-ofis, veri merkezi ve mobil uçların tamamını kapsayan, bakımı kolay bir dağıtık güvenlik katmanı elde ediyoruz. Yapının güzelliği, yeni bir lokasyon eklemek istediğinizde yalnızca Tailscale istemcisini kurup AdGuard’a DNS sorguları göndermeye başlamanız. Bu mimariyi;
- Aile üyeleri için reklamsız ve zararlı içeriklerden arındırılmış internet,
- Uzaktaki geliştiriciler için production/staging servislerine özel erişim,
- HomeLab ve küçük işletmelerde merkezi DNS loglaması
için rahatlıkla ölçekleyebilirsiniz. Tailnet üzerindeki her cihaz artık tek bir özel ağda, tek bir DNS politikası altında.
Sorularınız veya eklemek istediğiniz optimizasyonlar varsa yorum bırakabilirsiniz.