From 3f54d187730ba18109b0946ed7bc142da36259bd Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Wed, 27 Oct 2021 05:53:11 +0500 Subject: [PATCH] CF-DDNS --- cf-ddns/README.md | 4 ++++ cf-ddns/cfddns.sh | 44 +++++++++++++++++++++++++++++++++++++++++++ cf-ddns/env.sample | 8 ++++++++ cf-ddns/run-cdddns.sh | 4 ++++ 4 files changed, 60 insertions(+) create mode 100644 cf-ddns/README.md create mode 100644 cf-ddns/cfddns.sh create mode 100644 cf-ddns/env.sample create mode 100644 cf-ddns/run-cdddns.sh diff --git a/cf-ddns/README.md b/cf-ddns/README.md new file mode 100644 index 0000000..21b08c6 --- /dev/null +++ b/cf-ddns/README.md @@ -0,0 +1,4 @@ +# Cloudflare DDNS + +## Requirements +`bash curl jq screen` diff --git a/cf-ddns/cfddns.sh b/cf-ddns/cfddns.sh new file mode 100644 index 0000000..e056c29 --- /dev/null +++ b/cf-ddns/cfddns.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +#Import Credentials +source .env 2> /dev/null + +fetchzoneid(){ + FETCHZONEID=$(curl -s $CF_API_URL/zones?name=$CF_ROOT_ZONE \ + -H Content-Type:application/json \ + -H X-Auth-Key:$CF_API_KEY \ + -H X-Auth-Email:$CF_EMAIL) + CF_ZONE_ID=$(echo $FETCHZONEID | jq -r '.result | .[] | .id') +} + +fetchdnsid(){ + FETCHDNSID=$(curl -s $CF_API_URL/zones/$CF_ZONE_ID/dns_records?name=$CF_DOMAIN \ + -H Content-Type:application/json \ + -H X-Auth-Key:$CF_API_KEY \ + -H X-Auth-Email:$CF_EMAIL) + CF_DNS_ID=$(echo $FETCHDNSID | jq -r '.result | .[] | .id') +} + +getip(){ + MY_IP=$(curl -s $WHATISMYIP) +} +getdatetime(){ + TIME=$(date) +} +updateip(){ + curl -s -X PUT $CF_API_URL/zones/$CF_ZONE_ID/dns_records/$CF_DNS_ID \ + -H Content-Type:application/json \ + -H X-Auth-Key:$CF_API_KEY \ + -H X-Auth-Email:$CF_EMAIL \ + --data '{"type":"A","name":"'${CF_DOMAIN}'","content":"'${MY_IP}'","ttl":120,"proxied":false}' > /dev/null +} + +fetchzoneid +fetchdnsid +while true; do + getip + updateip + getdatetime + (echo $MY_IP - $TIME) | tee -a ip.log + sleep $DELAY +done diff --git a/cf-ddns/env.sample b/cf-ddns/env.sample new file mode 100644 index 0000000..9f8f5f9 --- /dev/null +++ b/cf-ddns/env.sample @@ -0,0 +1,8 @@ +CF_ROOT_ZONE='' # Root domain +CF_EMAIL='' #Cloudflare Login email +CF_API_KEY='' #Cloudflare API Key, get it here https://dash.cloudflare.com/profile/api-tokens +CF_DOMAIN='' # Domain to change IP address of +DELAY='600' #Defines how often to check and update IP address + +WHATISMYIP='https://whatismyip.shihaam.me' #Any website that returns vistor IP address +CF_API_URL='https://api.cloudflare.com/client/v4' #prolly dont need to change this diff --git a/cf-ddns/run-cdddns.sh b/cf-ddns/run-cdddns.sh new file mode 100644 index 0000000..61b7c7d --- /dev/null +++ b/cf-ddns/run-cdddns.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 +screen -S ddns -p 0 -X quit +screen -S "ddns" -U -m -d bash update-home-ip-cf.sh