spot_imgspot_img

Top 5 This Week

spot_img

Related Posts

Caddy Technitium DNS Grafana Rehberi

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.

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.

  • 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_dns eklentisi 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

  1. 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
  2. Açın ve /usr/local/bin konumuna taşıyın:
    bash
    tar -xzf dns-server-linux-amd64.tar.gz
    sudo mv dns-server-linux-amd64 /usr/local/bin/dns-server
  3. 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

  1. Caddy ikili dosyasını ve dynamic_dns eklentisini indir:
    bash
    curl -Lo caddy.zip https://caddyserver.com/api/download?os=linux&arch=amd64
    unzip caddy.zip
    sudo mv caddy /usr/local/bin/

  2. 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
“`

  1. dynamic_dns eklentisini Caddyfile’a ekleyerek veya modül olarak kurarak etkinleştir. Hızlı bir test için Caddy ile birlikte gelen yerleşik dynamic_dns betiğ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/

  2. 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
“`

  1. Başlat ve etkinleştir:
    bash
    sudo systemctl daemon-reload
    sudo systemctl start caddy
    sudo systemctl enable caddy

3. Grafana ve Technitium Exporter’ı Kurma

  1. 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

  2. Stack’i başlatın:
    bash
    cd /home/pi
    docker compose up -d

  3. Grafana’yı yapılandırın:
    http://<mini-pc-ip>:3000 adresini açın ve varsayılan admin/admin ile giriş yapın.
    – Bir Prometheus veri kaynağı ekleyin ve http://exporter:9115/metrics adresine 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 > 200ms uyarı 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!

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

Popular Articles