找回密码
 立即注册
CeraNetworksBGVM服务器主机交流IP归属甄别会员请立即修改密码
查看: 10|回复: 0

全球技术论坛,ROS7.9.2 CF DDNS怎么弄啊,谷歌,gpt都不行

[复制链接]

18

主题

158

回帖

594

积分

高级会员

积分
594
发表于 2023-6-7 02:42:55 | 显示全部楼层 |阅读模式
如题,X86 PVE ros+op   ROS主路由 移动+联通,联通有公网IP想DDNS,死活弄不成,技术老大该怎么弄呢?》




#########################################################################
#         ==================================================            #
#         $ Mikrotik RouterOS update script for CloudFlare $            #
#         ==================================================            #
#              Credits for Samuel Tegenfeldt, CC BY-SA 3.0              #
#                        Modified by kiler129                           #
#                        Modified by viritt                             #
#                        Modified by hscpro                             #
#########################################################################

################# 程序配置信息 #################
#调试信息 true/false
:local CFDebug "false"
#IPV4使用的接口
:global WANInterface4 "pppoe-out1"
#IPV6使用的接口
:global WANInterface6 "pppoe-out1"
#IPV6后缀("::"解析到RouterOS;可填写局域网内LAN固定后缀解析到内网某个设备,)
:local LANipv6end ":xxxx:xxxx:xxxx:xxxx"
#TTL
:local CFttl "120"
#主域名
:local CFzone "hscbook.com"
#IPv4子域名
:local CFdomain "ipv4.hscbook.com"
:local CFdomainid "087dxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#双栈IPv6域名ID
:local CFdomainid46 "8adcxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#IPv6子域名 true/false
:local switchv6 "true"
:local CFdomain6 "ipv6.hscbook.com"
:local CFdomainid6 "f100xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#CloudFlare账号与APIKEY
:local CFemail "[email protected]"
:local CFtkn "101fbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
:local CFzoneid "c25abxxxxcxxxxxxxxxxxxxxxxxxxxxx"

################# 内部变量 #################
#ipv4
:local currentIP ""
:local resolvedIP ""
:global WANip ""
#ipv6
:local currentIP6 ""
:local resolvedIP6 ""
:global WANip6 ""

################# 解析和设置IP变量 #################
#获取公网IPv4
:set currentIP [/ip address get [/ip address find interface=$WANInterface4 ] address];
:set WANip [:pick $currentIP 0 [:find $currentIP "/"]];
#获取域名IPv4
:set resolvedIP [:resolve $CFdomain];
#获取公网IPv6(DHCP方式)以及域名IPv6
:if ([/ipv6 dhcp-client get [find interface=$WANInterface6] status] = "bound") do={
    :if ([/ipv6 dhcp-client get [find interface=$WANInterface6 status=bound] prefix] != "true") do={
        :set currentIP6 [/ipv6 dhcp-client get [find interface=$WANInterface6 status=bound] prefix];
        #IPv6地址=公网IPv6前缀+设定的后缀
        :set WANip6 ([:pick $currentIP6 0 [:find $currentIP6 "::/"]] . $LANipv6end);
        :set resolvedIP6 [:resolve $CFdomain6];
    };
} else={
    :log info ("CF: 本机没有启用IPv6或配置不正确")
    :set switchv6 "false"
}
################# 生成 CloudFlare API 链接 (v4) #################
#IPv4
:local CFurl4 ""
:set CFurl4 ($CFurl4 . "$CFzoneid/dns_records/$CFdomainid");
#IPv6
:local CFurl46 ""
:local CFurl6 ""
:if ($switchv6 = "true") do={
    :set CFurl46 ($CFurl46 . "$CFzoneid/dns_records/$CFdomainid46");
    :set CFurl6 ($CFurl6 . "$CFzoneid/dns_records/$CFdomainid6");
};

