使用OpenWrt实现IPv6 DDNS
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的更多相关文章
- IPv6 DDNS 阿里云动态解析程序推荐: AliyunDdnsCSharp
IPV6 DDNS 设置 概述 中国移动宽带提供了公网IPv6地址,为了物尽其用,于是折腾了域名到IPv6 的解析服务. 平台使用的阿里云解析DNS,平台提供了接口可以方便的添加与修改解析地址. 本打 ...
- Openwrt笔记-IPv6与启动顺序
之前使用了nat6方案和x3c8021x实现了校园网上网和IPv6连接:但实际使用时经常出现莫名奇妙的问题.IPv6状态要么是无法连接网络,要么是无法连接Internet:经过研究,发现大概是自启动项 ...
- openwrt 新版IPV6问题
我的版本是r45579,表现是路由认证后正确获取IPV6地址并且可以ping通外网,电脑可以获取地址但是连不上外网. 加一条转发规则就好了 先查看/etc/config/network里给电脑分配的地 ...
- 配置IPv6公网地址DDNS并开放外网访问端口
目前使用三大运营商宽带服务都会下发公网IPv6地址,这样我们想要在外网访问家里的路由.NAS等设备就可以直接通过IPv6地址来访问了.但是每次重新拨号后IPv6地址都会改变,而且IPv6的地址很长,这 ...
- OpenWrt镜像编译和ipv6支持
离成功实现路由器刷OpenWrt.接入校园网差不多一年了.路由工作比较稳定,还是很满意的. 这次回来有个新发现:学校有原生ipv6支持,在win7和ubuntu下什么都不用设置,自动获取global ...
- OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问 -- 知乎
本文转自知乎: OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问? - mistforest的回答 - 知乎https://www.zhihu.com/question/29667 ...
- ECHO命令输出空行的11种方法和效率
标题: 批处理技术内幕:ECHO命令作者: Demon链接: http://demon.tw/reverse/cmd-internal-echo.html版权: 本博客的所有文章,都遵守“署名-非商业 ...
- Linux中获取本机的最新IPv6地址_更新ddns的脚本
Linux中获取本机的最新IPv6地址_更新ddns的脚本 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-07. 运营商提供ipv6地址. 路由器后有台linux机器,通过e ...
- 设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务
设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-02. 参考文章: IPv6"内网"设备 ...
- shell脚本实现GoDaddy中IPv6的动态域名解析(DDNS)_可在路由中运行
首先谈一下个人的需求,家里路由拿到了运营商的外网ipv6地址,于是想着将路由的各种服务通过DDNS放到外网上来,这才有下面的动态域名解析折腾.废话不多说,进入正题. 1.首先在godaddy中注册域名 ...
随机推荐
- 【TouchGFX】使用v4.18.1版本创建预制电路板工程的正确方法
选择要使用的电路板 实现自己的程序 Designer运行仿真没问题并生成代码 我习惯使用IAR工具,发现直接编译有错误 上述错误是因为Designer默认生成的工具链是CubeIDE,所以需要使用Cu ...
- [转帖]【VIM】多行缩进空格与删除
向前或向后缩进一个TAB 按ctrl + v组合键进入Visual Line模式,可使用方向键选择多行: 按<或>,进行向前或向后缩进tab. 缩进n个TAB,按n+<或> 多 ...
- [转帖]Shell三剑客之awk
目录 awk简述 awk的工作过程 awk的工作原理 awk的基本格式及其内置变量 getline 文本内容匹配过滤打印 对字段进行处理打印 条件判断打印 awk的三元表达式与精准筛选用法 awk的精 ...
- [转帖]一个轻量的Linux运维监控脚本
https://zhuanlan.zhihu.com/p/472040635 写在前面 我的需求 嗯,有几台很老的机器,上面部署的几个很老的应用 我需要每周对机器上的一些内存,磁盘,线程,应用和数据库 ...
- [百度贴吧]部分CPU的SPEC2006int 结果
这些测试成绩基本上是本人自己测试的结果.下表中有来自spec官网的两个成绩,因为测试年份较早,系统环境和编译器都较老,测试成绩本人实测的还差,所以仅作为参考.部分测试启用了自动并行和附加的优化库,是为 ...
- go多版本管理
在日常开发工作过程中,很多时候我们都需要在自己的机器上安装多个go版本,像是go1.16引入的embed,go1.18引入了泛型:又或是自己本地使用的是最新版,但公司的项目中使用的go1.14.go1 ...
- Fabric-ca server端与client端交互
本文介绍Fabric-ca server端和client端的交互过程. 在server端执行Start()命令时,会调用registerHandlers()函数,其作用就是注册处理客户端请求的程序: ...
- 7.1 C/C++ 实现动态数组
动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小.这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在 ...
- LyScript 实现绕过反调试保护
LyScript插件中内置的方法可实现各类反调试以及屏蔽特定API函数的功能,这类功能在应对病毒等恶意程序时非常有效,例如当程序调用特定API函数时我们可以将其拦截,从而实现保护系统在调试时不被破坏的 ...
- CE修改器入门:浮点数的扫描
在前面的教程中我们使用4字节的方式进行扫描,但有些游戏使用了"浮点数"来存储数值,浮点数是带有小数点的数值(如 5.12 或 11321.1),正如本关中的健康和弹药,两者都以浮点 ...