OpenWrt 增加 crontab 任务

在/root/crontab/ 目录下, 创建脚本 ddns.sh

#!/bin/sh

# 远程php脚本的URL地址
SERVICE_URL=http://www.rockbb.com/my_ddns.php
# 修改的目标记录
RECORD_NAME=homeop.rockbb.com
# DNS类型, IPv6为AAAA
RECORD_TYPE=AAAA
# 这里改成自己的密文, 与远程的php脚本要一致, 用于校验md5
PRIVATE_KEY=helloworld # 抽取远程IP, 个人感觉grep正则比 cut -d更好用, 在我的timecloud上, cut -d ' ' 工作貌似不正常
if nslookup $RECORD_NAME|grep Address >/dev/null; then
remote_ip=`nslookup $RECORD_NAME|grep -Eo 'Address\s+\d:\s+[0-9a-f:]+'|grep -Eo '[0-9a-f]+(:[0-9a-f:]+)+'`
echo "Remote IP: "$remote_ip
else
exit 1
fi # 抽取本地IPv6地址
if ifconfig br-lan>/dev/null ; then
local_ip=`ifconfig br-lan|grep 'inet6 addr:\s24.*'|grep -Eo '24[0-9a-f:]+'`
echo "Local IP : "$local_ip
else
echo "Command: 'ifconfig br-lan' failed"
exit 1;
fi if [ $remote_ip != $local_ip ]; then
# 得到当前的 时分秒, 用于计算MD5
local_ts="$(date +'%H%M%S')"
md5=$(echo -n $PRIVATE_KEY$local_ts | md5sum -| cut -d' ' -f1)
wget -q -O- "$SERVICE_URL?recordname=$RECORD_NAME&recordtype=$RECORD_TYPE&ts=$local_ts&s=$md5&content=$local_ip"
else
echo "Same IPs, skip unchanged"
exit 0
fi

添加crontab任务

crontab -e

# 内容
*/10 * * * * /root/crontab/ddns.sh > /tmp/log/ddns.log 2>&1

.启动cron, 并确认有cron进程

root@Timecloud1:~# ps |grep cron
23791 root 1220 S /usr/sbin/crond -f -c /etc/crontabs -l 5 # 如果不存在则启动
/etc/init.d/cron start

处理请求的PHP脚本

安全起见, 处理前先校验md5

<?php

# 代理号
$client = "agent9527";
# 在IP白名单管理处填写的密码, 不是代理登录密码, 用于计算checksum
$password = 'yourpwd';
# 根域名
$name = 'rockbb.com';
# Private Key
$private_key = 'helloworld'; # 要改DNS解析的域名记录
$recordname = $_GET['recordname'];
# 要改DNS解析的域名记录类型
$type= $_GET['recordtype'];
# 新解析值
$content = $_GET['content'];
# TTL
$ttl = 600;
# 编码, E:英文, G:中文
$enc = 'E';
# 字符集编码 utf-8 或 gb2312
$charset = 'utf-8';
# 时间, 用于校验签名值
$ts = $_GET['ts'];
# 签名值
$s = $_GET['s']; print_r($_GET);exit;
# 校验签名
$dummy = md5($private_key . $ts);
if ($dummy != $s) {
echo 'Incorrect input: ' . $dummy;
exit;
} #### 获取旧值 #### $method = 'DomainDNSQuery';
$checksum = md5($method.$client.$password.$name);
$api_url = 'http://api.xinnet.com/domain/api.gb?method=' . $method . '&charset=' . $charset;
$parameters = '&enc='.$enc.'&client='.$client.'&checksum='.$checksum.'&name='.$name.'&type='.$type;
#echo $api_url."\n"; echo $parameters."\n";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $api_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters);
$data = curl_exec($curl);
curl_close($curl);
#echo $data."\n"; $data_array = explode('&',$data);
$result = array();
foreach ($data_array as $data_item) {
$data_pair = explode('=', $data_item);
$result[$data_pair[0]] = $data_pair[1];
}
print_r($result);exit; if ($result['ret'] != '100') {
echo $data;
exit;
} $found = false;
$original_content = ''; for ($i = 1; $i < 10; $i++) {
// recordnamen 记录名, contentn 解析内容, ttln 生存时间, prion 优先级, reason 错误信息, domain-auth-Failed
if (!array_key_exists('recordname'.$i, $result)) {
echo 'No more results at index:'.$i."\n";
break;
}
if ($result['recordname'.$i] == $recordname) {
echo "Record found at index:$i\n";
$found = true;
$original_content = $result['content' . $i];
if ($original_content == $content) {
echo "Values are the same, exit.\n";
exit;
} else {
break;
}
}
} if (!$found) {
echo "Record not found, exit\n";
exit;
} $method = 'DomainDNSMod';
$checksum = md5($method.$client.$password.$name);
echo $checksum . "\n";
$api_url = 'http://api.xinnet.com/domain/api.gb?method=' . $method . '&charset=' . $charset;
$parameters = '&enc=' . $enc
. '&client=' . $client
. '&checksum=' . $checksum
. '&name=' . $name
. '&type=' . $type
. '&recordname=' . $recordname
. '&content=' . $content
. '&oldcontent=' . $original_content
. '&ttl=' . $ttl; echo $api_url."\n";
echo $parameters."\n"; $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $api_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters);
$data = curl_exec($curl);
curl_close($curl);
echo $data."\n"; ?>

  

