当前位置: 首页 > news >正文

群晖设置DDNS (服务商Godaddy被墙 DDNS-GO无法解析 采用自定义脚本方式完成DDNS更新)

起因&解决思路

事情的开始大概是这样的。。godaddy买了个域名,好好的用了半个月。。然后一直更新失败发现被狗东西墙了 

在提一嘴DDNS-GO 解析失败原因

DDNS-GO必须要先向godaddy请求自己的IP地址[这里被墙卡住了],然后比对,再决定是否上传新的地址[上传不会被卡]

所以解决方法是直接整个脚本,管你godaddy上记录的IP是什么,我也不用获取,直接上传获得的IP地址就完事了

测试过的解决方法

  • 在openwrt网关路由上使用透明网关的方式代理并且做DDNS,并且设置端口转发到后端群晖,失败
    • (代理强制使用IPV4,但我要用ipv6啊,直接获取不到IPV6地址)
  • 在openwrt网关路由上使用透明网关的方式代理,然后在后面的群晖上设置DDNS-GO的docker容器,成功
    • (但是总不能给家里所有设备都上一层代理吧,太耗代理的流量了,而且开开关关的也麻烦) 
  • 在群晖系统内设置代理服务器,使用旁路由,然后在后面的群晖上设置DDNS-GO的docker容器,失败
    • (似乎群晖设置的代理,只能群晖用?群晖里docker不走代理。群晖可以curl Google,里面的容器curl不通。折腾很久没折腾成)
  • 群晖系统内设置DDNS,不用ddns-go套件,心有余而力不足
    • (群晖系统内要自定义请求串,看godaddy的文档调半天调不通)
  • 直接去github上找了个godaddy的 DDNS 脚本,并且自行修改以完成ipv6的解析上传,成功(用不着设置啥代理服务器,最方便。为什么这个办法看上面的黄底红字)
    •  源脚本 

      https://github.com/gu1ll0me/godaddy-ddns/blob/master/godaddy.sh

完整脚本

