双线路/双拨 WAN自由选择DDNS的IP 支持花生壳-3322-NOIP-DNSPOD

首先是开启了双WAN,线路接口插对。
例如首选 WAN是长城宽带,大局域网。第二 WAN是可以外网的联通宽带。负载均衡随意填写↓↓↓

001.png

然后进入DDNS,提前注册好花生壳免费域名,输入进去 ↓↓↓

002.png

然后点电脑的开始,运行输入cmd,可以ping下自己的域名,例如XXXX.vicp.net
可以看到IP是第一WAN的。不着急,继续
打开WinSCP登陆,进入/jffs/scripts/ 目录,新建文件ddns.sh ↓↓↓

003.png

输入以下内容后保存:

#!/bin/sh
username=`nvram get ddns_username_x`
pass=`nvram get ddns_passwd_x`
hostname=`nvram get ddns_hostname_x`
wanip=`nvram get wan1_ipaddr`

case $(curl -s "http://$username:$pass@ddns.oray.com/ph/update?hostname=$hostname&myip=$wanip") in 
   good|nochg*) /sbin/ddns_custom_updated 1
   ;;
   *) /sbin/ddns_custom_updated 0
   ;;
esac

这个脚本是根据已经填好的花生壳DDNS配置,自动获取用户名和密码,强制更新第二WAN的IP
注意脚本里面的wan1就是WAN2,wan0是第一wan口,代码中的0一般指的是第一位,从0开始嘛~

保存后,需要设置脚本的权限为0755:在脚本文件ddns.sh点鼠标右键,将圈框的位置内输入0755点确定即可。

004.png

已经完成了脚本部分,只剩下让它隔段时间运行就ok了。

可以测试下脚本,telnet 登录进路由器,键入/jffs/scripts/ddns.sh,回车后看看有木有反应。
木有就对了,错了也不会有提示的。
所以你要保证在DDNS里输入的用户名和密码是正确的。
不正确的话,DDNS里会提示。(只是我太懒,不想修改提示部分,直接抄过来就用)
运行后,稍等片刻在ping下花生壳域名看看有没有正确获取第二WAN的IP

现在进入设置自动运行时间:
登录路由器主界面,进入Tools => Script
参数配置类型选择:超时脚本
超时时间:720 (这里是按照10的倍数计算的。也就是7200秒=2小时,每隔2小时运行一次脚本)
脚本配置:/jffs/scripts/ddns.sh
点+号保存。

005.png

进阶设置DDNS:

即使你没有开启DDNS,或开启了非花生壳DDNS,也可以用命令手动更新WAN2的IP到第三方DDNS,需要输入用户名和密码以及域名。
还是ddns.sh文件,写入超时启动脚本就行。
花生壳、3322以及NO-IP都支持http提交更新域名,配置文件要写对。

花生壳:

#!/bin/sh
username="花生壳用户名"
pass="花生壳密码"
hostname="域名"
wanip=`nvram get wan1_ipaddr`

case $(curl -s "http://$username:$pass@ddns.oray.com/ph/update?hostname=$hostname&myip=$wanip") in 
good|nochg*) /sbin/ddns_custom_updated 1
;;
*) /sbin/ddns_custom_updated 0
;;
esac

3322:(强烈推荐)

#!/bin/sh
username="3322用户名"
pass="3322密码"
hostname="域名"
wanip=`nvram get wan1_ipaddr`

wget -q -O - "http://$username:$pass@members.3322.net/dyndns/update?hostname=$hostname&myip=$wanip"
if [ $? -eq 0 ]; then
    /sbin/ddns_custom_updated 1
else                           
    /sbin/ddns_custom_updated 0
fi

NO-IP:

