找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 45948|回复: 181

[k2p] OPENWRT在路由器上实现网内各设备的IPV6 ddns(支持阿里云)

 火.. [复制链接]
发表于 2019-5-24 14:29 | 显示全部楼层 |阅读模式
迅雷TV
本帖最后由 kob 于 2022-3-29 09:09 编辑

阿里云的最新办法
利用自带的动态dns插件,添加一个配置
QQ截图20200103163109.jpg QQ截图20200103163216.jpg
注意上面的1、2、3处
ip地址来源为脚本
2处为脚本文件的在路由器上的存放路径
3处是触发脚本执行更新的接口,根据你的实际情况进行选择为了保证刷机之后脚本文件还在,一般这样设置

  1. #!/bin/sh

  2. #从wan6接口状态获取PD
  3. pd=$(ubus call network.interface.wan6 status | grep  -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//')
复制代码

补充,@conupefox提供的获取PD的另外一个方法


  1. <blockquote>.  /lib/functions/network.sh
复制代码
补充,可以选择从lan接口获取PD
  1. pd=$(ubus call network.interface.lan status | grep  -A 2 '"ipv6-prefix-assignment"' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//')
复制代码


这个跟以前的方法类似,主要是通过代码获取pd然后加上客户机IPV6地址的固定后缀,就是一个完整的V6地址


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



以下为非阿里云,如dynu等二级域名的使用放大
在IPV6环境,网内各设备均会获得一个全球地址,路由上可以通过ddns等工具最其自身所获取的wan6 ip实现域名绑定,并自动更新,但不能解决通过域名访问网内其它设备IPV6地址的问题,经过观察发现我们的路由获取的IPV6除了128位地址外还有一个PD前缀(移动为60位,电信为56位),如下图

黄色方框内即为前缀
我们再来看网内设备所获取的IPV6地址

发现前面方框内即前面所说的前缀,后面方框内为给此设备分配的IPV6地址后缀,仔细观察还可以看出后缀最后6位与设备mac地址的后6位一样,但这并不是所有设备都是如此。
在经过多次观察,会发现路由对设备分配的IPV6后缀基本是固定的,当路由器重新拨号后,运营商分配的ipv6前缀会和wan ip一样发生变化,但后缀部分并不会变(此处不绝对,有些设备每次都不一样,此方法不适用)
同时在IPV4我们可以在路由上对局域网内设备指定IP地址分配,在IPV6我们一样也可以,但不再是固定的IP地址了,只能固定的后缀,再加上运营商分配的前缀就组成一个完整的IPV6地址
在openwrt的网络-DHCP/DNS菜单的最下面有个静态地址分配

方框内填好后缀就行了,我习惯于用IPV4地址做后缀,其中DUID这个字段从“已分配的 DHCPv6 租约”里面找到对应关系选取。但此方式不建议,因为有时候并不会生效,会造成解析失败,建议后缀还是全地址(例如:2e0:b4ff:fe1c:4c63)
以上工作做好后,现在来讲如何通过脚本来实现动态域名的更新。
首先我们在dynu.com注册n个免费域名,该网站现在需要fq访问,但不影响解析
我们在openwrt的/etc/ppp/ip-up.d目录下新建一个dynu-a.sh的文件,内容如下:

  1. #!/bin/sh

  2. USERNAME="user"   #你注册dynu用户名
  3. PASSWORD="password"   #你注册的dynu密码
  4. DOMAIN="kobxx.dynu.net"  #你注册的dynu免费域名
  5. wanip=`ifconfig pppoe-wan 2>/dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2 2>/dev/null`   #获取路由器IPV4地址

  6. pd=`ubus call network.interface.wan6 status | grep  -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' |   grep -oE '[0-f]{0,4}\:[0-f]{0,4}\:[0-f]{0,4}\:[0-f]{0,4}'`     #获取路由器IPV6前缀
  7. hz=::123    #123为路由上给a设备分配的IPV6后缀
  8. wanip6=${pd}${hz}   #前缀后缀组合为设备的IPV6地址

  9. curl  -k  "https://207.38.70.46/nic/update?hostname=${DOMAIN}&username=${USERNAME}&password=${PASSWORD}&myip=${wanip}&myipv6=${wanip6}"    #执行将ip地址发送到域名服务器进行更新

复制代码


以上用户名密码等信息自行修改,保存后修改文件权限为0755
在lede的文件系统,放在/etc/ppp/ip-up.d目录下的脚本会在发生pppoe拨号自动触发执行,也就是说只要路由器重新拨号即可完成域名更新
如果有多台设备,可以继续新建文件dynu-b.sh,替换相应内容,依次可以将网内所有设备按照此方式实现域名更新。
这样做的好处就是避免了所有设备的域名更新IP全部在路由实现,而且路由只要重新拨号就触发,不需要花精力为每台设备去找ddns插件,有的平台可能根本就没合适的插件





aliyun-1.rar

2.02 KB, 下载次数: 1136

阿里云脚本

评分

参与人数 3恩山币 +3 收起 理由
刀锋笑 + 1 老哥非常需要这个,但是设置发现没有生效,可以详细指出哪些是要替换自己的信息吗
simbasun + 1 强大的恩山!(以下重复1万次)
5460 + 1 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-12-27 16:08 | 显示全部楼层
160206  note : PID '19561' started at 2020-12-27 16:02
160207       : ddns version  : 2.7.8-3
160207       : uci configuration:
ddns.ipv6.domain='ipv6.yyzb.xyz'
ddns.ipv6.enabled='1'
ddns.ipv6.force_ipversion='1'
ddns.ipv6.interface='lan'
ddns.ipv6.ip_script='/etc/ppp/aliyun-ipv6.sh'
ddns.ipv6.ip_source='script'
ddns.ipv6.lookup_host='ipv6.yyzb.xyz'
ddns.ipv6.password='***PW***'
ddns.ipv6.service_name='aliyun.com'
ddns.ipv6.use_ipv6='1'
ddns.ipv6.username='LTA*******Tpxz'
ddns.ipv6=service
160207       : verbose mode  : 0 - run normal, NO console output
160207       : check interval: 600 seconds
160207       : force interval: 259200 seconds
160207       : retry interval: 60 seconds
160208       : retry counter : 0 times
160208       : No old process
160208       : last update: never
160208       : Detect registered/public IP
160208  note : Busybox nslookup - no support to 'force IP Version' (ignored)
160208       : #> /usr/bin/nslookup ipv6.yyzb.xyz  >/var/run/ddns/ipv6.dat 2>/var/run/ddns/ipv6.err
160208       : Registered IP 'ff01::1' detected
160208  info : Starting main loop at 2020-12-27 16:02
160208       : Detect local IP on 'script'
160208       : #> /etc/ppp/aliyun-ipv6.sh >/var/run/ddns/ipv6.dat 2>/var/run/ddns/ipv6.err
160209       : Local IP '{"RequestId":"7390F5FF-CBEC-4740-84E5-85E71D9FC509","HostId":"alidns.aliyuncs.com","Code":"SubDomainInvalid.Value","Message":"The DNS record is invalid or in the wrong format.","Recommend":"https://error-center.aliyun.com/status/search?Keyword=SubDomainInvalid.Value&source=PopGw"}
Not Find Such Host ipv6.yyzb.xyz' detected via script '/etc/ppp/aliyun-ipv6.sh'
160209  WARN : Error in 'expand_ipv6()' - invalid IPv6 found: '' expanded: ''
160209       : Update needed - L: 'invalid' <> R: 'ff01:0000:0000:0000:0000:0000:0000:0001'
160209 ERROR : No or private or invalid IP 'invalid' given! Please check your configuration
160210 ERROR : No update send to DDNS Provider
160210       : Waiting 600 seconds (Check Interval)
  这个是什么情况 ? 大神给 解答下  用的 楼主 ALIYUN 脚本

点评

kob
没能检测到IP  详情 回复 发表于 2020-12-27 19:26
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2022-3-24 19:50 | 显示全部楼层
本帖最后由 炫我东方 于 2022-3-24 20:28 编辑

我看了一下楼主的代码,我知道大家出错的原因了。楼主有一行代码是错误的,就是这行
  1. hz=:209:34ff:fe2c:5ab0
复制代码

应该改成
  1. hz=":209:34ff:fe2c:5ab0"
复制代码

就是后缀要用英文双引号包起来,因为用双引号包起来后,它表示是个字符串。如果不括起来,脚本解释器是不认的。另外 ,大家要注意209:34ff:fe2c:5ab0前面还有个英文冒号的。完整后缀是":209:34ff:fe2c:5ab0",这样前缀与后缀才能完美拼接。
所以最终代码是
  1. #!/bin/sh        
  2. pd=$(ubus call network.interface.wan_6 status | grep  -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//')
  3. hz=":209:34ff:fe2c:5ab0"
  4. wanip6=${pd}${hz}
  5. echo "${wanip6}"
复制代码


把上面代码复制到txt文件里,别忘了改成自己的ipv6后缀,然后保存,并将txt文件的后缀名改成sh,比如,原来的文件名叫alidns.txt,那么改成改成alidns.sh
然后通过winscp上传到/etc目录下(其他目录也可以),当然后最好在/etc下新建一个目录,假设叫aliyunddnsipv6,然后把alidns.sh上传到/etc/aliyunddnsipv6下,所以脚本目录为/etc/aliyunddnsipv6/alidns.sh
然后在alidns.sh上右键 ,查看属性,将权限改为0755
然后在阿里云后台添加AAAA记录,最后在openwrt里设置动态ddns即可。一定要先在阿里云里添加记录,再在openwrt设置。否则,会有很大机率是不成功的。这样做法最通用,最保险。
另外,注意!注意!注意!!!!!注意下面这行代码
  1. pd=$(ubus call network.interface.wan_6 status | grep  -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//')
复制代码
这行代码有的固件需要用wan_6,而有的需要改成wan6
至于你的固件到底需要用哪个,可以把上面一行小括号里的代码复制到终端(例如:openwrt自带的终端、putty等)里运行一下,再改成wan6运行一下,哪个能正确显示前缀就用哪个。也就是说把下面两行代码分别复制到终端运行一下,用成功的那个
  1. ubus call network.interface.wan_6 status | grep -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//'
复制代码
  1. ubus call network.interface.wan6 status | grep -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//'
复制代码



最后希望能帮到大家





点评

我改成了我的网络接口,但是还是没有前缀什么提示都没有  详情 回复 发表于 2022-5-7 13:47
kob
问题并不在这里,出问题的原因还是在各自路由上获取前缀的方式不一样造成的  详情 回复 发表于 2022-3-28 11:30
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2021-9-9 18:55 | 显示全部楼层
本帖最后由 lgs2007m 于 2021-9-11 11:07 编辑

感谢大神的教程,顺利实现了阿里云DDNS绑定NAS~~
我在编辑完那个sh脚本后,通过WinSCp上传了,但是没有设置文件权限
在OpenWrt的动态DNS高级设置页面设置好脚本路径,点击保存,提示两项错误:
高级设置 - IP 地址来源 [IPv6]: 无法确定本地 IP。
高级设置 - 未找到脚本或脚本不可执行。

我直接将sh脚本文件权限设置为0755,然后点保存就成功了,感谢大神


下面脚本内容,可以直接SSH登录后,复制粘贴直接执行,即可在/etc/config/ip文件夹下生成nasipv6.sh脚本文件,不需要手动上传
  1. mkdir /etc/config/ip # 新建存放脚本文件夹(根据自己实际修改)
  2. cat << "EOF" >/etc/config/ip/nasipv6.sh # 新建脚本文件并把下一行到EOF上一行的内容写进去(sh脚本文件名根据自己实际修改)
  3. #!/bin/sh
  4. # 运营商分配IPv6 PD,需要注意自己是wan_6还是wan6,用ubus查看下
  5. pd=$(ubus call network.interface.wan_6 status | grep  -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//')
  6. hz=:209:34ff:fe2c:5ab0 # 对应设备IPv6地址后缀部分(根据自己实际修改)
  7. wanip6=${pd}${hz} # 拼接合成位对应设备IPv6地址
  8. echo "${wanip6}"
  9. EOF
  10. chmod +x /etc/config/ip/nasipv6.sh # 给文件执行权限
复制代码

还有一点是OpenWrt动态DNS的高级设置,如果不指定DNS服务器,会默认使用路由器lan侧的DNS服务器,可能解析慢不稳定
查看动态DNS日志会看到时不时更新解析,但实际上地址没变不用更新。
建议设定一个IPv6的DNS服务器,保证解析地址又快又准。
我直接用了阿里DNS:2400:3200::1,或者2400:3200:baba::1也行

点评

何必呢?少说几句吧,网络这么大,聚到一起也不容易!: 5.0
何必呢?少说几句吧,网络这么大,聚到一起也不容易!: 5
谢谢大神,我又行了  发表于 2023-3-17 21:31
我想问一下,我ssh里输入ubus call network.interface.wan_6 status | grep -A 3 '"ipv6-prefix":' | grep address | awk '{print $2}' | awk '{print substr($0,1,length($0)-4)}' | sed 's/^.//',并把wan_6改成  详情 回复 发表于 2022-7-12 10:06
老哥,我按照你的来,但是获取的ip是ikuai拨号获取的ipv6地址,不是nas的地址  详情 回复 发表于 2022-5-7 13:16
一直都用楼主的代码,这几天失败了,用了您的代码又可以了,特来感谢  详情 回复 发表于 2021-12-14 10:21
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-24 14:57 | 显示全部楼层
这个思路不错,能保证网络变化的时候及时更新
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-24 16:50 | 显示全部楼层
重新添加了阿里云的脚本

点评

阿里云脚本的主机名是啥  详情 回复 发表于 2023-5-9 07:45
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-24 18:11 | 显示全部楼层
支持一下
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-24 19:32 来自手机 | 显示全部楼层
支持一下,不错
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-24 20:32 | 显示全部楼层
强大的恩山!(以下重复1万次)
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-25 20:26 | 显示全部楼层
感谢楼主分享!
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-25 21:21 | 显示全部楼层
有没有能实现免特殊方式实现Google domains的ddns更新
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-26 21:41 | 显示全部楼层
学习学习!!!!!!!!!!!
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-5-31 23:39 | 显示全部楼层
非常丰富发发发发发发发发发发发
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-6-5 11:11 | 显示全部楼层
这都要隐藏啊……
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-6-5 12:41 | 显示全部楼层
好贴,学习一下。
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-6-15 00:01 | 显示全部楼层
謝謝分享
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-6-15 06:58 | 显示全部楼层
感谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

发表于 2019-10-2 02:20 | 显示全部楼层
获取不到前缀是什么鬼?wan,wan6都试了。移动60的pd。脚本运行以后直接把解析修改成后缀。

点评

谢谢,改成wan_6成功了  详情 回复 发表于 2021-1-26 16:05
自行解决了问题,脚本里wan6需要酌情修改,先直接运行下ubus list看看有多少接口再修改。我这冒出来个谜一样的wan_6.......  详情 回复 发表于 2019-10-2 02:48
我的恩山、我的无线 The best wifi forum is right here.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2023-11-30 08:49

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表