我在使用/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