#!/bin/bash
username="NOIP用户名"
pass="NOIP密码"
hostname="NOIP域名"
wanip=`nvram get wan1_ipaddr`
noipurl="http://$username:$pass@dynupdate.no-ip.com/nic/update?hostname=$hostname&myip=$wanip"
arNslookup() {
     local inter="http://119.29.29.29/d?dn="
     wget --quiet --output-document=- $inter$hostname
}
local DomainIP=$(arNslookup)
if [ "$wanip" = "$DomainIP" ]; then
echo "no need to update"
exit 0
else
curl "$noipurl"
fi

以下为若海更新的自用DNSPOD获取第二WAN的IP代码:(注意保存为UTF-8编码格式)

#!/bin/sh

#################################################
# AnripDdns v5.08
# 基于DNSPod用户API实现的动态域名客户端
# 作者: 若海[mail@anrip.com]
# 介绍: http://www.anrip.com/ddnspod
# 时间: 2016-02-24 16:25:00
# Mod: 荒野无灯 http://ihacklog.com  2016-03-16
#################################################

# 获得本地外网IP (wan0=第1wan  wan1=第2wan)
arIpAdress() {
    local inter=`nvram get wan0_ipaddr`
    echo $inter
}

# 查询域名地址
# 参数: 待查询域名
arNslookup() {
    local inter="http://tool.ihacklog.com/net/ip.php?domain="
    wget --quiet --output-document=- $inter$1
}

# 读取接口数据
# 参数: 接口类型 待提交数据
arApiPost() {
    local agent="AnripDdns/5.07(mail@anrip.com)"
    local inter="https://dnsapi.cn/${1:?'Info.Version'}"
    if [ "x${arToken}" = "x" ]; then # undefine token
        local param="login_email=${arMail}&login_password=${arPass}&format=json&${2}"
    else
        local param="login_token=${arToken}&format=json&${2}"
    fi
    wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter
}

# 更新记录信息
# 参数: 主域名 子域名
arDdnsUpdate() {
    local domainID recordID recordRS recordCD
    # 获得域名ID
    domainID=$(arApiPost "Domain.Info" "domain=${1}")
    domainID=$(echo $domainID | sed 's/.\+{"id":"\([0-9]\+\)".\+/\1/')
    # 获得记录ID
    recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}")
    recordID=$(echo $recordID | sed 's/.\+\[{"id":"\([0-9]\+\)".\+/\1/')
    # 更新记录IP
    recordRS=$(arApiPost "Record.Ddns" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_line=默认&value=$hostIP")
    recordCD=$(echo $recordRS | sed 's/.\+{"code":"\([0-9]\+\)".\+/\1/')
    # 输出记录IP
    if [ "$recordCD" == "1" ]; then
        echo $recordRS | sed 's/.\+,"value":"\([0-9\.]\+\)".\+/\1/'
        return 1
    fi
    # 输出错误信息
    echo $recordRS | sed 's/.\+,"message":"\([^"]\+\)".\+/\1/'
}

# 动态检查更新
# 参数: 主域名 子域名
arDdnsCheck() {
    local postRS
    local hostIP=$(arIpAdress)
    local lastIP=$(arNslookup "${2}.${1}")
    echo "hostIP: ${hostIP}"
    echo "lastIP: ${lastIP}"
    if [ "$lastIP" != "$hostIP" ]; then
        postRS=$(arDdnsUpdate $1 $2)
        echo "postRS: ${postRS}"
        if [ $? -ne 1 ]; then
            return 1
        fi
    fi
    return 0
}

###################################################
# 使用Token认证(免登陆,安全性更高,推荐使用) 请去 https://www.dnspod.cn/console/user/security 获取
arToken="tokenID,token"
# 使用邮箱和密码认证(不启用Token用这个)
arMail=""
arPass=""
###################################################
# 检查更新域名

arDdnsCheck "abc.com" "ac68u"

if [ $? -eq 0 ]; then
    /sbin/ddns_custom_updated 1
else
    /sbin/ddns_custom_updated 0
fi

本文转自Koolshare

此处评论已关闭