################# 将调试信息写入日志 #################
:if ($CFDebug = "true") do={
    :log info ("CF: 调试模式打开")
    :log info ("CF: 解析域名 $CFdomain")
    :log info ("CF: 域名解析IPv4 $resolvedIP")
    :log info ("CF: 当前公网IPv4 $WANip")
    :log info ("CF: 使用的API地址v4 $CFurl4&content=$WANip")
    :if ($switchv6 = "true") do={
        :log info ("CF: 域名解析IPv6 $resolvedIP6")
        :log info ("CF: 当前公网IPv6 $WANip6")
        :log info ("CF: 使用的API地址v6 $CFurl6&content=$WANip")
    };
    :put "Get CFdomainid: curl -X GET \\"" -H \\"X-Auth-Email: $CFemail\\" -H \\"X-Auth-Key: $CFtkn\\" -H \\"Content-Type: application/json\\" | python -mjson.tool"
};

################# IPv4比较和更新域名记录 #################
:if ($resolvedIP != $WANip) do={
    :log info ("CF: 正在更新 IPv4 解析地址 $CFdomain = $WANip")
    /tool fetch http-method=put mode=https url="$CFurl4" http-header-field="X-Auth-Email

CFemail,X-Auth-Key

CFtkn,content-type:application/json" as-value output=user http-data="{\\"type\\":\\"A\\",\\"name\\":\\"$CFdomain\\",\\"content\\":\\"$WANip\\",\\"ttl\\"

CFttl,\\"proxied\\":false}"
    #/ip dns cache flush 执行间隔时大于TTS一倍可免于清理dns(TTS120->5m TTS300->10m)
} else={
    :log info "CF: IPv4公网地址与解析的地址匹配无需更新!"
}

################# IPv6比较和更新域名记录 #################
:if ($switchv6 = "true") do={
    :if ($resolvedIP6 != $WANip6) do={
        #双栈
        :log info ("CF: 正在更新 IPv6 解析地址 $CFdomain = $WANip6")
        /tool fetch http-method=put mode=https url="$CFurl46" http-header-field="X-Auth-Email

CFemail,X-Auth-Key

CFtkn,content-type:application/json" as-value output=user http-data="{\\"type\\":\\"AAAA\\",\\"name\\":\\"$CFdomain\\",\\"content\\":\\"$WANip6\\",\\"ttl\\"

CFttl,\\"proxied\\":false}"
        #单IPv6域名
        :log info ("CF: 正在更新 IPv6 解析地址 $CFdomain6 = $WANip6")
        /tool fetch http-method=put mode=https url="$CFurl6" http-header-field="X-Auth-Email

CFemail,X-Auth-Key

CFtkn,content-type:application/json" as-value output=user http-data="{\\"type\\":\\"AAAA\\",\\"name\\":\\"$CFdomain6\\",\\"content\\":\\"$WANip6\\",\\"ttl\\"

CFttl,\\"proxied\\":false}"
        #/ip dns cache flush
    } else={
        :log info "CF: IPv6公网地址与解析的地址匹配无需更新!"
    }
}

********************************************************************************

配置脚本
在 CloudFlare 域名主页的最下面 API 处

将 Zone ID 填入脚本的 CFzoneid 变量
点击 Get your API token 获取 API token 填入脚本的 CFtkn 变量
将 CloudFlare 的邮箱账号填入 CFemail 变量
根据三项信息套入 url -X GET \\"" -H \\"X-Auth-Email: $CFemail\\" -H \\"X-Auth-Key: $CFtkn\\" -H \\"Content-Type: application/json\\" | python -mjson.tool" 并在 linux 终端中运行可取得子域名的 CFid 并填入 CFdomainid 变量

其他变量根据注释以实际情况自行修改后点击 Run Script 运行脚本测试,查看系统日志无报错即可



获取不到CFdomainid
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|HS2V主机综合交流论坛

GMT+8, 2024-5-16 20:55 , Processed in 0.069957 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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