我在使用/etc/init.d/ddns restart重启命令是,总是遇到错误,网上的解决方法很多,但是不一定都适用。我教大家一个方法,可借鉴修复(我的是华为HG255D设备)。
首先进/etc/config/ddns进行编辑,贴上代码:
config 'goble' option 'enabled' '1' //1为打开DDNS,0为关闭 option 'check_interval' '999999' //999999分钟更新一次,当然可以自己设置 config 'service' option 'service_name' 'oray.com' //使用花生壳解析,如果使用3322就输入3322.org option 'domain' 'www.lizhanying.net' //解析域名为www.lizhanying.net option 'username' 'lizhanying' //用户名为lizhanying option 'password' '123456' //密码为123456 option 'enabled' '1' //1为打开,0为关闭 option 'ip_network' 'wan' //使用wan口ip option 'ipaddr' '117.141.25.20' //ip地址,会自动更新,无需理会 option 'uptime' 'Sat Apr 12 13:50:15 2014' //上一次更新时间
打开/usr/lib/ddns/dynamic_dns_updater.sh进行编辑,当然,建议先备份。打开后将里面的文字全部删除,并粘贴我下面的代码即可,保存并退出。使用/etc/init.d/ddns restart命令即可更新,更新有延迟,请等几分钟再用nslookup命令查询。
. /etc/functions.sh
INTERFACE=${INTERFACE}
update_ipaddress(){
[ -n "$service_name" ]&&update_url=$(cat /usr/lib/ddns/services |grep $service_name|awk -F " " '{print $2}')
# neiwang
[ "$neiwang" == "1" ]&& {
if [ -n "$ip_network" ]; then
num=`echo $ip_network | tr -d "wan"`
if [ -z $num ] ; then num=0; fi
wanrule=$((($num+1)*10))
fi
local ddnsipd=$(cat /tmp/ddnsipd)
[ -n "$ddnsipd" ]&& eval $ddnsipd
iptables -t mangle -A ASSIGNOUT -d www.3322.org -j MARK --set-mark $wanrule
iptables -t mangle -A ASSIGNOUT -d checkip.dyndns.org -j MARK --set-mark $wanrule
#http://www.3322.org/dyndns/getip
echo "iptables -t mangle -D ASSIGNOUT -d www.3322.org -j MARK --set-mark $wanrule" >/tmp/ddnsipd
echo "iptables -t mangle -D ASSIGNOUT -d checkip.dyndns.org -j MARK --set-mark $wanrule" >/tmp/ddnsipd
[ $(echo $service_name |grep -v 3322 ) ]||ipaddr=$( echo `wget -q -O- http://www.3322.org/dyndns/getip`|grep -o "$ip_regex")
[ $(echo $service_name |grep -v dyndns ) ]|| ipaddr=$(echo `wget -q -O- http://checkip.dyndns.org/`|grep -o "$ip_regex")
}
#change username
update_url=$(echo $update_url | sed s/"\[USERNAME\]"/"$username"/g)
#change password
update_url=$(echo $update_url | sed s/"\[PASSWORD\]"/"$password"/g)
#change domain
update_url=$(echo $update_url | sed s/"\[DOMAIN\]"/"$domain"/g)
#change ipaddr
update_url=$(echo $update_url | sed s/"\[IP\]"/"$ipaddr"/g)
#delete ""
update_url=$(echo $update_url | sed s/"\""/""/g)
#update ipaddr
echo "wget -q -O- $update_url"
wget -t 2 -T 10 -q -O- $update_url
nowtime=`date +%c`
#echo `wget -q -O- http://checkip.dyndns.org/`|grep -o "$ip_regex"
uci set ddns.$section.uptime="$nowtime"
uci set ddns.$section.ipaddr="$ipaddr"
uci commit ddns
}
ddns_goble_get(){
config_get enabled $1 enabled
config_get check_interval $1 check_interval
# echo "1=$enabled 2=$check_interval"
if [ "$enabled" == "1" -a "$check_interval" != "0" ]; then
[ -z "$(cat /etc/crontabs/root| grep ddns_scheduler)" ]&&echo "*/${check_interval} * * * * /usr/lib/ddns/dynamic_dns_updater.sh scheduler #ddns_scheduler#" >> /etc/crontabs/root
[ -z "$(cat /tmp/tmp_crontab | grep ddns_scheduler)" ]&&echo "*/${check_interval} * * * * /usr/lib/ddns/dynamic_dns_updater.sh scheduler #ddns_scheduler#" >> /tmp/tmp_crontab
[ $(ps | grep crond | grep -v grep | wc -l ) == 0 ] && /etc/init.d/cron restart
else
[ -n "$(cat /tmp/tmp_crontab| grep ddns_scheduler)" ]&& sed -i -e '/ddns_scheduler/d' /tmp/tmp_crontab
[ -n "$(cat /etc/crontabs/root| grep ddns_scheduler)" ]&& sed -i -e '/ddns_scheduler/d' /etc/crontabs/root
fi
}
ddns_service_get(){
unset ipaddr
unset update_url
config_get enabled $1 enabled
config_get neiwang $1 neiwang
config_get service_name $1 service_name
config_get domain $1 domain
config_get username $1 username
config_get password $1 password
config_get ip_network $1 ip_network
config_get update_url $1 update_url
config_get uptime $1 uptime
section=$1
ip_regex="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
echo line 97
[ "$enabled" == "1" ]&&{
ipaddr=$(uci -P /var/state get network.${ip_network}.ipaddr)
old_ipaddr=$(ping -c 1 $domain|head -1 | grep -o "$ip_regex")
[ -z "$ipaddr" ]&&exit 0
# echo "enabled=$enabled old_ipaddr=$old_ipaddr ipaddr=$ipaddr"
#ifup update ip
if [ "$isifup" == "1" -a "$ip_network" = "$INTERFACE" ];then
update_ipaddress
fi
# scheduler update ip
if [ "$ipaddr" != "$old_ipaddr" ];then
update_ipaddress
fi
}
}
config_load ddns
config_foreach oscam_conf conf
case "$1" in
start )
config_foreach ddns_goble_get goble
config_foreach ddns_service_get service
;;
stop )
echo "stop"
;;
scheduler )
config_foreach ddns_service_get service
;;
ifup )
local isifup
isifup=1
config_foreach ddns_service_get service
;;
esac
转载请注明:宿居博客 » OPENWRT如何使用DDNS