当前位置:   article > 正文

openwrt上ipv6 ddns 解析

ipv6 ddns

之前写过一个教程如何在openwrt上使用docker版本的ddns解析工具,使用docker的好处是部署简单,支持的域名种类多;openwrt的docker环境安装起来也很方便,尤其有不少编译好的,带docker环境的镜像可以用,例如笔者是用lean的openwrt自行编译的,当然,也有不少现成的,可以下载的,例如恩山。

近几年,国内3大运营商的ipv6已经很普及了,笔者折腾ipv6的唯一原因就是没有NAT穿越,可以支持v6直连,无论是手机还是家里的宽带,只要有ipv6,基本就是端口对端口直接连接(听说也有运营商屏蔽手机端口的)。这样的话,就打通了家庭设备和手机之间的连接通路问题,可以衍生出各种不同的应用场景。

首先,解决openwrt的ipv6连接,网上教程很多,实际用最新的openwrt 21.3版本,配置已经非常简单了

1. 新建一个wan接口(固件自带,可以忽略)

输入宽带的用户名密码即可,这一步不多说了

2. 新建一个wan6接口(视固件情况,可选)

协议配置成DHCPv6客户端,如下图,防火墙、物理网卡与wan保持一致

3.【全局网络选项】中的【IPv6 ULA 前缀】配置为空

 

 经过上面三步,路由器的wan口就获取了ipv6地址,通过ip addr命令验证。

至此,ipv6配置好了,下一步就是配置ddns,笔者用的github上的newfeature ddns

支持的ddns供应商挺多,列举如下:

  1. 服务商支持:
  2. DNSPOD
  3. 阿里 DNS
  4. DNS.COM(@loftor-git)
  5. DNSPOD 国际版
  6. CloudFlare(@tongyifan)
  7. HE.net(@NN708) (不支持自动创建记录)
  8. 华为云(@cybmp3)

https://github.com/NewFuture/DDNS

使用如下命令创建容器并运行:

docker run -d --name=hwddns --restart=always -v /opt/ddns/config.json:/config.json --network host newfuture/ddns

其中:/opt/ddns/config.json是你的配置文件,根据个人喜好,自行配置路径,内容需要修改。

修改配置文件:vi /opt/ddns/config.json

  1. {
  2. "$schema": "https://ddns.newfuture.cc/schema/v2.json",
  3. "id": "xxxxxxxxxxxxxx",
  4. "token": "xxxxxxxxxxxxxxxxx",
  5. "dns": "huaweidns",
  6. "ipv6": ["v6.xxxxxx.top"],
  7. "ipv4": [],
  8. "index6": "shell:ifconfig pppoe-wan | grep 2409* | awk '{print $3}' | awk -F'/' '{print $1}'",
  9. "index4": "",
  10. "proxy": "DIRECT",
  11. "debug": true
  12. }

其中id和token是用户名密码,根据你的情况填写

dns字段是dns服务商的名称,根据github上的说明填写.

ipv6字段是待解析的域名,可以填写多个

index6是本教程的关键,按github说明,有如下几种选择:

index4 和 index6 参数说明
  • 数字(0,1,2,3等): 第 i 个网卡 ip
  • 字符串"default"(或者无此项): 系统访问外网默认 IP
  • 字符串"public": 使用公网 ip(使用公网 API 查询,url 的简化模式)
  • 字符串"url:xxx": 打开 URL xxx(如:"url:http://ip.sb"),从返回的数据提取 IP 地址
  • 字符串"regex:xxx" 正则表达(如"regex:192.*"): 提取ifconfig/ipconfig中与之匹配的首个 IP 地址,注意 json 转义(\要写成\\)
    • "192.*"表示 192 开头的所有 ip
    • 如果想匹配10.00.xxxx应该写成"regex:10\\.00\\..\*"("\\"json 转义成\)
  • 字符串"cmd:xxxx": 执行命令xxxx的 stdout 输出结果作为目标 IP
  • 字符串"shell:xxx": 使用系统 shell 运行xxx,并把结果 stdout 作为目标 IP
  • false: 强制禁止更新 ipv4 或 ipv6 的 DNS 解析
  • 列表:依次执行列表中的index规则,并将最先获得的结果作为目标 IP
    • 例如["public", "172.*"]将先查询公网API,未获取到IP后再从本地寻找172开头的IP

数字即网卡编号,敲ip addr即可,注意此处的index是从零开始,ip addr是从1开始,还有个关键的是,index是容器中执行的结果,而不是openwrt shell中的执行结果;还有另外一个坑就是笔者的环境下怎么也无法获取到2409开头的ipv6,失败

default,不好使,放弃

public是利用默认的公网服务器探测ipv6,笔者不好使,放弃

url是利用自定义的公网服务器探测ipv6,笔者试了花生壳的和6.ipw.cn,结果都是错的,放弃

reg是正则,从描述上看,不符合笔者的诉求,放弃

shell:ifconfig pppoe-wan | grep 2409* | awk '{print $3}' | awk -F'/' '{print $1}'

这行命令是手动解析字符串的方式从ifconfig输出的结果中,过滤出ipv6,可用。

其他字段参考github的说明填写,没有特殊要求就保持默认。

容器默认是5分钟执行ddns更新脚本,可以登录容器的shell手动运行,对于openwrt,在容器的详情页中,选择【控制台】,这样就可以根据自己的情况调试配置文件。

 至此,教程结束,enjoy!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/932726
推荐阅读
  

闽ICP备14008679号