diff --git a/Dynamic_DNS/Cloudflare/update_cloudflare_ip.sh b/Dynamic_DNS/Cloudflare/update_cloudflare_ip.sh deleted file mode 100644 index d06502f..0000000 --- a/Dynamic_DNS/Cloudflare/update_cloudflare_ip.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/bash - -# Exit on error -set -e - -# --- Configuration --- -ENV_DIR="./zones" -LOG_DIR="./logs" -DATE=$(date +%F) -LOG_FILE="$LOG_DIR/update_${DATE}.log" - -# --- Ensure log directory exists --- -mkdir -p "$LOG_DIR" - -# --- Logging function --- -log() { - local message="$1" - echo "$message" | tee -a "$LOG_FILE" -} - -# --- Step 1: Get current IP from Mullvad --- -log "[*] Fetching IP from Mullvad..." -IP_INFO=$(curl -s https://ipv4.am.i.mullvad.net/json) -CURRENT_IP=$(echo "$IP_INFO" | jq -r '.ip') - -if [[ -z "$CURRENT_IP" ]]; then - log "[!] Failed to extract IP address." - exit 1 -fi - -log "[*] Current public IP is: $CURRENT_IP" -log "" - -# --- Step 2: Loop through all .env files --- -for ENV_FILE in "$ENV_DIR"/*.env; do - log "[*] Processing config: $ENV_FILE" - - # Load environment variables - set -a - source "$ENV_FILE" - set +a - - # Check for required variables - if [[ -z "$ZONE_ID" || -z "$DNS_RECORD_ID" || -z "$CLOUDFLARE_API_TOKEN" || -z "$DNS_NAME" ]]; then - log "[!] Missing required variables in $ENV_FILE" - log "" - continue - fi - - # --- Step 3: Get existing DNS record from Cloudflare --- - log "[*] Fetching current DNS record for $DNS_NAME..." - - DNS_RECORD=$(curl -s -X GET "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") - - EXISTING_IP=$(echo "$DNS_RECORD" | jq -r '.result.content') - - if [[ "$EXISTING_IP" == "$CURRENT_IP" ]]; then - log "[=] No update needed. $DNS_NAME already points to $CURRENT_IP" - log "" - continue - fi - - # --- Step 4: Update DNS record --- - log "[*] IP has changed: $EXISTING_IP → $CURRENT_IP" - log "[*] Updating Cloudflare DNS record..." - - UPDATE_RESPONSE=$(curl -s -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" \ - -d "{ - \"type\": \"A\", - \"name\": \"$DNS_NAME\", - \"content\": \"$CURRENT_IP\", - \"ttl\": 3600, - \"proxied\": true, - \"comment\": \"Auto-updated via script\" - }") - - SUCCESS=$(echo "$UPDATE_RESPONSE" | jq -r '.success') - - if [[ "$SUCCESS" == "true" ]]; then - log "[+] Successfully updated $DNS_NAME to $CURRENT_IP" - else - log "[!] Failed to update $DNS_NAME" - log "Cloudflare response:" - echo "$UPDATE_RESPONSE" | tee -a "$LOG_FILE" - fi - - log "" -done - diff --git a/Dynamic_DNS/Cloudflare/zones/subdomain.domain.com.env b/Dynamic_DNS/Cloudflare/zones/subdomain.domain.com.env deleted file mode 100644 index aa6e0b2..0000000 --- a/Dynamic_DNS/Cloudflare/zones/subdomain.domain.com.env +++ /dev/null @@ -1,5 +0,0 @@ -ZONE_ID="your_zone_id" -DNS_RECORD_ID="your_dns_record_id" -CLOUDFLARE_API_TOKEN="your_cloudflare_api_token" -DNS_NAME="subdomain.example.com" - diff --git a/Dynamic_DNS/Cloudflare/README.md b/Dynamic_DNS/Dynamic_DNS_Cloudflare/README.md similarity index 100% rename from Dynamic_DNS/Cloudflare/README.md rename to Dynamic_DNS/Dynamic_DNS_Cloudflare/README.md diff --git a/Dynamic_DNS/Cloudflare/logs/Here_Be_Logs b/Dynamic_DNS/Dynamic_DNS_Cloudflare/logs/Here_Be_Logs similarity index 100% rename from Dynamic_DNS/Cloudflare/logs/Here_Be_Logs rename to Dynamic_DNS/Dynamic_DNS_Cloudflare/logs/Here_Be_Logs diff --git a/Dynamic_DNS/Dynamic_DNS_Cloudflare/update_cloudflare_ip.sh b/Dynamic_DNS/Dynamic_DNS_Cloudflare/update_cloudflare_ip.sh new file mode 100644 index 0000000..e6702a8 --- /dev/null +++ b/Dynamic_DNS/Dynamic_DNS_Cloudflare/update_cloudflare_ip.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# Exit if any command fails +set -e + +# Directory containing all .env config files +ENV_DIR="./zones" + +# Fetch current IP from Mullvad +echo "[*] Fetching IP info from Mullvad..." +IP_INFO=$(curl -s https://ipv4.am.i.mullvad.net/json) +IP=$(echo "$IP_INFO" | jq -r '.ip') + +if [[ -z "$IP" ]]; then + echo "[!] Failed to extract IP address." + exit 1 +fi + +echo "[*] Current public IP is: $IP" +echo + +# Loop through all .env files in ENV_DIR +for ENV_FILE in "$ENV_DIR"/*.env; do + echo "[*] Processing config: $ENV_FILE" + + # Load environment variables + set -a + source "$ENV_FILE" + set +a + + # Check required variables + if [[ -z "$ZONE_ID" || -z "$DNS_RECORD_ID" || -z "$CLOUDFLARE_EMAIL" || -z "$CLOUDFLARE_API_KEY" || -z "$DNS_NAME" ]]; then + echo "[!] Missing required variables in $ENV_FILE" + continue + fi + + # Make the API request + echo "[*] Updating Cloudflare record for $DNS_NAME..." + + UPDATE_RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID" \ + -H "Content-Type: application/json" \ + -H "X-Auth-Email: $CLOUDFLARE_EMAIL" \ + -H "X-Auth-Key: $CLOUDFLARE_API_KEY" \ + -d '{ + "name": "'$DNS_NAME'", + "ttl": 3600, + "type": "A", + "comment": "Domain verification record", + "content": "'$IP'", + "proxied": true + }') + + + SUCCESS=$(echo "$UPDATE_RESPONSE" | jq -r '.success') + + if [[ "$SUCCESS" == "true" ]]; then + echo "[+] $DNS_NAME updated successfully!" + else + echo "[!] Failed to update $DNS_NAME." + echo "Cloudflare response:" + echo "$UPDATE_RESPONSE" + fi + + echo +done + diff --git a/Dynamic_DNS/Dynamic_DNS_Cloudflare/zones/subdomain.domain.com.env b/Dynamic_DNS/Dynamic_DNS_Cloudflare/zones/subdomain.domain.com.env new file mode 100644 index 0000000..bdb6aee --- /dev/null +++ b/Dynamic_DNS/Dynamic_DNS_Cloudflare/zones/subdomain.domain.com.env @@ -0,0 +1,5 @@ +ZONE_ID="abc123zoneid" +DNS_RECORD_ID="def456recordid" +CLOUDFLARE_EMAIL="you@example.com" +CLOUDFLARE_API_KEY="your_api_key_here" +DNS_NAME="subdomain.example.com"