求证实此方法可行不(花生壳DDNS)
本帖最后由 jsllb1986 于 2015-2-28 14:06 编辑SHELL脚本实现DDNS(动态域名服务),以花生壳为例
由于路由器空间有限(未经改装,不支持USB),安装完其他软件包之后就没有多少剩余空间了。
于是,就萌生了用SHELL脚本来实现DDNS的想法,因为SHELL脚本最节省空间。
把此脚本上传到路由器中(不能是临时目录),在启动脚本和crond配置文件中设置运行即可。
此脚本在 OpenWrt Backfire 10.03.1固件版本下测试通过。
第一种方法,脚本内容如下:
#!/bin/sh -
USER="用户名"
PASS="密码"
DOMAIN="域名"
URL="http://${USER}:${PASS}@ddns.oray.com:80/ph/update?hostname=${DOMAIN}" # 花生壳的DDNS服务地址
# 如果不存在/tmp/oray目录,就创建该目录
if [ ! -d /tmp/oray ]; then
mkdir /tmp/oray
fi
# 如果存在/tmp/oray/ip文件,就获取之前保存的WAN接口IP地址,没有默认为none
if [ -f /tmp/oray/ip ]; then
old_ip=`cat /tmp/oray/ip`
else
old_ip="none"
fi
# 获取当前WAN接口IP地址,IP地址是变化的(废话 ^_^)
current_ip=$(uci -P /var/state get network.wan.ipaddr)
# 把当前WAN接口IP地址写入/tmp/oray/ip,不管IP地址是否已变化
echo ${current_ip} > /tmp/oray/ip
# 如果当前WAN接口IP地址与之前保存的不相同(说明WAN接口IP地址已变化),就更新动态域名的IP地址
# 并把返回的结果保存到/tmp/oray/info文件,因为可能会失败
if [ "${old_ip}" != "${current_ip}" ] ; then
wget -q -O /tmp/oray/info -q ${URL}
exit
fi
if [ ! -f /tmp/oray/info ]; then
touch /tmp/oray/info
fi
通过返回的结果,判断上次更新是否成功
req=`cat /tmp/oray/info | grep good`
# 如果上次更新失败,那么再次更新动态域名的IP地址
if [ -z "${req}" ]; then
wget -q -O /tmp/oray/info -q ${URL}
fi
第二种方法,脚本内容如下:
#!/bin/sh -
USER="用户名"
PASS="密码"
DOMAIN="域名"
URL="http://${USER}:${PASS}@ddns.oray.com:80/ph/update?hostname=${DOMAIN}"
nslookup ${DOMAIN} > /tmp/oray
old_ip=`cat /tmp/oray |tail -1| awk '{ print $3}'`
current_ip=$(uci -P /var/state get network.wan.ipaddr)
if [ "${old_ip}" != "${current_ip}" ] ; then
# 最好指定一下输出文件路径,否则会把返回结果保存到家目录下
wget -q -O /tmp/ddns -q ${URL}
fi
第三种方法,脚本内容如下:
#!/bin/sh -
USER="用户名"
PASS="密码"
DOMAIN="域名"
URL="http://${USER}:${PASS}@ddns.oray.com:80/ph/update?hostname=${DOMAIN}"
if [ -f /tmp/ddns ]; then
current_ip=$(uci -P /var/state get network.wan.ipaddr)
req=`cat /tmp/ddns| grep "${current_ip}"`
if [ ! -z "${req}" ]; then
old_ip=`echo ${req}| awk '{ print $2}'`
if [ "${old_ip}" = "${current_ip}" ]; then
exit
fi fi
fi
wget -q -O /tmp/ddns -q ${URL}
总结:三种方法都能解决问题,第一种方法思路陈旧、罗嗦;第二种方法虽然简洁,但由于IP地址更新后,不会立即在本地DNS服务器生效,所以会造成过度更新的问题;第三种方法没有以上缺点。
引用此处文章1 文章2
笑脸是什么符号? 本帖最后由 ttever 于 2015-3-15 15:35 编辑
:$ 是两个红色字符 :和$
页:
[1]