提示:此脚本已失效,请查看新教程https://www.shiyanhe.com/149.html。
如果买了动态VPS,IP会经常改变。这时,就可以设置DDNS来获取动态IP。比如,设置后,我可以用ddns.zhaozhu.net获取自己VPS的最新IP。
获取API
以shiyanhe.com域名为例,在CloudFlare按提示添加域名shiyanhe.com和对应的A记录ddns.shiyanhe.com,TTL可设为2分钟。注意,DDNS使用的域名不要开启CloudFlare的CDN。
前往https://www.cloudflare.com/a/profile获取API,把API一长串字符复制保存。
获取脚本
下载脚本https://gist.github.com/larrybolt/6295160/raw/c634c48c001a411240fc78147949a6a32e1de370/cf-ddns.sh 到/usr/local/bin目录:
curl https://gist.githubusercontent.com/larrybolt/6295160/raw > /usr/local/bin/cf-ddns.sh && chmod +x /usr/local/bin/cf-ddns.sh
配置
打开脚本进行配置:
vi /usr/local/bin/cf-ddns.sh
需要修改以下内容:
# 输入前面获取的API
CFKEY=nvake8vn8ak8en8fjka88bnfe
# 输入Zone name,如shiyanhe.com
CFZONE=shiyanhe.com
# 输入域名的id,如果不知道可先不填,运行一次脚本获取对应的id后再填入
CFID=
# 输入CloudFlare的账号邮箱,如user@example.com
CFUSER=user@example.com
# 设置需要更新的Hostname,如ddns.shiyanhe.com
CFHOST=ddns.shiyanhe.com
# 设置Cloudflare TTL,单位是秒,可填120到86400间的数值
CFTTL=120
输入bash /usr/local/bin/cf-ddns.sh
运行脚本,会显示:
bash cf-ddns.sh
No file, need IP
Missing DNS record ID
fetching from Cloudflare...
=> Incorrect zone, or zone doesn't contain the A-record ddns.shiyanhe.com!
listing all records for zone acg.al:
ID RECORD TYPE
133333332 shiyanhe.com "A"
133333333 ddns.shiyanhe.com "A"
133333334 www.shiyanhe.com "A"
这时,把DDNS使用的域名对应的ID填入刚才提到的CFID中,例如这里是CFID=133333333
。保存退出后,再运行一遍cf-ddns.sh,如果显示如下内容,则代表配置成功:
bash cf-ddns.sh
No file, need IP
Updating DNS to 9.9.9.9
Updated succesfuly!
crontab定时运行
脚本配置成功后,需要让它定时运行,这里设置每10分钟运行一次cf-ddns.sh脚本。输入crontab -e
,然后会有个vi编辑界面,在里面添加一行:
*/10 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1
crontab的用法建议参考http://man.linuxde.net/crontab,涵盖了crontab服务状态的启动、重启、查看、简单配置等。另外也可以看看http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html和http://www.runoob.com/linux/linux-comm-crontab.html。
参考
cloudflare-update-record.sh同样可设置DDNS,配置也比较简单。
本文参考了PumpCloud的教程。
备注
有人提及换了域名再操作提示WAN IP Unchanged, to update anyway use flag -f true
,这是因为脚本是检测到IP发生变化后,才会更新CloudFlare的DNS。可以先手动在CloudFlare改dns,下一次换IP时,脚本就会自动修改更新CF的DNS(前提是设了crontab定时运行)。
如果有问题,欢迎留言。