การเปลี่ยน IP ของ DNS บน Cloudflare ด้วย Bash Script

 

หลายคนคงได้เคยใช้ Dynamic DNS ของหลายๆ ค่ายมาแล้ว ทั้งฟรี และ เสียเงิน

แต่วันนี้จะแนะนำการใช้งานโดเมนของตัวเองที่มีอยู่ โดยที่โดเมนนั้นมีการใช้ DNS ซึ่งเป็นบริการของ Cloudflare

สำหรับวิธีการก็แค่สร้างไฟล์นี้ขึ้นมา แก้ไขค่านิดหน่อย จากนั้นก็เป็นอันสำเร็จ

 

#!/bin/bash

# A bash script to update a Cloudflare DNS A record with the external IP of the source machine
# Used to provide DDNS service for my home
# Needs the DNS record pre-creating on Cloudflare

# Proxy - uncomment and provide details if using a proxy
#export https_proxy=http://<proxyuser>:<proxypassword>@<proxyip>:<proxyport>

# Cloudflare zone is the zone which holds the record
zone=example.com
# dnsrecord is the A record which will be updated
dnsrecord=www.example.com

## Cloudflare authentication details
## keep these private
[email protected]
cloudflare_auth_key=1234567890abcdef1234567890abcdef

# Get the current external IP address
ip=$(curl -s -X GET https://checkip.amazonaws.com)

echo "Current IP is $ip"

if host $dnsrecord 1.1.1.1 | grep "has address" | grep "$ip"; then
  echo "$dnsrecord is currently set to $ip; no changes needed"
  exit
fi

# if here, the dns record needs updating
# get the zone id for the requested zone
zoneid=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone&status=active" \
  -H "X-Auth-Email: $cloudflare_auth_email" \
  -H "X-Auth-Key: $cloudflare_auth_key" \
  -H "Content-Type: application/json" | jq -r '{"result"}[] | .[0] | .id')

echo "Zoneid for $zone is $zoneid"

# get the dns record id
dnsrecordid=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zoneid/dns_records?type=A&name=$dnsrecord" \
  -H "X-Auth-Email: $cloudflare_auth_email" \
  -H "X-Auth-Key: $cloudflare_auth_key" \
  -H "Content-Type: application/json" | jq -r '{"result"}[] | .[0] | .id')

echo "DNSrecordid for $dnsrecord is $dnsrecordid"

# update the record
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zoneid/dns_records/$dnsrecordid" \
  -H "X-Auth-Email: $cloudflare_auth_email" \
  -H "X-Auth-Key: $cloudflare_auth_key" \
  -H "Content-Type: application/json" \
  --data "{\"type\":\"A\",\"name\":\"$dnsrecord\",\"content\":\"$ip\",\"ttl\":1,\"proxied\":false}" | jq

เพียงเท่านี้ ก็มี DDNS ส่วนตัวฟรีๆ ด้วยบริการจาก Cloudflare ใช้งานกันแล้ว :D

 

อ้างอิง :  cloudflare-ddns-update.sh