日本电子维修技术 网络分享 ROS 多外口 DDNS 脚本,外加 hAP ac² 使用
用了 hAP ac² 一个多月了,真是欲罢不能啊,直接上图。
网络是电信 500M,设置了双拨,speedtest 测试无压力,直接 G口拉满,CPU 到了 50%
找了个热门资源,xl最高能拉倒 85M/s,CPU 彪到 90%了
500M 为了叠加弄多拨感觉是没啥必要,单出口下载拉满基本是 60M/s 的样子了,不过白给的一个外网 ip 还是要的。
刚接触的 ROS,基本都是网上搜的教程,双拨勉强弄好了,然后得弄动态域名了,因为我有域名挂在 dnspod 上,就一直用的 dnspod 的 ddns,结果网上搜的 dnspod 的脚本,都是挂在别人的服务器上的,毕竟做动态域名肯定都是要自己弄点服务,这样暴露感觉就很不舒服了。主要因为 dnspod 的 ddns 更新接口需要域名的 recordid,这个 id 只能通过接口查询到,网站上是看不到的,所以网上的脚本都是让你给出 logintoken 和域名请求到他们的服务器,他们的服务器在帮你获得这个recordid,再去向 dnspod 请求更新。脚本也能做这个事,就是这脚本语言有点蛋疼,弄还是能弄。
说明:
1. 这个脚本是专门针对多外口的情况写的,只要每个外口,和域名的信息填好就行了,ROS 感觉就是天生用来做多口的,配置起来真的很舒服,我看网上都有老哥配过100多个pppoe拨号。当然一个外口也能用这个脚本。
2. 每个接口要填写的信息就4个,"interface" 是接口的名称,"subdomain" 是要用的子域名,"logintoken" 是要用的主域名,"logintoken" 是 dnspod 的 api token,来代替用户名和密码的,在用户中心的安全设置里可以新建。
3. 脚本会判断这个子域名是否存在,不存在会直接创建,所以你不用提前一个一个子域名自己去 dnspod 上建。你只要有域名挂在上面,建个 api token 就行了。
4. 脚本属于娱乐作品,大佬见笑,可能会有问题,不过至少我测试下来都是ok的,贴几个测试的 log 图,下面贴的脚本跑起来不会有这么多 log 打出来的,要想测试就找到对应行取消 :log 的注释。
5. 忙于看大巴黎比赛,可能没时间再改进了,哈哈找个借口,大巴黎,咚咚咚。
首次运行,创建域名
首次运行,更新域名
首次运行,不更新
正常运行,更新域名
正常运行,不更新
:global userData
:if (($userData->0->"interface")=nil) do={
:set userData {
{
"interface"="pppoe-out1";
"subdomain"="test1";
"domain"="abc.com";
"logintoken"="xxxxxxxxxx";
"recordid"=nil;
"oldip"=nil
};
{
"interface"="pppoe-out2";
"subdomain"="test2";
"domain"="abc.com";
"logintoken"="xxxxxxxxxx";
"recordid"=nil;
"oldip"=nil
}
}
}
:local dnspodUrl {
"list"="https://dnsapi.cn/Record.List";
"create"="https://dnsapi.cn/Record.Create";
"update"="https://dnsapi.cn/Record.Ddns";
}
:local prefix "DDNS_dnspod_"
# 文件转数组
# $fileToArr outFile=$outFile
:local fileToArr do={
:local FileStr [ /file get $outFile contents]
:local outArr
:for i from=0 to=([:len $FileStr] - 1) do={
:local char [:pick $FileStr $i]
:if (($char = ":") || ($char = "{") || ($char = "}")) do={
:set char ","
}
:set outArr ($outArr.$char)
}
:return [:toarray $outArr]
}
# 更新DDNS函数
# $updateDDNS ipNow=$ipNow udata=$udata logPrefix=$logPrefix prefix=$prefix listPostData=$listPostData dnspodUrl=$dnspodUrl fileToArr=$fileToArr
:local updateDDNS do={
:if ($ipNow = ($udata->"oldip")) do={
#:log warning ($logPrefix."No need to update DDNS, ipnow: $ipNow ipold: ".$udata->"oldip")
} else={
:log warning ($logPrefix."DDNS need to update, ipnow: $ipNow ipold: ".$udata->"oldip")
:local updateFile ($prefix.$udata->"interface"."_update.json")
:local updatePostData ($listPostData."&record_id=".$udata->"recordid"."&record_line_id=0&value=".$ipNow)
/tool fetch url=($dnspodUrl->"update") http-method="post" dst-path=$updateFile http-data=$updatePostData
:delay 1
:local updateRes [$fileToArr outFile=$updateFile]
:if (($updateRes->2)=1) do={
:log info ($logPrefix."DDNS update successfully! ipnow: $ipNow ipold: ".$udata->"oldip"." M: ".$updateRes->4)
:set ($udata->"oldip") $ipNow
/file remove [ /file find name=$updateFile]
} else={
:log error ($logPrefix."DDNS update failed! Please check out the $updateFile"." M: ".$updateRes->4)
}
}
}
:foreach udata in=$userData do={
:local logPrefix ($prefix.$udata->"interface".": ")
:local ifStatus [/interface pppoe-client get [/interface pppoe-client find name=($udata->"interface")] running ]
:if ($ifStatus = false) do={
:log warning ($logPrefix."Interface: ".$udata->"interface"." is down.")
} else={
#:log warning ($logPrefix."Interface: ".$udata->"interface"." is up.")
:local ipNow [/ip address get [/ip address find interface=($udata->"interface")] address]
:set ipNow [:pick $ipNow 0 [:find $ipNow "/" ]]
#:log warning ($logPrefix."Interface: ".$udata->"interface"." ip is $ipNow")
:local listPostData ("login_token=".$udata->"logintoken"."&format=json&lang=en&domain=".$udata->"domain"."&sub_domain=".$udata->"subdomain")
:if (($udata->"recordid")=nil) do={
# recordid 记录不存在,即脚本第一次运行,或者路由器刚重启后的第一次运行
:log warning ($logPrefix."(Running the script for the first time, or the ROS reboots just now)")
:local listFile ($prefix.$udata->"interface"."_list.json")
/tool fetch url=($dnspodUrl->"list") http-method="post" dst-path=$listFile http-data=$listPostData
:delay 1
:local listRes [$fileToArr outFile=$listFile]
:if (($listRes->2)=10) do={
# 域名不存在,创建域名
:log warning ($logPrefix.$udata->"subdomain".".".$udata->"domain"." not found."." M: ".$listRes->4)
/file remove [ /file find name=$listFile]
:local createFile ($prefix.$udata->"interface"."_create.json")
:local createPostData ($listPostData."&record_type=A&record_line_id=0&value=".$ipNow)
/tool fetch url=($dnspodUrl->"create") http-method="post" dst-path=$createFile http-data=$createPostData
:delay 1
:local createRes [$fileToArr outFile=$createFile]
:if (($createRes->2)=1) do={
:log warning ($logPrefix.$udata->"subdomain".".".$udata->"domain"." create successfully."." M: ".$createRes->4)
/file remove [ /file find name=$createFile]
:set ($udata->"recordid") ($createRes->9)
:set ($udata->"oldip") $ipNow
} else={
:log error ($logPrefix."Domain create failed, please check the $createFile"." M: ".$createRes->4)
}
} else={
# 域名存在,获得recordid
:if (($listRes->2)=1) do={
#:log warning ($logPrefix.$udata->"subdomain".".".$udata->"domain"." already exists."." M: ".$listRes->4)
/file remove [ /file find name=$listFile]
:set ($udata->"recordid") ($listRes->41)
:set ($udata->"oldip") ($listRes->45)
$updateDDNS ipNow=$ipNow udata=$udata logPrefix=$logPrefix prefix=$prefix listPostData=$listPostData dnspodUrl=$dnspodUrl fileToArr=$fileToArr
} else={
:log error ($logPrefix."error for dnspod list request, please check the $listFile"." M: ".$listRes->4)
}
}
} else={
$updateDDNS ipNow=$ipNow udata=$udata logPrefix=$logPrefix prefix=$prefix listPostData=$listPostData dnspodUrl=$dnspodUrl fileToArr=$fileToArr
}
}
}
复制代码
评论
ros正版不是直接带cloud域名吗
评论
全村人唯一希望大巴黎 希望保持状态拿个冠军啊
评论
ros自带域名
评论
/ip cloud 里面有一个XXXXXX.sn.mynetname.net 的域名,前面那串是你的设备的序列号
把你自己的域名直接指向这个序列号域名就可以了,不需要自己用脚本去监测IP更新动态域名
评论
自带的好用,感觉没必要这样弄 电路 电子 维修 求创维42c08RD电路图 评论 电视的图纸很少见 评论 电视的图纸很少见 评论 创维的图纸你要说 版号,不然无能为力 评论 板号5800-p42ALM-0050 168P-P42CLM-01 电路 电子 维修 我现在把定影部分拆出来了。想换下滚,因为卡纸。但是我发现灯管挡住了。拆不了。不会拆。论坛里的高手拆解过吗? 评论 认真看,认真瞧。果然有收
·日本中文新闻 唐田绘里香为新剧《极恶女王》剃光头 展现演员决心
·日本中文新闻 真子小室夫妇新居引发隐私担忧
·日本中文新闻 前AKB48成员柏木由纪与搞笑艺人交往曝光
·日本学校 {日本国际学校}梅田インターナショナルスクール
·日本学校 LINE:sm287 陳雨菲、20歳、台湾からの留学生、東京に来たばかり
·日本留学生活 出售平成22年走行48000km 代步小车
·日本华人网络交流 円相場 一時1ドル=140円台まで上昇?
·日本华人网络交流 问日本华人一个问题
·日本旅游代购 富山接机
·生活百科 英国转澳大利亚转换插头
·汽车 【求助】修车遇到困难怎么办?