使用OpenWrt实现IPv6 DDNS的更多相关文章

  1. IPv6 DDNS 阿里云动态解析程序推荐: AliyunDdnsCSharp

    IPV6 DDNS 设置 概述 中国移动宽带提供了公网IPv6地址,为了物尽其用,于是折腾了域名到IPv6 的解析服务. 平台使用的阿里云解析DNS,平台提供了接口可以方便的添加与修改解析地址. 本打 ...

  2. Openwrt笔记-IPv6与启动顺序

    之前使用了nat6方案和x3c8021x实现了校园网上网和IPv6连接:但实际使用时经常出现莫名奇妙的问题.IPv6状态要么是无法连接网络,要么是无法连接Internet:经过研究,发现大概是自启动项 ...

  3. openwrt 新版IPV6问题

    我的版本是r45579,表现是路由认证后正确获取IPV6地址并且可以ping通外网,电脑可以获取地址但是连不上外网. 加一条转发规则就好了 先查看/etc/config/network里给电脑分配的地 ...

  4. 配置IPv6公网地址DDNS并开放外网访问端口

    目前使用三大运营商宽带服务都会下发公网IPv6地址,这样我们想要在外网访问家里的路由.NAS等设备就可以直接通过IPv6地址来访问了.但是每次重新拨号后IPv6地址都会改变,而且IPv6的地址很长,这 ...

  5. OpenWrt镜像编译和ipv6支持

    离成功实现路由器刷OpenWrt.接入校园网差不多一年了.路由工作比较稳定,还是很满意的. 这次回来有个新发现:学校有原生ipv6支持,在win7和ubuntu下什么都不用设置,自动获取global ...

  6. OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问 -- 知乎

    本文转自知乎: OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问? - mistforest的回答 - 知乎https://www.zhihu.com/question/29667 ...

  7. ECHO命令输出空行的11种方法和效率

    标题: 批处理技术内幕:ECHO命令作者: Demon链接: http://demon.tw/reverse/cmd-internal-echo.html版权: 本博客的所有文章,都遵守“署名-非商业 ...

  8. Linux中获取本机的最新IPv6地址_更新ddns的脚本

    Linux中获取本机的最新IPv6地址_更新ddns的脚本 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-07. 运营商提供ipv6地址. 路由器后有台linux机器,通过e ...

  9. 设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务

    设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-02. 参考文章: IPv6"内网"设备 ...

  10. shell脚本实现GoDaddy中IPv6的动态域名解析(DDNS)_可在路由中运行

    首先谈一下个人的需求,家里路由拿到了运营商的外网ipv6地址,于是想着将路由的各种服务通过DDNS放到外网上来,这才有下面的动态域名解析折腾.废话不多说,进入正题. 1.首先在godaddy中注册域名 ...

随机推荐

  1. Keep English Level-01

    state -- 声称,宣称,国家,政府 state-owned -- 国有的 He stated that "hell will break loose,politically and m ...

  2. [转帖]k8s(1.28.2)部署ingress-nginx-controller(1.9.0)

    1.部署ingress-nginx-controller 继在三台虚拟机部署k8s后,需要部署ingress-nginx-controller,才能使设置的ingress规则生效. 1.1下载yaml ...

  3. Python学习之十二_tkinter的学习与使用

    Python学习之十二_tkinter的学习与使用 摘要 本来想说会用QT5进行界面编程 但是发现比较繁琐 还是先学习使用 tkinter的方式进行界面化的编写和学习了 基础知识 tkinter是一个 ...

  4. 快速部署minio的一个思路

    快速部署minio的一个思路 背景 小型项目上希望能够快速部署一些中间件. 因为minio比较简单,想着快速一键部署. 加快工作效率. 这里将脚本和思路写下来, 其他应用可以一样进行. 思路 1. 下 ...

  5. [转帖]使用systemd-analyze 工具来分析各个服务进程的启动性能

    https://www.cnblogs.com/xingmuxin/p/11413784.html systemd-analyze是一个分析启动性能的工具,用于分析启动时服务时间消耗.默认显示启动是内 ...

  6. [转帖]缓存与存储的一致性策略:从 CPU 到分布式系统

    https://zhuanlan.zhihu.com/p/151745863 在计算机系统设计实践中,我们常常会遇到下图所示架构: 为了解决单个存储器读吞吐无法满足要求的问题,常常需要在存储器上面增加 ...

  7. [转帖]《Linux性能优化实战》笔记(21)—— 网络性能优化思路

    一. 确定优化目标 优化前,我会先问问自己,网络性能优化的目标是什么?实际上,虽然网络性能优化的整体目标,是降低网络延迟(如 RTT)和提高吞吐量(如BPS 和 PPS),但具体到不同应用中,每个指标 ...

  8. ESXi虚拟化的坑-细微区别下虚拟机性能差异巨大

    ESXi虚拟化的坑-细微区别下虚拟机性能差异巨大 背景 周末在公司无偿加班. 同组的小伙伴周一有一个需求, 我想着周六乘着机器压力不大进行一下虚拟机的clone 但是截止到晚上快十点都没有完全Clon ...

  9. Docker 镜像减少体积的思路和方法

    Docker 镜像减少体积的思路和方法 背景 有一个项目感觉镜像有点大 这边同事喊着一起帮忙处理一下. 今天基本上就在客户现场进行处理了. 想着应该把自己想到的东西整理一下. 整体思路 1. 清理do ...

  10. 解决node与npm版本不一致,出现npm WARN npm npm does not support Node.js v15.14.0

    出现node与npm版本不一致 今天我升级了node之后,出现的了如下信息 npm WARN npm You should probably upgrade to a newer version of ...