메인 항목으로

Cloudflare 용

아래 스크립트로 sh 작성 후 스케쥴러에 등록합니다.

붉은 부분만 사용자 환경에 맞게 수정해 주시면 됩니다.

#!/bin/bash
### CloudFlare A Recoard Updater
### A_Record : Separate the contents with commas (,)
### Proxied : true or false
### TTL : Between 120 and 2147483647 seconds, or 1 for automatic
### To force updating, run with -f
Login_Email=CLOUDFLARE_EMAIL_ID
Global_API_Key=CLOUDFLARE_GLOBAL_API_KEY
Domain=DOMAIN
A_Record=A_RECORD주소
Proxied=false
TTL=1
[ ! -f /var/tmp/ip.txt ] && touch /var/tmp/ip.txt
CIP=$(curl -s "https://ipv4.icanhazip.com/")
PIP=$(cat /var/tmp/ip.txt)
echo -e "CloudFlare A Recoard Updater v1.0.9"
echo -e "Current IP: $CIP"
echo -e "Previous IP: $PIP"
if [ "$CIP" == "$PIP" ] && [[ $1 != "-f" ]]; then
  echo "No need to update"; exit 0
elif [[ $1 == "-f" ]]; then
  echo "Force updating A recoard......"
elif [ "$CIP" != "$PIP" ]; then
  echo "Updating A recoard......"
fi
echo $CIP > /var/tmp/ip.txt
V4="https://api.cloudflare.com/client/v4/zones"
H1="-HX-Auth-Email:$Login_Email"
H2="-HX-Auth-Key:$Global_API_Key"
H3="-HContent-Type:application/json"
ZN=$(curl -s -X GET "$V4?name=$Domain" \
    $H1 $H2 $H3 | grep -Po '(?<="id":")[^"]*' | head -1)
string=$A_Record
IFS=',' ARARY=(${string})
function AID() {
  for AREC in "${ARARY[@]}"
    do
      (curl -s -X GET "$V4/$ZN/dns_records?name=$AREC" \
      $H1 $H2 $H3 | grep -Po '(?<="id":")[^"]*' | head -1)
    done
}
IFS=$'\n' AIDARY=($(AID))
ATOTAL=${#ARARY[*]}
for ((i=0; i<$ATOTAL; i++))
  do
    (curl -s -X PUT "$V4/$ZN/dns_records/${AIDARY[$i]}" $H1 $H2 $H3 \
    --data "{\"type\":\"A\",\"name\":\"${ARARY[$i]}\",\"content\":\"$CIP\",\"proxied\":$Proxied,\"ttl\":$TTL}" \
    | grep -Po '(?<="name":")[^"]*|(?<="content":")[^"]*|(?<=Z"},)[^}]*|(?<="success":false,)[^$]*|(?<=\s\s)[^$]*' | xargs)
  done