2018年11月3日星期六

利用CloudFlare设置Dynamic DNS(DDNS)获取动态IP

如果买了动态 IP 的 VPS 或服务器,IP 会经常改变。这时,就可以通过 DDNS 来获取动态 IP。部分商家可能不提供 DDNS,需要自己搭建。




下面以提供免费域名的网站freenom.com为例,详细说下整体教程。


一,登录注册免费域名提供网站freenom.com  具体如何注册,自行研究。

二,注册登录freenom.com,然后申请免费域名,期限为一年,到期后手动续申请免费一年。我申请到一个免费域名free-ssr.ga,并以这个免费域名为例,介绍整体教程。

三,注册登录Cloudflare.com

四,将域名free-ssr.ga 的域名DNS服务器改成 CloudFlare的。在CloudFlare的仪表板添加域名free-ssr.ga.按照添加步骤一步步走下去。

添加完成之后,回到仪表板,

将nameservers添加到free-ssr.ga的freenom.com的域名服务器中。


添加完成之后等待域名解析,域名解析成功之后会有邮件通知。


五,解析成功之后,回到CloudFlare仪表板,点击DNS,增加对应域名的 A 记录 free-ssr.ga  
TTL 可设为 2 分钟或自动。注意,DDNS 使用的域名不要开启 CloudFlare 的 CDN,只用 CF 的 DNS 解析功能,也就是 status 一列对应域名的图标要是灰色的。


添加好域名解析后,前往https://www.cloudflare.com/a/profile获取 Global API,把 API 一长串字符复制保存下来。注意,这串 API 不要泄露给其他人。

_________________________________________________________________________________________________________

Shell 脚本

获取脚本

得到 API 后,在 VPS 中下载脚本到/usr/local/bin 目录,把脚本命名为 cf-ddns.sh,并修改脚本的权限:
curl https://gist.githubusercontent.com/benkulbertis/fff10759c2391b6618dd/raw > /usr/local/bin/cf-ddns.sh && chmod +x /usr/local/bin/cf-ddns.sh

一般系统都会带有 curl,但如果出错,就需要先安装 curl,具体安装方法可以谷歌或百度一下。

配置

打开脚本进行配置:
vi /usr/local/bin/cf-ddns.sh
找到以下内容并修改:
auth_email="user@example.com"
auth_key="c2547eb745079dac9320b638f5e225cf483cc5cfdda41" # found in cloudflare account settings
zone_name="example.com"
record_name="www.example.com"

其中,在 auth_email 中填入 CloudFlare 账号的邮箱,在 auth_key 输入前面获取的 API,zone_name 填入域名 zhaozhuji.net,record_name 填入 DDNS 的域名 ddns.zhaozhuji.net。
修改完后,保存退出。输入bash /usr/local/bin/cf-ddns.sh运行脚本,如果提示IP changed to: X.X.X.X,表明配置成功。

crontab 定时运行

脚本配置成功后,需要让它定时运行。这里设置每 10 分钟运行一次 cf-ddns.sh 脚本。
输入crontab -e,然后会弹出 vi 编辑界面,在里面添加一行:
*/10 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1

保存并退出。输入service crond status,可以看到 contab 的运行状态。如果 contab 服务没有打开,建议参考http://man.linuxde.net/crontab教程,它涵盖了 crontab 服务状态的启动、重启、查看、简单配置等内容。另外也可以看看http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.htmlhttp://www.runoob.com/linux/linux-comm-crontab.html

日志文件

脚本获取 IP 更改 CloudFlare 的 DNS 记录后,会在目录中生成 ip.txt、cloudflare.ids 和 cloudflare.log 三个文件。ip.txt 记录的是本机的 IP。脚本自动获取到 IP 后,会先与 ip.txt 中的 IP 进行比较,当不一致时(检测到 IP 发生变化),才会更新 CloudFlare 的 DNS 记录,并且把新 IP 写入 ip.txt 文件中。如果 IP 没变化,运行脚本会提示IP has not changed。如果要强制运行脚本更新 DNS 记录,可以rm /usr/local/bin/ip.txt删除掉 ip.txt。
如果运行忽然出问题,可以试试rm /usr/local/bin/cloudflare.ids把 cloudflare.ids 文件和 ip.txt 文件删除掉,再重新运行脚本。

Python 脚本

获取脚本


curl https://raw.githubusercontent.com/AmirAzodi/cloudflare_ddns/master/cf-ddns.py > /usr/local/bin/cf-ddns.py && curl https://raw.githubusercontent.com/AmirAzodi/cloudflare_ddns/master/cf-ddns.conf > /usr/local/bin/cf-ddns.conf && chmod +x /usr/local/bin/cf-ddns.py

配置

打开配置文件:
vi /usr/local/bin/cf-ddns.conf

按提示修改以下内容:

{
"domains": [
{
"hosts": [
{
"id": "",
"ipv4": "",
"ipv6": "",
"name": "ddns", #以 ddns.zhaozhuji.net 为例,此处填入 ddns
"types": ["A"]
}
],
"id": "",
"name": "zhaozhuji.net" #以 ddns.zhaozhuji.net 为例,此处填入 zhaozhuji.net
}
],
"user": {
"api_key": "CLOUDFLARE_API_KEY_HERE", #填入 API
"email": "CLOUDFLARE_EMAIL_HERE" #填入 CloudFlare 邮箱
}
}
保存并退出,输入python /usr/local/bin/cf-ddns.py运行脚本,如果提示内容有update successful,表明运行成功。

crontab 定时运行

跟第一个脚本类似,输入crontab -e,然后会弹出 vi 编辑界面,在里面添加一行:
*/10 * * * * /usr/local/bin/cf-ddns.py >/dev/null 2>&1


原文引用    https://www.zhaozhuji.net/149.html
















没有评论:

发表评论

︿
Top