注:我测试发现如果用请求api方式虽然可以获取IP地址,但是用这个地址访问不了我的主机,所以改用ifconfig方式获取网卡网址。我把api方式有关命令全部注释了

       

        使用时,无论ipv6还是ipv4,基本上只要更改最上面几个变量,还有中间PublicIP=`ifconfig -a | gr........(地址获取匹配规则)即可

        完成后将其加入crontab计划任务,每10分钟更新一次

#!/bin/bashKey=这里输入api key
Secret=这里输入api Secret
Domain=你的域名
Type=AAAA #ipv4=A ipv6=AAAA
Name=@  # Record name, as seen in the DNS setup page, default @.
TTL=600#这个是缓存IP 用于与目前比对决定是否更新
# Writable path to last known Public IP record cached. Best to place in tmpfs.
CachedIP=/tmp/current_ip#外部api方式检测IP地址。改用ifconfig方式获取,整段注释
#我测试发现可以获取地址但是用这个地址访问不了我的主机,所以改用ifconfig方式获取网址
#CheckURL=http://api.ipify.org.                 #检测ipv4地址
#CheckURL=https://6.ipw.cn/                     #检测ipv6地址
#CheckURL=https://v6.ident.me                   #检测ipv6地址
#CheckURL=https://speed.neu6.edu.cn/getIP.php   #检测ipv6地址
#PublicIP=$(${Curl} -kLs ${CheckURL})#ifconfig方式获取网卡eth0接口IP地址
PublicIP=`ifconfig -a | grep -A 5 eth0 | grep Glo | grep 64 | awk '{print $3}' | awk -F / '{print $1}'` #自己根据自己要获取的网卡和ip自行修改,每个人都不一样。我这里对于我的地址最大化匹配
echo "ifconfig获得IP为 $PublicIP"#检测IP地址合法性
#由于源脚本针对IPV4进行匹配,IPV6会直接进入else显示failed,所以整段注释
#if [ $? -eq 0 ] && [[ "${PublicIP}" =~ [0-9]{1,3}\.[0-9]{1,3} ]];then
#  echo "${PublicIP}!"
#else
#  echo "Failed ${PublicIP}"#exit 1
#fi#curl请求体
Curl=$(/usr/bin/which curl 2>/dev/null)
Touch=$(/usr/bin/which touch 2>/dev/null)
[ "${Curl}" = "" ] &&
echo "Error: Unable to find 'curl CLI'." && exit 1
[ -z "${Key}" ] || [ -z "${Secret}" ] &&
echo "Error: Requires API 'Key/Secret' value." && exit 1
[ -z "${Domain}" ] &&
echo "Error: Requires 'Domain' value." && exit 1
[ -z "${Type}" ] && Type=A
[ -z "${Name}" ] && Name=@
[ -z "${TTL}" ] && TTL=600
[ "${TTL}" -lt 600 ] && TTL=600
${Touch} ${CachedIP} 2>/dev/null
[ $? -ne 0 ] && echo "Error: Can't write to ${CachedIP}." && exit 1
#[ -z "${CheckURL}" ] && CheckURL=http://api.ipify.org #不使用api接口获取ip地址,改为ifconfig获取,注释掉
#echo -n "Checking current 'Public IP' from '${CheckURL}'..." #不使用api接口获取ip地址,改为ifconfig获取,注释掉#CachedIP与PublicIP比对决定是否更新
#使用上方的key,secret,publicIP等参数更新DDNS
#并判断更新是否成功
if [ "$(cat ${CachedIP} 2>/dev/null)" != "${PublicIP}" ];thenecho -n "Checking '${Domain}' IP records from 'GoDaddy'..."Check=$(${Curl} -kLsH"Authorization: sso-key ${Key}:${Secret}" \-H"Content-type: application/json" \https://api.godaddy.com/v1/domains/${Domain}/records/${Type}/${Name} \2>/dev/null|jq -r '.[0].data')if [ $? -eq 0 ] && [ "${Check}" = "${PublicIP}" ];thenecho -n ${Check}>${CachedIP}echo -e "unchanged!\nCurrent 'Public IP' matches 'GoDaddy' records. No update required!"elseecho -en "changed!\nUpdating '${Domain}' ${Check} -> ${PublicIP}..."Update=$(${Curl} -kLsXPUT -H"Authorization: sso-key ${Key}:${Secret}" \-H"Content-type: application/json" \https://api.godaddy.com/v1/domains/${Domain}/records/${Type}/${Name} \-d "[{\"data\":\"${PublicIP}\",\"ttl\":${TTL}}]" 2>/dev/null)if [ $? -eq 0 ] && [ "${Update}" = "" ];thenecho -n ${PublicIP}>${CachedIP}echo "Success!"eval ${SuccessExec}elseecho "Fail! ${Update}"eval ${FailedExec}exit 1fifi
elseecho "Current 'Public IP' matches 'Cached IP' recorded. No update required!"
fi
exit $?

完成后DDNS更新后进行检测

访问

https://api.godaddy.com/v1/domains/你的域名/records/AAAA/@#AAAA为IPV6

这就成功了捏 

嗯,建议以后买域名先看中国大内网能不能访问。虽然这次是解决了,但是真的太折腾了、、、

相关文章:

群晖设置DDNS (服务商Godaddy被墙 DDNS-GO无法解析 采用自定义脚本方式完成DDNS更新)

起因&解决思路 事情的开始大概是这样的。。godaddy买了个域名,好好的用了半个月。。然后一直更新失败发现被狗东西墙了 在提一嘴DDNS-GO 解析失败原因 DDNS-GO必须要先向godaddy请求自己的IP地址[这里被墙卡住了],然后比对,再决定是否上…...

博客摘录「 MySQL不区分大小写设置」2023年10月31日

操作系统的大小写是否敏感决定了数据库大小写是否敏感,而 Windows 系统是对大小写不敏感的,Linux 系统对大小写敏感。 mysql创建表时, 字符集需要设置"编码集(charset)"和"校验规则(collation)"。 编码集比较常用的有utf8和utf8mb4…...

【UE5】如何在UE5.1中创建级联粒子系统

1. 可以先新建一个actor蓝图,然后在该蓝图中添加一个“Cascade Particle System Component” 2. 在右侧的细节面板中,点击“模板”一项中的下拉框,然后点击“Cascade粒子系统(旧版)” 然后就可以选择在哪个路径下创建级…...

SpringCloud(五) Eureka与Nacos的区别

SpringCloud(二) Eureka注册中心的使用-CSDN博客 SpringCloud(四) Nacos注册中心-CSDN博客 在这两篇博文中我们详细讲解了Eureka和Nacos分别作为微服务的注册中心的使用方法和注意事项,但是两者之间也有一些区别. 一, Nacos实例分类 Nacos实例分为两种类型: 临时实例:如果实例…...

C语言 DAY07:预编译,宏,选择性编译,库(静态库,动态库)

声明与定义分离 声明:将声明单独封装成一个以.h为后缀名的头文件 定义:将定义的变量,函数,数组所在的源文件单独封装成一个.c文件。其实就是在源文件基础上将定义过的所有东西的声明分离出去就是了。 注意:1.声明的…...

[EFI]asus strix b760-i 13900F电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 asus strix b760-i 处理器 I9 13900F 已驱动内存crucial ddr5-5200 64gb(32gb*2)(overclock 5600)已驱动硬盘 WD black sn850 500g*2 已驱动显卡rx570已驱动声卡Realtek ALCS1220A已驱动网卡Intel I225-V 2.5 Gigabit Ethernet已驱动无线网卡蓝牙Fevi T91…...

力扣383.赎金信

原题链接:383.赎金信 根据题意得出,需要判断第一个字符串内的字符有没有都在第二个字符串内出现(会有重复字符),并且范围限制在26个英文小写字母 此时可以考虑用一个数组map 作哈希法映射操作 先将遍历第一个字符串,并让每个字符…...

CORS的原理以及在Node.js中的使用

在前端浏览器中的JavaScript代码发起HTTP请求到服务器的Node.js程序,CORS(跨域资源共享)会在以下几个步骤中发挥作用: 前端JavaScript代码发起请求: 前端浏览器中的JavaScript代码使用XMLHttpRequest对象或Fetch API等…...

kotlin实现单例模式

kotlin实现单例模式,大体分为两种方式,一种饿汉式单例模式,一种懒汉式单例模式。 1.饿汉式单例模式 在类前面加上object关键字,就实现了饿汉式单例模式: object singletonDemo { }在kotlin中,使用这种方式…...

【Java】LinkedList 集合

LinkedList集合特点 LinkedList 底层基于双向链表实现增删 效率非常高,查询效率非常低。 LinkedList源码解读分析 LinkedList 是双向链表实现的 ListLinkedList 是非线程安全的(线程是不安全的)LinkedList 元素允许为null,允许重复元素Linked…...

MySQL-Galera-Cluster集群详细介绍

目录 一、什么是Mysql集群?1.单节点mysql存在的常见问题2.mysql集群介绍3.Mysql集群的优点和风险 二、Mysql集群的一些疑问1.mysql的AB复制和Galera Cluster有什么区别?2.什么情况下适用AB复制,什么情况下使用Galera cluster?3.可…...

JavaScript从入门到精通系列第二十六篇:详解JavaScript中的Math对象

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥连接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻J…...

u盘直接拔出文件丢失怎么找回?u盘文件恢复办法分享!

u盘作为一种便捷的数据存储设备,被广泛地使用。通过u盘,我们可以在不同设备之间轻松传输文件,然而有时候,我们可能因为匆忙或疏忽并未安全弹出u盘,而是直接将u盘拔出,进而导致重要文件丢失,u盘直…...

rust学习-LinkedList

介绍 A doubly-linked list with owned nodes. 自有节点的双向链表 pub struct LinkedList<T, A = Global> whereA: Allocator, {/* private fields */ }使用 Vec 或 VecDeque 几乎总是更好,因为基于数组的容器通常更快、内存效率更高,并且可以更好地利用 CPU 缓存 …...

搭上直播快车,文旅迎来了更大爆发期?

“直播累计观看人数1083万人次&#xff0c;同期在线峰值10万人&#xff0c;抖音平台销售额800万元&#xff0c;荣登食遍天下榜第一名”。 10月28日&#xff0c;“东方甄选看世界”无锡专场直播落幕&#xff0c;又创造了新成绩&#xff0c;“文旅直播”这一新带货模式的发展可行…...

【智能座舱系列】- 深度解密小米Hyper OS,华为HarmonyOS区别

上一篇文章《小米的澎湃OS到底牛不牛?与鸿蒙系统之间差距有多大》,从多个方面比较了小米Hyper OS 与 华为HarmonyOS的区别,本篇文章继续从架构层面深度解读两者本质的区别。 小米澎湃OS是“以人为中心,打造人车家全生态操作系统”,该系统基于深度进化的Android以及自研的V…...

kafka-consumer-groups.sh

通过 kafka-consumer-groups.sh 脚本查看或变更消费组的信息。 查看消费者组信息 ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list 查看指定消费者组的消费位移 ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group g…...

数据仓库-拉链表

在数据仓库中制作拉链表&#xff0c;可以按照以下步骤进行&#xff1a; 确定需求&#xff1a;首先明确需要使用拉链表的场景和需求。例如&#xff0c;可能需要记录历史数据的变化&#xff0c;以便进行时间序列分析等。设计表结构&#xff1a;在数据仓库中&#xff0c;拉链表通…...

【Docker】一些可以直接用的Docker环境

这里罗列一些打包的镜像&#xff0c;方便直接使用。 cu11.6ubuntu18.04 docker push kevinchina/deeplearning:cu11.6ubuntu18.04 FROM nvidia/cuda:11.6.2-cudnn8-devel-ubuntu18.04 RUN apt-get update && apt-get install -y wget git vim curl RUN wget http://…...

Unity2D中瓦片地图的创建与绘制教程

Unity2D中瓦片地图的创建与绘制 素材切割创建地图创建瓦片绘制地图瓦片调色板画笔拓展素材资源链接 素材切割 选中以下素材&#xff0c;以Tiles为例&#xff08;素材链接在文章最下方&#xff09; 修改素材属性。 将Sprite Mode属性改为Multiple多张&#xff08;不然切割不了&…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...