Caddy, Technitium DNS ve Grafana ile Ev Mini‑PC İzleme Sütunu Ustalığı
Caddy Technitium DNS Grafana bu rehberin merkezindedir. Caddy, Technitium DNS ve Grafana, az bir mini‑PC’yi gizlilik odaklı bir DNS hub’a dönüştürmek için kullandığım tam yığını temsil ediyor; aynı zamanda ev ağımda geçen her sorguyu gerçek‑zaman izleme imkanı da sağlıyor. Bu gönderide, donanım seçimlerinden geri alma (geri alma) stratejilerine kadar tüm planı adım adım anlatacağım, böylece kendi dairenizde veya küçük ofisinizde güçlü, düşük‑güçlü ve izlenebilir bir DoH/DoT/DoQ hizmeti oluşturabilirsiniz.
Daha fazla bağlam için ilgili rehber ve resmi kaynak bağlantılarına göz at.
İçindekiler
- Intro
- Genel Çerçeve
- Neden Önemlidir
- Gizlilik & Güvenlik
- Operasyonel Bilgiler
- Gereksinimler
- Donanım
- İşletim Sistemi
- Ağ
- Yazılım Bağımlılıkları
- Adım‑Adım Uygulama
- 1. Technitium DNS Sunucusunu Yükleyin
- 2. DoH/DoT için Caddy’yi yapılandır
- 3. Grafana ve Technitium Exporter’ı Kurma
- 4. Dinamik DNS’i Bağlama
- 5. Noktaları Doğrula
- Sorun Giderme
- Optimizasyon
- SSS
- Kaynaklar & İleri Okuma
- Tablo
- Caddy vs Diğer DoH Çevirici Geri Proxy’leri
- Risk & Geri Alma Karar Matrisi
- En İyi Uygulama Doğrulama Kontrol Listesi
- Kontrol Listeleri
- Yerleştirme Öncesi Hazırlık Kontrol Listesi
- Yerleştirme Sonrası İzleme Kontrol Listesi
- Otomatik Kurulum Betiği
Intro
Ev ağları genellikle kişisel gizliliğin en zayıf halkasıdır. Tek bir DNS çarpıtması tüm trafiğinizi ISP’niz ya da kötü niyetli bir yönlendiriciye açabilir. Yerel bir DNS‑over‑HTTPS (DoH) sunucusu kurmak bunu engellerken, bir panel (dashboard) sorunları kesintiye dönüşmeden önce fark etmenizi sağlar.
Bu kılavuzda şunları öğreneceksiniz:
– Technitium DNS Server’ı yetkili çözücü olarak kurmak
– Caddy’i ters proxy (reverse proxy) olarak kullanarak DoH/DoT/DoQ uç noktalarını açmak
– DNS metriklerini sürekli izleme için Grafana’ya aktarmak
– Dinamik DNS güncellemelerini yapılandırmak, böylece ISP’niz yeni bir IP verdiğinde ev otomasyonunuz bozulmaz
– Her şeyin çalıştığını doğrulamak ve bir sorun çıktığında hızlıca geri dönmek
Makale boyunca gerçek‑dünya senaryoları ekleyeceğim; örneğin, dinamik IP geçişinin akıllı ışıklarımı devre dışı bırakması ve kullanım senaryonuz değiştiğinde Caddy, Traefik veya Nginx arasında seçim yapmanıza yardımcı olacak karar noktaları.
Bu yeniden yazımın ilham kaynağı olan orijinal gönderiyi merak ediyorsanız, arşivlenmiş makaleyi /saturday-october-10-2020 adresinde inceleyin.
Genel Çerçeve
Yığın üç temel bileşenden oluşur:
| Bileşen | Rol | Önemli Özellikler |
|---|---|---|
| Caddy | Geri yönlendirme proxy’si ve HTTP/HTTPS sunucusu | Otomatik TLS, temiz yapılandırma, eklenti ekosistemi |
| Technitium DNS Server | Yetkili çözümleyici | Yerleşik DoH/DoT/DoQ desteği, web yönetim arayüzü, düşük ayak izi |
| Grafana | Görselleştirme ve uyarı | Prometheus ihracatçısı aracılığıyla metrik toplar, özelleştirilebilir paneller |
Nasıl etkileşirler: Caddy, 443 ve 853 portlarında dinler, DoH/DoT isteklerini Technitium’a yönlendirir, Technitium sorguları çözer ve günlüğe kaydeder. Technitium ihracatçısı, Prometheus için /metrics sunar; Grafana bunu tarayarak sorgu gecikmesi, hata oranları ve önbellek başarı oranları gösteren paneller oluşturur. Küçük bir Caddy eklentisi (dynamic_dns) mini-PC’nin kamu IP’si ile dış DNS kayıtlarını senkronize tutar, böylece ISP adresinizi değiştirdiğinde bile ev cihazlarınız DoH sunucusuna her zaman ulaşabilir.
Örnek:
Caddy ➜ (DoH) ➜ Technitium ➜ (çözer) ➜ İnternet
|
└─ Prometheus ihracatçısı ➜ Grafana paneli
Neden Önemlidir
Gizlilik & Güvenlik
- Şifreli trafik: DoH/DoT, sorgu içeriğini pasif dinleyicilerden gizler.
Operasyonel Bilgiler
- Anında uyarılar: Sorgu hatalarında aniden artış, bir yanlış yapılandırmayı ya da bir DDoS girişimini gösterebilir.
- Tarihi eğilimler: Zaman içinde önbellek hit oranlarını izlemek, TTL’leri hız ile tazelik arasında dengelemek için ayarlamanıza yardımcı olur.
- Kök neden analizi: Ev otomasyonu başarısız olursa, Grafana paneli hatanın DNS zaman aşımı mı yoksa yanlış yönlendirilmiş sorgu mu olduğunu ortaya çıkarabilir.
Gerçek hayattan örnek: Daha önceki bir kurulumda, ISP’nin BGP duyurularındaki ani bir değişiklik ev ağının farklı bir genel IP almasına yol açtı. Statik DNS kaydı kullanan akıllı kilidim hata vermeye başladı. Caddy’nin dynamic_dns eklentisiyle Cloudflare kayıtlarını otomatik olarak güncelleyerek kilidi manuel müdahale olmadan erişilebilir tutabildik.
Gereksinimler
Donanım
- Mini‑PC: En az 1 GHz çift çekirdek, 2 GB RAM ve SSD (NVMe hızlıysa artı). Raspberry Pi 4 4 GB yeterli olsa da, yüksek sorgu yükleri için daha güçlü bir kenar yönlendirici ya da düşük güç tüketimli Intel NUC tercih edilir.
- Güç: Kesintisiz güç kaynağı (UPS) ya da en az 15 W’lık adaptör, beklenmedik bir güç kesintisinde ani kapanmayı önlemek için gerekir.
İşletim Sistemi
Ubuntu 22.04 LTS, Debian 12 veya systemd ve apt içeren herhangi bir yeni dağıtım.
Ağ
- Statik IP veya DDNS: En az bir açık IP adresi, bir domaine eşlenebilmeli. Dinamik IP ortamları için Cloudflare, DuckDNS veya Caddy’nin
dynamic_dnseklentisi gibi bir dinamik DNS sağlayıcısı şarttır. - Portlar:
- 443/TCP, DoH için
- 853/TCP, DoT için
- 443/TCP, Grafana için (güvenlik amacıyla farklı bir port seçebilirsiniz)
Yazılım Bağımlılıkları
- Docker (Grafana ve exporter için)
- systemd (servis yönetimi)
- curl, jq (CLI araçları)
- caddy (https://caddyserver.com/download’dan indirilen)
Örnek:
Ubuntu 22.04 çalışan bir Raspberry Pi 4, Cloudflare domainine doh.example.com bağlanmış, yönlendiricide 443 ve 853 portları açık ise, tamamen çalışır durumda bir kurulumdur.
Adım‑Adım Uygulama
Aşağıdaki bölümler, her bileşenin kurulumu, yapılandırılması ve entegrasyonu için adım adım rehberlik eder. Sonundaki betik, bu adımların çoğunu otomatikleştirir, ama her bloğun ne yaptığını açıklayacağım, böylece ortamınıza uyarlayabilirsiniz.
1. Technitium DNS Sunucusunu Yükleyin
- En son ikili dosyayı GitHub’dan indir:
bash
wget https://github.com/TechnitiumSoftware/DnsServer/releases/download/v5.2.0/dns-server-linux-amd64.tar.gz - Açın ve
/usr/local/binkonumuna taşıyın:
bash
tar -xzf dns-server-linux-amd64.tar.gz
sudo mv dns-server-linux-amd64 /usr/local/bin/dns-server - systemd birimi oluşturun:
“`bash
cat <<EOF | sudo tee /etc/systemd/system/dns-server.service
[Unit]
Description=Technitium DNS Server
After=network.target
[Service]
ExecStart=/usr/local/bin/dns-server
Restart=on-failure
User=nobody
Group=nogroup
Environment=PORT=53
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
EOF
4. Başlatın ve etkinleştirin:bash
sudo systemctl daemon-reload
sudo systemctl start dns-server
sudo systemctl enable dns-server
“`
2. DoH/DoT için Caddy’yi yapılandır
-
Caddy ikili dosyasını ve
dynamic_dnseklentisini indir:
bash
curl -Lo caddy.zip https://caddyserver.com/api/download?os=linux&arch=amd64
unzip caddy.zip
sudo mv caddy /usr/local/bin/ -
DoH, DoT ve dinamik DNS desteğiyle bir Caddyfile oluştur:
“`bash
cat <<EOF | sudo tee /etc/caddy/Caddyfile
doh.example.com {
reverse_proxy localhost:53
tls internal
}
dot.example.com {
reverse_proxy localhost:53
tls internal
}
admin.example.com {
reverse_proxy localhost:8080
tls internal
}
(dynamic) {
header X-Forwarded-For {remote}
header X-Real-IP {remote}
}
dns.example.com {
import dynamic
reverse_proxy localhost:53
tls internal
}
EOF
“`
-
dynamic_dnseklentisini Caddyfile’a ekleyerek veya modül olarak kurarak etkinleştir. Hızlı bir test için Caddy ile birlikte gelen yerleşikdynamic_dnsbetiğini kullan:
bash
curl -Lo dynamic-dns.sh https://caddyserver.com/api/plugins?name=dynamic_dns
chmod +x dynamic-dns.sh
sudo mv dynamic-dns.sh /usr/local/bin/ -
Caddy için bir systemd birimi oluştur:
“`bash
cat <<EOF | sudo tee /etc/systemd/system/caddy.service
[Unit]
Description=Caddy web server
After=network.target
[Service]
ExecStart=/usr/local/bin/caddy run –config /etc/caddy/Caddyfile
ExecReload=/usr/local/bin/caddy reload –config /etc/caddy/Caddyfile
ExecStop=/usr/local/bin/caddy stop
Restart=on-failure
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
EOF
“`
- Başlat ve etkinleştir:
bash
sudo systemctl daemon-reload
sudo systemctl start caddy
sudo systemctl enable caddy
3. Grafana ve Technitium Exporter’ı Kurma
-
Docker Compose dosyası oluşturun:
bash
cat <<EOF | sudo tee /home/pi/docker-compose.yml
version: '3.7'
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
exporter:
image: technitium/dns-exporter:latest
container_name: dns-exporter
ports:
- "9115:9115"
volumes:
grafana-data:
EOF -
Stack’i başlatın:
bash
cd /home/pi
docker compose up -d -
Grafana’yı yapılandırın:
–http://<mini-pc-ip>:3000adresini açın ve varsayılanadmin/adminile giriş yapın.
– Bir Prometheus veri kaynağı ekleyin vehttp://exporter:9115/metricsadresine işaret etsin.
– Grafana Labs’tan önceden oluşturulmuş dashboard’u içe aktarın: https://grafana.com/grafana/dashboards/24555-technitium-dns-exporter/.
İçe aktar özelliğini kullanın ve dashboard ID’sini girin.
4. Dinamik DNS’i Bağlama
Cloudflare kullanıyorsanız, çalıştırın:
export CF_API_TOKEN="your_cloudflare_api_token"
./dynamic-dns.sh \
--token="$CF_API_TOKEN" \
--zone="example.com" \
--record="doh" \
--subdomain="doh" \
--ttl=300
Bu betik, herkese açık IP değiştiğinde doh.example.com A kaydını günceller. Token’ı güvenli bir yerde saklayın ve her 5 dakikada bir çalışacak bir cron işi kurun.
5. Noktaları Doğrula
- DoH:
curl -s https://doh.example.com/dns-query -H 'accept: application/dns-json' -d '{"id":1,"opcode":0,"questions":[{"name":"example.com","type":1}]}' | jq . - DoT: Use
dig @dot.example.com example.com +dnssec +short - Grafana: Panoya gidin, sorgu sayıları ve gecikmenin güncellenip güncellenmediğini kontrol edin.
Herhangi bir hizmet başarısız olursa, günlükleri kontrol edin:
journalctl -u caddy -f
journalctl -u dns-server -f
docker logs grafana
docker logs exporter
Sorun Giderme
| Belirti | Muhtemel Sebep | Düzeltme |
|---|---|---|
| 502 Bad Gateway | Caddy, Technitium’e ulaşamıyor (yanlış port veya firewall) | Technitium’un 53 portunda dinlenip dinlemediğini ve ufw/router ACL’lerinin trafiğe izin verip vermediğini doğrulayın |
| TLS handshake failure | Caddy’de uygun sertifika eksik veya DNS kaydı yanlış yapılandırılmış | caddy validate ile konfigürasyonu kontrol edin; alan adının doğru IP’ye işaret ettiğinden emin olun |
| Grafana veri kaynağı hatası | Exporter, 9115’te /metrics sunmuyorsa |
curl http://exporter:9115/metrics çalıştırın; boşsa, exporter günlüklerini kontrol edin |
| DNS sorgu zaman aşımları | ISP UDP 53’ü engelliyor veya firewall paketleri düşürüyor | DoH/DoT’yi 443/853 portuna geçir; bu portların açık olduğundan emin olun |
| Önbellek kaçırma artışı | Yüksek TTL’ler eski veri yaratıyor | Caddyfile’da cache TTL’yi azaltın: cache default 300 |
Genel hata: Caddyfile’ı düzenlerken --reload bayrağını eklemeyi unutmak. Caddy otomatik yeniden başlar, ama kısa bir kesinti görebilirsiniz. Bunun önüne geçmek için caddy reload --config /etc/caddy/Caddyfile kullanın.
Geri Alma stratejisi:
– Caddy için: caddy stop && caddy run --config /etc/caddy/Caddyfile.old
– Technitium için: /etc/dns-server.conf dosyasını yedekten geri yükleyin
– Grafana için: Eski JSON’ı kullanarak panoyu yeniden içe aktarın
Optimizasyon
| Alan | Teknik | Fayda |
|---|---|---|
| Caddy önbelleği | cache default 300 |
Yaygın sorgular için yan‑çevrim sayısını azaltır |
| Technitium ölçeklendirme | Okunur bir yedek kurun ve rsync ile yapılandırmaları senkronize edin |
Yoğun okuma trafiğini hafifletir, dayanıklılığı artırır |
| Grafana uyarıları | Eşik: query_latency > 200ms |
Gecikme artarsa anında bildirim alırsınız |
| Yedeklemeler | cron.daily /usr/local/bin/backup.sh |
Yanlış yapılandırma değişikliklerinden sonra hızlıca geri yükleme |
| Güç | En az 2 saat çalışma süresine sahip bir UPS kullanın | Yapılandırma dosyalarını bozan ani kapanmaları önler |
Pratik bir operatör notu: Son 30 günün Grafana anlık görüntülerini içeren küçük bir USB sürücüsü tutuyorum. Katalitik bir hata meydana geldiğinde, pano düzenini ve veri kaynağı ayarlarını 5 dakikadan kısa sürede geri yükleyebilirim.
SSS
S: Caddy, Technitium DNS ve Grafana ev ağı için ne zaman doğru bir seçimdir?
A: Şifreli DNS’e ihtiyaç duyduğunuzda, ISP manipülasyonunu önlemek istediğinizde ve sorgu desenlerine görünürlük istediğinizde. Akıllı evler, VoIP veya güvenilir isim çözümlemesi gerektiren herhangi bir hizmet için idealdir.
S: Bu yığını kurarken en yaygın hata nedir?
A: DoH ve DoT için aynı alan adını açmayı unutmak veya Caddy’yi yanlış arka uç bağlantı noktasıyla yapılandırmak. Üretime geçmeden önce her zaman curl veya dig ile test edin.
S: İzleme servisini kurduktan sonra neyi doğrulamalısınız?
A: Grafana’nın canlı sorgu sayımlarını gösterdiğinden, Prometheus’un /metrics‘i kazıdığından ve simüle edilen artışlar için uyarıların tetiklendiğinden emin olun. Dinamik DNS güncellemesini, test ortamında genel IP’yi manuel olarak değiştirerek doğrulayın.
S: Caddy yönetim arayüzünü nasıl güvence altına alırım?
A: 127.0.0.1 adresine bağlayın ve yalnızca mini‑PC’nin kendisine izin veren bir güvenlik duvarı kuralı kullanın. basic_auth ile HTTP kimlik doğrulaması veya istemci sertifikalarını yöneten ters vekil (reverse proxy) kullanmayı düşünün.
Kaynaklar & İleri Okuma
- Resmi Caddy indirme: https://caddyserver.com/download
- Technitium DNS Sunucusu kılavuzu: https://blog.technitium.com/2020/07/how-to-host-your-own-dns-over-https-and.html
- Grafana Technitium Exporter paneli: https://grafana.com/grafana/dashboards/24555-technitium-dns-exporter/
- Caddy dinamik DNS eklentisi: https://github.com/caddyserver/caddy-dynamic-dns
- İç kılavuz: [/caddy-technitium-dns-grafana-mini-pc-monitoring-service-control-guide]
- Sorun giderme notları: [/caddy-technitium-dns-grafana-mini-pc-monitoring-service-control-troubleshooting]
Tablo
Caddy vs Diğer DoH Çevirici Geri Proxy’leri
| Özellik | Caddy | Traefik | Nginx |
|---|---|---|---|
| Otomatik TLS | ✔ | ✔ | ❌ |
| Basitlik | 8/10 | 7/10 | 6/10 |
| Eklenti ekosistemi | 9/10 | 8/10 | 7/10 |
| Kaynak kullanımı | Düşük | Orta | Orta |
| Dinamik DNS desteği | Yerleşik (dynamic_dns) | Üçüncü taraf | Üçüncü taraf |
| Karar | Mini‑PC üzerinde hızlı, güvenli DoH dağıtımı için en iyi seçenek | Traefik zaten kullanıyorsanız iyi | Yeterli ama daha ağır |
Risk & Geri Alma Karar Matrisi
| Senaryo | Risk | Geri alma yolu | Doğrulama |
|---|---|---|---|
| Caddy yapılandırma sözdizim hatası | Servis çökmesi | Geri yükle Caddyfile.old |
caddy validate |
| Technitium DB bozulması | DNS kesintileri | Geri yükle /var/lib/dns-server/db |
journalctl -u dns-server kontrolü |
| Grafana paneli içe aktarılamıyor | Kullanıcı arayüzü eksik | Önceki JSON’i yeniden içe aktar | Grafana konsol logları |
| Dinamik DNS güncellemesi başarısız | Kamu IP’si eski | Skript’i yeniden çalıştır, dig doh.example.com kontrol et |
IP’nin curl ifconfig.me ile eşleştiğini doğrula |
En İyi Uygulama Doğrulama Kontrol Listesi
- ☑ Caddy HTTPS sunar hatasız (
curl -I https://doh.example.com) - ☑ Technitium sorguları çözer (
dig @doh.example.com example.com) - ☑ Grafana canlı metrikleri gösterir (
http://<mini-pc>:3000/d/paneli) - ☑ Dinamik DNS kaydı günceller (
dig doh.example.com +short) - ☑ Yedeklemeler var (dışa aktarılan konfigürasyon, Grafana JSON)
Kontrol Listeleri
Yerleştirme Öncesi Hazırlık Kontrol Listesi
- ☑ Mini‑PC CPU/RAM/SSD gereksinimlerini karşılıyor
- ☑ Ubuntu 22.04 veya Debian 12 kurulu
- ☑ Yönlendirici 443 ve 853 portları mini‑PC’ye yönlendirildi
- ☑ Alan adları kayıtlı ve geçerli IP’ye işaret ediyor
- ☑ Cloudflare API token (dinamik DNS kullanıyorsanız) güvenli şekilde saklandı
Yerleştirme Sonrası İzleme Kontrol Listesi
- ☑ Grafana paneli 30 sn aralıklarla güncelleniyor
- ☑
query_latency > 200msuyarı kuralı test artışı sırasında tetikleniyor - ☑ Yedekleme cron işi aktif ve test geri yükleme başarılı
- ☑ Caddy logları son 24 h içinde 502/504 hatası göstermiyor
- ☑ Dinamik DNS kaydı dış IP ile eşleşiyor
Otomatik Kurulum Betiği
#!/usr/bin/env bash
set -euo pipefail
# Değişkenler – ortamınıza göre ayarlayın
DOMAIN="doh.example.com"
DNS_DOMAIN="doh.example.com"
TEMPLATE_URL="https://caddyserver.com/api/download?os=linux&arch=amd64"
DYNAMIC_DNS_URL="https://caddyserver.com/api/plugins?name=dynamic_dns"
CF_API_TOKEN="YOUR_CLOUDFLARE_TOKEN"
ZONE_ID="YOUR_CLOUDFLARE_ZONE_ID"
# 1. Önceden kurulu paketleri kurun
sudo apt update
sudo apt install -y docker.io docker-compose curl jq ufw
# 2. Technitium DNS Sunucusunu kurun
curl -L -o dns-server.tar.gz https://github.com/TechnitiumSoftware/DnsServer/releases/download/v5.2.0/dns-server-linux-amd64.tar.gz
tar -xzf dns-server.tar.gz
sudo mv dns-server-linux-amd64 /usr/local/bin/dns-server
cat <<EOF | sudo tee /etc/systemd/system/dns-server.service
[Unit]
Description=Technitium DNS Server
After=network.target
[Service]
ExecStart=/usr/local/bin/dns-server
Restart=on-failure
User=nobody
Group=nogroup
Environment=PORT=53
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable dns-server
sudo systemctl start dns-server
# 3. Caddy'yi kurun
curl -L -o caddy.zip "$TEMPLATE_URL"
unzip caddy.zip
sudo mv caddy /usr/local/bin/
curl -L -o dynamic-dns.sh "$DYNAMIC_DNS_URL"
chmod +x dynamic-dns.sh
sudo mv dynamic-dns.sh /usr/local/bin/
# 4. Caddyfile oluşturun
sudo mkdir -p /etc/caddy
cat <<EOF | sudo tee /etc/caddy/Caddyfile
$DOMAIN {
reverse_proxy localhost:53
tls internal
}
EOF
# 5. Caddy için Systemd birimi
cat <<EOF | sudo tee /etc/systemd/system/caddy.service
[Unit]
Description=Caddy web server
After=network.target
[Service]
ExecStart=/usr/local/bin/caddy run --config /etc/caddy/Caddyfile
ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile
ExecStop=/usr/local/bin/caddy stop
Restart=on-failure
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable caddy
sudo systemctl start caddy
# 6. Grafana ve Exporter için Docker Compose
mkdir -p /home/$USER/monitoring
cat <<EOF | tee /home/$USER/monitoring/docker-compose.yml
version: '3.7'
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
exporter:
image: technitium/dns-exporter:latest
container_name: dns-exporter
ports:
- "9115:9115"
volumes:
grafana-data:
EOF
cd /home/$USER/monitoring
sudo docker compose up -d
# 7. Grafana panosunu içe aktar (curl ve jq gerektirir)
DASHBOARD_JSON=$(curl -s https://api.grafana.com/dashboards/ids/24555 | jq -r .dashboard)
curl -X POST -H "Content-Type: application/json" \
-d "{\"dashboard\":${DASHBOARD_JSON},\"overwrite\":true}" \
http://admin:admin@localhost:3000/api/dashboards/db
# 8. Dinamik DNS güncellemesi (bir kez çalıştırın, sonra cron ayarlayın)
./dynamic-dns.sh \
--token="$CF_API_TOKEN" \
--zone="$ZONE_ID" \
--record="doh" \
--subdomain="doh" \
--ttl=300
echo "Kurulum tamamlandı. 'systemctl status dns-server caddy' ile servisleri kontrol edin ve Grafana'ya http://$DOMAIN:3000 adresinden erişin."
Bu planla, gizliliğinizi koruyan, ISP müdahalelerine karşı dirençli ve ev ağınızın kontrolünü elinizde tutan, gözlemlenmeye hazır kendi kendine yeten bir DNS hub’ına sahip olacaksınız. İyi hacking!



