群晖的ddns服务配置支持cloudflare的解析

计划暂时放弃dnspod,全面迁移到cloudflare,却发现群晖支持这么多ddns服务,唯独没有cloudflare,所以找了一下如何让群晖NAS的ddns支持cloudflare解析。

一、cloudflare上需要的准备:

1、复制cloudflare的Zone ID和Get your API token(在cloudflare的域名管理首页右下角)

2、点击Get your API token,进入后点击view,复制token备用

3、在终端中执行以下代码,返回结果中的id就是需要域名的record id,复制备用

curl -X GET "https://api.cloudflare.com/client/v4/zones/[Zone ID]/dns_records" \
     -H "X-Auth-Email: [Email]" \
     -H "X-Auth-Key: [API Key]" \
     -H "Content-Type: application/json"

[Email]替換成你的cloudflare注册邮箱,[API Key]替换成你刚刚获取的API token

至此,cloudflare需要做的工作完成。

二、群晖上需要的准备:

1、打开群晖ssh服务,在终端中输入ssh admin@你的群晖ip,输入admin密码

2、获得群晖root权限,输入sudo -i ,再次输入admin密码

3、下载自动更新ip地址到cloudflare的代码(需要翻墙网络)

wget https://raw.githubusercontent.com/joshuaavalon/SynologyCloudflareDDNS/master/cloudflareddns.sh -O /sbin/cloudflaredns.sh

4、修改脚本中的参数:输入vi /sbin/cloudflaredns.sh 进入配置,只需要改三个地方:RECID、ZONE_ID、把PROXY改成”false”

按a进入编辑模式,编辑完毕按esc退出编辑模式,输入:wq按下Enter,保存并退出即生效,如果输错,重新再进行一次脚本。

5、给予脚本执行权限,输入chmod +x /sbin/cloudflaredns.sh

6、把cloudflaredns.sh加入群晖DSM后台的ddns选项中,在ssh中输入:

vi /etc.defaults/ddns_provider.conf

在随意两个服务中加上,按下键盘a进入编辑模式,复制粘贴上下面的内容

[Cloudflare]
modulepath=/sbin/cloudflaredns.sh
queryurl=https://www.cloudflare.com/

粘贴效果如图,然后输入:wq,按下Enter保存成功。

7、进入群晖DSM后台配置ddns

到此,你已经完成全部配置,可以测试联机,状态显示正常即可以正常使用。

评论

  1. zane
    Windows Chrome
    已编辑
    3周前
    2020-9-29 22:46:23

    curl -X GET “https://api.cloudflare.com/client/v4/zones/%5BZone ID]/dns_records”
    -H “X-Auth-Email: [Email]”
    -H “X-Auth-Key: [API Key]”
    -H “Content-Type: application/json”
    执行这一步骤后。。生成的那个ID号有什么用途呀?
    还有vi /sbin/cloudflaredns.sh文件我进去,与你的有区别,麻烦帮忙过目一下,看看我是哪出错了。

    !/bin/bash

    set -e;
    ipv4Regex=”((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])”
    proxy=”false”

    DSM Config

    username=”$1″
    password=”$2″
    hostname=”$3″
    ipAddr=”$4″
    if [[ $ipAddr =~ $ipv4Regex ]]; then
    recordType=”A”;
    else
    recordType=”AAAA”;
    fi
    listDnsApi=”https://api.cloudflare.com/client/v4/zones/${username}/dns_records?type=${recordType}&name=${hostname}”
    createDnsApi=”https://api.cloudflare.com/client/v4/zones/${username}/dns_records”
    res=$(curl -s -X GET “$listDnsApi” -H “Authorization: Bearer $password” -H “Content-Type:application/json”)
    resSuccess=$(echo “$res” | jq -r “.success”)
    if [[ $resSuccess != “false” ]]; then
    echo “badauth”;
    exit 1;
    fi
    recordId=$(echo “$res” | jq -r “.result[0].id”)
    recordIp=$(echo “$res” | jq -r “.result[0].content”)
    if [[ $recordIp = “$ipAddr” ]]; then
    echo “nochg”;
    exit 0;
    fi
    if [[ $recordId = “null” ]]; then

    Record not exists

    res=$(curl -s -X POST "$createDnsApi" -H "Authorization: Bearer $password" -H "Content-Type:application/json" --data "{\"type\":\"$recordType\",\"name\":\"$hostname\",\"content\":\"$ipAddr\",\"proxied\":$proxy}")

    else

    Record exists

    updateDnsApi="https://api.cloudflare.com/client/v4/zones/${username}/dns_records/${recordId}";
    res=$(curl -s -X PUT "$updateDnsApi" -H "Authorization: Bearer $password" -H "Content-Type:application/json" --data "{\"type\":\"$recordType\",\"name\":\"$hostname\",\"content\":\"$ipAddr\",\"proxied\":$proxy}")

    fi
    “/sbin/cloudflaredns.sh” [readonly] 55L, 1644C 1,1 Top
    我 Cloudflare服务提供商是增加进去了,但状态都是是认证失败。
    求大神指导。谢谢!

    • keesenz 博主
      iPhone AppleWebKit
      3周前
      2020-9-29 22:50:12

      第二部分中第4步,需要一个RECID就是填这个ID。

      • zane
        Windows Chrome
        3周前
        2020-9-29 23:22:55

        这么晚了,还在线,感谢回复。
        但我这里面好像找不到RECID和ZONE_ID。不知道代码里面是用什么表达出来的。
        空的时候麻烦帮忙看下上面那段代码吧。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