Cloudflare API ile VDS IP Değişikliklerinde DNS Kayıtlarını Otomatik Güncelleme (DDNS)

Neden Cloudflare API ile DDNS?

VDS (Virtual Dedicated Server) kullanırken en can sıkıcı sorunlardan biri, IP adresinin değişmesi ve tüm DNS kayıtlarını elle güncelleme zorunluluğudur. Özellikle dinamik IP atanan VDS planlarında bu durum sık sık yaşanır. İşte tam bu noktada Cloudflare API devreye giriyor. Cloudflare'in sunduğu API sayesinde DNS kayıtlarınızı programatik olarak yönetebilir, IP değişikliklerinde saniyeler içinde güncelleme yapabilirsiniz. Bu yazıda, kendi VDS sunucunuzda çalıştıracağınız basit bir betikle nasıl otomatik DNS güncellemesi (DDNS) yapacağınızı anlatacağım.

Gereksinimler

Bu işlem için ihtiyacınız olanlar:

  • Cloudflare hesabı ve bir alan adı
  • Cloudflare Global API Key veya modern API Token
  • Bir VDS sunucusu (Ubuntu/Debian veya CentOS gibi bir Linux dağıtımı)
  • curl ve cron (çoğu sistemde hazır gelir)

API Token kullanmanızı şiddetle tavsiye ederim; Global API Key'e göre daha güvenlidir. Token oluştururken yalnızca ilgili zone için DNS edit izni verin.

Adım Adım Kurulum

1. Zone ID ve DNS Kaydı ID'sini Bulma

Öncelikle Cloudflare Dashboard'dan alan adınızın Zone ID'sini kopyalayın. Ardından güncellemek istediğiniz DNS kaydının (örneğin www veya @) kayıt ID'sini almanız gerekiyor. Bunu API ile yapabilirsiniz:

curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" \n -H "Authorization: Bearer API_TOKEN" \n -H "Content-Type: application/json"

Çıktıdan ilgili kaydın "id" değerini not edin.

2. DNS Güncelleme Betiği

Aşağıda, mevcut dış IP'nizi alıp Cloudflare'deki A kaydını güncelleyen bir bash betiği var. /usr/local/bin/cloudflare-ddns.sh olarak kaydedin:

#!/bin/bash # Değişkenleri kendinize göre doldurun ZONE_ID="your_zone_id" RECORD_ID="your_record_id" API_TOKEN="your_api_token" DOMAIN="example.com" # Mevcut dış IP'yi al CURRENT_IP=$(curl -s https://api.ipify.org) # Cloudflare'de kayıtlı IP'yi al CLOUDFLARE_IP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" | jq -r '.result.content') # IP değişmişse güncelle if [ "$CURRENT_IP" != "$CLOUDFLARE_IP" ]; then curl -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ --data '{"type":"A","name":"'"$DOMAIN"'","content":"'"$CURRENT_IP"'","ttl":120,"proxied":false}' echo "DNS kaydı güncellendi: $CURRENT_IP" else echo "IP değişmemiş, güncelleme yapılmadı." fi

Betiği çalıştırılabilir yapın: chmod +x /usr/local/bin/cloudflare-ddns.sh

3. Otomatik Güncelleme için Cron Job

Her 5 dakikada bir kontrol etmek için crontab'a şu satırı ekleyin:

*/5 * * * * /usr/local/bin/cloudflare-ddns.sh >> /var/log/cloudflare-ddns.log 2>&1

Bu sayede IP değişikliği anında fark edilir ve DNS güncellenir.

Test ve Sorun Giderme

Betiği ilk kez manuel çalıştırın: bash /usr/local/bin/cloudflare-ddns.sh. Çıktıda "DNS kaydı güncellendi" yazısını görürseniz her şey yolunda demektir. log dosyasını kontrol ederek hataları izleyebilirsiniz. JQ aracı yüklü değilse apt install jq veya yum install jq ile kurabilirsiniz.

Güvenlik İpuçları

  • API Token'ı doğrudan betikte saklamak yerine environment variable olarak tanımlayın veya şifreli bir dosyadan okuyun.
  • Betiğin sahibini root dışında bir kullanıcı yapın ve yalnızca o kullanıcının okuma izni olsun.
  • Cloudflare API isteklerinizi rate limit konusunda dikkatli olun; 5 dakikada bir istek sorun yaratmaz.

Son Söz

Bu yöntemle VDS sunucunuzun IP'si değişse bile web siteniz veya diğer servisleriniz kesintisiz erişilebilir olur. Cloudflare API sayesinde otomasyonu sağlamak hiç de zor değil. Üstelik bu betiği dilediğiniz gibi genişletebilir, birden fazla DNS kaydını güncelleyecek hale getirebilirsiniz. Deneyin, farkı görün!

← Tüm yazılar