http://www.williamsang.com/archives/1557.html
DNSPOD是一家提供域名解析的服务商。基本功能免费,国内名气算是比较大的。
最近想在外网访问一个拨号上网的服务器。大家都知道拨号上网每次IP都有可能变动。所以需要实现动态域名解析,而DNSPOD提供了修改域名解析的接口,我使用提供的接口写了一个程序。再利用Linux自带的crontab定期检查IP,实现动态域名解析。
原理其实就是比较本机的广域网IP地址和DNSPOD上注册的IP地址是否一致,不一致则利用DNSPOD的API修改成为现在的IP地址。本文主要介绍如何使用此程序,本文将tk.williamsang.com解析到一个拨号上网电脑上。
源代码我已经放到github上,地址:
https://github.com/William-Sang/ddns
使用前提:
- 你在DNSPOD上注册了域名,本文是 williamsang.com
- 你想要映射的记录已经在DNSPOD上建好了,本文建的是 tk
- 你的操作系统为Linux,安装好了PHP环境。
- 你的家用路由器是断线自动连接的(不然连网都没有还搞什么。。。)
域名相关内容查看DNSPOD帮助,介绍的很详细,如下图。
程序试运行
在Linux环境下,假设现在的目录为/data/www:
1
2
|
# git clone git@github.com:William-Sang/ddns.git
# cd ddns/
|
修改配置文件:改成你在DNSPOD的用户名密码,和你的域名、记录(可以当作子域名)。
1
|
# vim conf.php
|
示例如下:
1
2
3
4
5
6
7
|
//在此填写你的DNSPOD 登录email,和密码
define(
'LOGIN_EMAIL'
,
'william@williamsang.com'
);
define(
'LOGIN_PASSWORD'
,
'bugaosuni'
);
//再次填写你需要映射的域名,记录
define(
'DOMAIN'
,
'williamsang.com'
);
define(
'RECORD'
,
'tk'
);
|
此时程序地址为:/data/www/ddns/index.php
假设你的PHP程序安装位置为:/usr/local/server/php/bin/php
则尝试执行(如果不一样,这替换为你的实际执行环境):
1
|
# /usr/local/server/php/bin/php /data/www/ddns/index.php
|
下图为:服务器现在地址和DNSPOD注册地址一样的运行情况。
下图为:服务器现在地址和DNSPOD注册地址不一样的运行情况。
你可以通过在DNSPOD网站上修改解析、查看记录来验证程序。
注意:
- 修改DNS解析记录需要一定生效时间,所以可能需要几分钟才会生效。
配置crontab
配置crontab,让Linux定时自动执行此程序
关于cron的使用请参看: Linux 定时重复执行任务 crontab 命令详解。
DNSPOD的接口调用是有次数限制的,如果账号尝试登录错误次数在5分钟内超过30次则会被禁止登录一个小时。以下5分钟调用一次,你也可以1分钟调用一次也没问题哈。
1
2
3
4
|
# crontab -e
此时输入一下内容,每五分钟运行一次,也可以设置小一点。
5/* * * * *
/usr/local/server/php/bin/php
/data/www/ddns/index
.php
# service crond restart
|
使用PING命令验证域名是否生效,PING命令返回该域名IP,或者你搭建配置好HTTP服务器,直接用域名访问测试效果:
- OKAY结束啦,总结来说就是使用crontab定期运行此PHP脚本。