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

本文主要是介绍群晖设置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更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320527

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :