Uygulama

Cloudflare ve Bash Script ile Etki Alanınız için Dinamik IP Güncellemelerini Otomatikleştirin

Statik IP adreslerinin genellikle ek bir masraf olduğu bir dünyada, dinamik IP adresleri, etki alanlarının yönetimini zorlaştırabilir. İSS’niz size dinamik bir IP adresi atarsa ​​alan adınızı güncel tutmak zor olabilir. Bu eğitim, IP’niz değiştiğinde alan adınızın DNS kaydını güncellemek için Cloudflare API’sini kullanan basit ama etkili bir Bash betiği oluşturma konusunda size yol gösterecektir. Bu komut dosyasıyla alan adınızın, statik bir IP olmasa bile her zaman mevcut dinamik IP adresinize işaret etmesini sağlayabilirsiniz.

 

Alan Adınızı Dinamik IP ile Eşlemek İçin Adım Adım Kılavuz

IP’niz değiştiğinde Cloudflare DNS kaydınızı otomatik olarak güncelleyen bir Bash betiği oluşturmak için aşağıdaki adımları izleyin. Bu komut dosyası, ev sunucuları, uzak masaüstleri veya dinamik bir IP adresinin tutarlı bir şekilde DNS’ye yansıtılmasının gerekli olduğu herhangi bir durum için idealdir.

  1. Cloudflare API Token Alın: Cloudflare’in API’si ile etkileşimde bulunmak için DNS kayıtlarını düzenleme izinlerine sahip bir API token ihtiyacınız vardır.
    1. Cloudflare’e giriş yapın: Cloudflare kontrol panelini ziyaret edin ve hesap bilgilerinizle giriş yapın.
    2. API Tokens’a gidin: Profilim’e gidin ve API Token seçin.
    3. Yeni Bir Token Oluşturun: Token Oluştur’a tıklayın ve Bölge DNS şablonunu düzenle’yi seçin.
    4. Tokenı Özelleştir: Token yönetmesini istediğiniz etki alanını belirtin ve Token Oluştur’a tıklayın.
    5. token kopyala: Oluşturulan API token betiğinizde kullanmak üzere kopyalayın.

    Oluşturulan jetonu kopyalayın. Bu, Cloudflare ile kimlik doğrulaması yapmak için komut dosyanızda kullanılacaktır.

  2. Bölge Kimliğinizi ve DNS Kayıt Kimliğinizi Bulun: Daha sonra alan adınızın Bölge Kimliğine ve güncellemek istediğiniz DNS kaydının kimliğine ihtiyacınız vardır.
    $ curl -X GET "https://api.cloudflare.com/client/v4/zones?name=example.com" \
         -H "Authorization: Bearer YOUR_CLOUDFLARE_API_TOKEN" \
         -H "Content-Type: application/json"
    

    Bu komut example.com için Bölge Kimliğini döndürecektir. example.com’u gerçek alan adınızla değiştirin. Bölge Kimliğiniz olan kimlik alanını not edin.

    Find Your Zone ID and DNS Record ID
    Bölge Kimliğinizi ve DNS Kayıt Kimliğinizi Bulun

    DNS_RECORD_ID’yi almak için şunu kullanın:

    $ curl -X GET "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records?name=example.com" \
         -H "Authorization: Bearer YOUR_CLOUDFLARE_API_TOKEN" \
         -H "Content-Type: application/json"
    

    İstediğiniz DNS kaydının altındaki kimlik alanını arayın. Bu sizin DNS_RECORD_ID’nizdir.

     

    This command will get you DNS_RECORD_ID
    Bu komut size DNS_RECORD_ID değerini verecektir


  3. DNS Kaydını Güncellemek için Temel Bash Komut Dosyası Oluşturun: Gerekli kimlikler ve belirteçlerle, DNS kaydını mevcut IP’nizle güncellemek için basit bir Bash betiği oluşturabilirsiniz.
    #!/bin/bash
    
    CLOUDFLARE_API_TOKEN="your_api_token_here"
    ZONE_ID="your_zone_id_here"
    DNS_RECORD_ID="your_record_id_here"
    DNS_RECORD_NAME="example.com"
    DNS_RECORD_TYPE="A"
    
    IP=$(curl -s http://ipv4.icanhazip.com)
    
    curl -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID" \
         -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
         -H "Content-Type: application/json" \
         --data '{
           "type": "'"$DNS_RECORD_TYPE"'",
           "name": "'"$DNS_RECORD_NAME"'",
           "content": "'"$IP"'",
           "ttl": 120,
           "proxied": false
         }'
  • Bu komut dosyası, DNS kaydını mevcut genel IP’nizle günceller. Yer tutucuları gerçek değerlerinizle değiştirin.

     

    Bash Script to Update the DNS Record
    DNS Kaydını Güncellemek için Bash Komut Dosyası
  • Komut Dosyasını Yalnızca Gerektiğinde Güncellenecek Şekilde Geliştirin: Gereksiz güncellemeleri önlemek için, güncellemeden önce IP adresinin değişip değişmediğini kontrol etmek için komut dosyasını geliştirin. Ayrıca komut dosyasındaki herhangi bir komutun tam yollarını güncelleyin, böylece cron ile çalışabilir.

    #!/bin/bash

    
    CLOUDFLARE_API_TOKEN="your_api_token_here"
    ZONE_ID="your_zone_id_here"
    DNS_RECORD_ID="your_record_id_here"
    DNS_RECORD_NAME="example.com"
    DNS_RECORD_TYPE="A"
    
    # Define the full paths to commands to be able run this script with cron
    CURL="/usr/bin/curl"
    JQ="/usr/bin/jq"
    
    # Get the current public IP address
    IP=$($CURL -s http://ipv4.icanhazip.com)
    
    # Cloudflare API endpoint to get the current DNS record
    GET_API_ENDPOINT="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID"
    
    # Get the current DNS record's IP address from Cloudflare
    current_ip=$($CURL -s -X GET "$GET_API_ENDPOINT" \
         -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
         -H "Content-Type: application/json" | $JQ -r '.result.content')
    
    # Check if the IP addresses are different
    if [[ "$IP" == "$current_ip" ]]; then
      echo "No update needed. IP address has not changed: $IP"
    else
      echo "IP address has changed from $current_ip to $IP. Updating record..."
    
      # Cloudflare API endpoint to update the DNS record
      UPDATE_API_ENDPOINT="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID"
    
      # Update the DNS record
      response=$($CURL -s -X PUT "$UPDATE_API_ENDPOINT" \
           -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
           -H "Content-Type: application/json" \
           --data '{
             "type": "'"$DNS_RECORD_TYPE"'",
             "name": "'"$DNS_RECORD_NAME"'",
             "content": "'"$IP"'",
             "ttl": 120,
             "proxied": false
           }')
    
      # Check if the update was successful
      if [[ $response == *"\"success\":true"* ]]; then
        echo "DNS record updated successfully to IP: $IP"
      else
        echo "Failed to update DNS record. Response: $response"
      fi
    fi
  1. Komut dosyasının bu sürümü, geçerli IP’nin DNS kaydındaki IP’den farklı olup olmadığını kontrol eder. DNS kaydını yalnızca IP değiştiğinde günceller.

     

    Enhanced Script to Update DNS record Only When Necessary
    DNS kaydını Yalnızca Gerektiğinde Güncellemek için Geliştirilmiş Komut Dosyası
  2. Komut Dosyasını Cron Kullanarak Zamanlama: DNS kaydınızı otomatik olarak güncel tutmak için komut dosyasını cron kullanarak düzenli aralıklarla çalışacak şekilde planlayın.
    $ crontab -e
    # Add the following line to run the script every 5 minutes:
    */5 * * * * /path/to/update_dns.sh
    

    Bu, betiği her 5 dakikada bir çalıştırarak dinamik IP’nizdeki herhangi bir değişikliğin anında DNS kayıtlarınıza yansımasını sağlar.

 

 

Yazının orijinalini buradan okuyabilirsiniz.