家中因為只有浮動IP,若要替網站主機實現DDNS可能需要路由設備支援或者是安裝專用的客戶端軟體(如:ddclient),而我的domain是透過cloudflare代管的,自然就利用了cloudflare所提供的API來處理此事了。
1. 確認API key
前往cloudflare官網查詢自己的API key
透過API查詢domain相關參數
[root@centos6 ~]# curl https://www.cloudflare.com/api_json.html -d 'a=rec_load_all' -d 'tkn=824ef65292b33a24c1d249de2566a7785d6ee' -d 'email=2@gmail.com' -d 'z=m.com.tw'
2. 解析domain的相關參數
透過任一線上json解析工具來閱讀API查詢後的結果,從objs集合裡找到你想要設定的網域主機名稱(需事先於cloudflare設定該筆A Record),並擷取所需的rec_id、display_name和type這三個參數的內容。
溫馨提示:[
json線上解析工具]
3. 編寫script自動化更新網域的A Record
查詢本身的對外IP後、若已浮動則同步更新A Record至cloudflare
[root@centos6 ~]# nano /root/script/cloudflare_ddns.sh
#!/bin/bash
NEW_IP=`curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
NOWTIME=`date`
CURRENT_IP=`cat /var/tmp/current_ip.txt`
LOG_FILE="/root/script/cloudflare_ddns.log"
IP_FILE="/var/tmp/current_ip.txt"
echo $NOWTIME >> $LOG_FILE
if [ "$NEW_IP" = "$CURRENT_IP" ] || [ ! $NEW_IP ]
then
echo "No Change in IP Adddress" >> $LOG_FILE
else
curl https://www.cloudflare.com/api_json.html \
-d 'a=rec_edit' \
-d 'tkn=824ef65292b33a24c1d249de2566a7785d6ee' \
-d 'email=2@gmail.com' \
-d 'z=m.com.tw' \
-d 'id=742674400' \
-d 'type=A' \
-d 'name=tomyhome' \
-d 'ttl=1' \
-d "content=$NEW_IP" \
>> $LOG_FILE
echo "" >> $LOG_FILE
echo $NEW_IP > $IP_FILE
fi
# 第二行的部分若要更換查詢外網的網站,則sed指令也需對應做修改
# 第六行在每次script被執行後都會產生log以便日後查核ddns更新狀況
# tkn參數對應的是你的API key
# email參數對應的是你cloudflare的帳戶名稱
# z參數對應的是你所申請的主網域名稱如:m.com.tw(非www.m.com.tw)
# id參數對應的是你所要命名的網域主機名稱對應ID
# name參數對應的是你所要命名的網域主機名稱如:tomyhome(tomyhome.m.com.tw)
透過crontab定時執行script,檢查浮動IP是否有變更(此範例設置為每6小時確認一次)
[root@centos6 ~]# nano /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 */6 * * * root /root/script/cloudflare_ddns.sh
本文內容參考自Lifely.today。
來自台灣的系統工程師,一直熱衷於 Open source 相關技術的學習、建置、應用與分享。
0 Comments:
張貼留言