Categories: 域名解析

利用cloudfare的dynamic dns绑定动态ip

背景:

今天在anyhk VPS供应商购得一款没有公网ip的主机,外网访问必须通过公网ip共享端口nat访问到内网主机,所以这里我必须把内网ip绑定到一个固定域名(动态ip就是随时会变化的ip地址),通过域名访问内网主机

解决思路:

域名API密匙获取

1,首先登录cloudfare官网,将自己的域名(比如我的站点域名:www.yugogo.xyz)托管由cloudfare解析。

2,其次,点击页面右上角的个人账户,点击个人资料即可详见下页。https://www.cloudflare.com/a/profile

3,点击“view”按钮,即可获取当前域名的API密匙,(注意:API不可泄漏给他人)

shell脚本获取

首先,利用ssh登录vps终端,将其下列命令复制粘贴到终端运行。

curl https://gist.githubusercontent.com/benkulbertis/fff10759c2391b6618dd/raw > /usr/local/bin/cf-ddns.sh 
chmod +x /usr/local/bin/cf-ddns.sh

如果运行报错,检查vps是否没有装curl命令,没有装,请百度搜搜。

shell脚本配置

1,将下载好的脚本(/usr/local//usr/local/bin/cf-ddns.sh),进行配置更改,

vi /usr/local/bin/cf-ddns.sh

2,找到一下代码将其改为自己的配置,

auth_email="user@example.com"
auth_key="c2547eb745079dac9320b638f5e225cf483cc5cfdda41" # found in cloudflare account settings
zone_name="example.com"
record_name="www.example.com"

auth_email=改为自己在cloudfare账户邮箱,auth_key=改为cloudfare的API密匙,zone_name=改为解析的一级域名,(注意:不是二级域名,比如我的一级域名:yugogo.xyz),record_name=改为即将解析的二级域名(比如我的二级域名:www.yugogo.xyz)
修改好配置,输入英文的冒号+wq保存退出即可。

shell脚本运行

bash /usr/local/bin/cf-ddns.sh

如果运行脚本后,提示:IP changed to: X.X.X.X,说明脚本运行成功,域名能够解析到此ip。

crontab定时运行

在终端输入crontab -e,此时进入vi编辑界面,添加以下代码:

*/20 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2> &1

每隔20分钟,自动运行cf-ddns.sh脚本。这样当动态ip变化后,系统将会在20分钟内自动把ip告知域名解析服务器,完成动态ip的解析。
输入:service crond status即可看到crond运行状态。

日志状态

脚本获取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文件删除掉,再重新运行脚本。

Little yu

Share
Published by
Little yu