Automatizujte dynamické aktualizácie IP adries pre svoju doménu pomocou Cloudflare a Bash Script


Vo svete, kde sú statické IP adresy často dodatočnými nákladmi, môžu dynamické IP adresy sťažiť správu domén. Ak vám poskytovateľ internetových služieb pridelí dynamickú IP adresu, aktualizácia domény môže byť problematická. Tento návod vás prevedie vytvorením jednoduchého, ale efektívneho skriptu Bash, ktorý využíva rozhranie API Cloudflare na aktualizáciu DNS záznamu vašej domény vždy, keď sa zmení vaša IP adresa. Pomocou tohto skriptu môžete zabezpečiť, aby vaša doména vždy smerovala na vašu aktuálnu dynamickú IP adresu, a to aj bez statickej IP.

V tomto návode sa dozviete:

  • Ako získať token Cloudflare API na správu DNS
  • Ako nájsť ID zóny a ID záznamu DNS
  • Vytvorenie skriptu Bash na aktualizáciu DNS záznamu pomocou dynamickej IP adresy
  • Ako vylepšiť skript tak, aby sa aktualizoval iba pri zmene IP adresy

Podrobný sprievodca mapovaním domény na dynamickú IP adresu

Postupujte podľa krokov nižšie a vytvorte skript Bash, ktorý automaticky aktualizuje váš záznam DNS Cloudflare vždy, keď sa zmení vaša IP adresa. Tento skript je ideálny pre domáce servery, vzdialené pracovné plochy alebo akúkoľvek situáciu, keď je potrebné konzistentne odrážať dynamickú IP adresu v DNS.

  1. Získajte svoj token Cloudflare API: Na interakciu s API Cloudflare potrebujete token API s povoleniami na úpravu záznamov DNS.

    1. Prihláste sa do Cloudflare: Navštívte ovládací panel Cloudflare a prihláste sa pomocou prihlasovacích údajov svojho účtu.
    2. Prejdite na Tokeny rozhrania API: Prejdite na položku Môj profil a vyberte položku Tokeny rozhrania API.
    3. Vytvoriť nový token: Kliknite na Vytvoriť token a vyberte šablónu DNS zóny úprav.
    4. Prispôsobenie tokenu: Zadajte doménu, ktorú má token spravovať, a kliknite na položku Vytvoriť token.
    5. Skopírujte token: Skopírujte vygenerovaný token rozhrania API na použitie v skripte.

    Skopírujte vygenerovaný token. Toto sa použije vo vašom skripte na overenie pomocou Cloudflare.

    Vyhľadanie ID zóny a ID záznamu DNS: Ďalej budete potrebovať ID zóny vašej domény a ID DNS záznamu, ktorý chcete aktualizovať.

    $ 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"
    

    Tento príkaz vráti ID zóny pre example.com. Nahraďte example.com skutočným názvom domény. Všimnite si pole ID, ktoré je ID vašej zóny.

    Ak chcete získať DNS_RECORD_ID, použite:

    $ 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"
    

    Vyhľadajte pole id pod požadovaným DNS záznamom. Toto je váš DNS_RECORD_ID.

  2. Vytvorte základný skript Bash na aktualizáciu záznamu DNS: S potrebnými identifikátormi a tokenom môžete vytvoriť jednoduchý skript Bash na aktualizáciu záznamu DNS pomocou aktuálnej IP adresy.

    #!/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
         }'

    Tento skript aktualizuje DNS záznam s aktuálnou verejnou IP adresou. Nahraďte zástupné symboly skutočnými hodnotami.

  3. Vylepšiť skript tak, aby sa aktualizoval iba v prípade potreby: Ak sa chcete vyhnúť zbytočným aktualizáciám, vylepšite skript tak, aby pred aktualizáciou skontroloval, či sa IP adresa nezmenila. Aktualizujte tiež úplné cesty k ľubovoľnému príkazu v skripte, aby sa mohol spustiť s cron.

    #!/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

    Táto verzia skriptu kontroluje, či sa aktuálna IP adresa líši od IP adresy v DNS zázname. Aktualizuje DNS záznam iba v prípade, že sa zmenila IP adresa.

  4. Naplánujte skript pomocou Cronu: Ak chcete, aby bol váš DNS záznam automaticky aktuálny, naplánujte si spúšťanie skriptu v pravidelných intervaloch pomocou cron.

    $ crontab -eAdd the following line to run the script every 5 minutes:
    */5 * * * * /path/to/update_dns.sh
    
  5. Skript sa spustí každých 5 minút, čím sa zabezpečí, že akákoľvek zmena vašej dynamickej IP adresy sa okamžite prejaví vo vašich DNS záznamoch.

Záver

Vykonaním týchto krokov ste vytvorili spoľahlivé riešenie na udržanie vašej domény smerovanej na vašu dynamickú IP adresu. Tento skript automatizuje proces a eliminuje potrebu manuálnych aktualizácií pri každej zmene vašej IP adresy. Pomocou rozhrania API Cloudflare a malého skriptovania Bash môžete zabezpečiť, aby bola vaša doména vždy dostupná, bez ohľadu na to, ako často sa mení vaša IP adresa. Toto nastavenie je ideálne pre domáce servery, služby s vlastným hostingom alebo akýkoľvek scenár, kde by inak dynamická IP spôsobila bolesti hlavy.

Súvisiace články: