CloudFlare动态域名助手 Nodejs版

CloudFlare动态域名助手 Nodejs版

不知道有多少人用CloudFlare的CDN呢?前段时间又重新写了一遍其API的CMD Line Tool。

然后外面加了个C#的Shell。(当然核心还是Node的啦)

然后粗粗实现了用CloudFlare就可以动态域名啦。

新的GUI版本在:https://github.com/XadillaX/CloudFlareDynamicHelper

以前的旧版本是:https://github.com/XadillaX/dloucflare


4 回复

CloudFlare动态域名助手 Nodejs版

不知道有多少人用CloudFlare的CDN呢?最近我重新编写了一个使用CloudFlare API的Node.js工具。该工具可以让你通过命令行动态更新你的DNS记录,以便保持你的IP地址始终是最新的。

功能概览

  • 动态DNS更新:自动更新CloudFlare中的DNS记录以匹配当前的公网IP。
  • 简单易用:通过命令行工具实现,支持多种操作系统。
  • 灵活配置:支持多种配置选项,方便用户根据自己的需求进行定制。

使用方法

首先,你需要在CloudFlare中注册一个账户,并为你的域名添加相应的DNS记录。接着,你可以在GitHub上找到我的项目并下载源码:

git clone https://github.com/XadillaX/CloudFlareDynamicHelper.git
cd CloudFlareDynamicHelper

安装所需的依赖包:

npm install

接下来,你需要创建一个配置文件config.json,并在其中填写你的CloudFlare API令牌、Zone ID以及需要更新的DNS记录的详细信息:

{
    "apiToken": "your-cloudflare-api-token",
    "zoneId": "your-zone-id",
    "dnsRecord": {
        "name": "your-subdomain.example.com",
        "type": "A"
    }
}

最后,你可以通过运行以下命令来启动动态DNS更新:

node index.js

示例代码

以下是一个简单的Node.js脚本示例,用于获取当前的公网IP并更新到CloudFlare的DNS记录中:

const axios = require('axios');
const fs = require('fs');

// 读取配置文件
const config = JSON.parse(fs.readFileSync('config.json', 'utf8'));

// 获取当前公网IP
async function getPublicIp() {
    const response = await axios.get('https://api.ipify.org?format=json');
    return response.data.ip;
}

// 更新DNS记录
async function updateDnsRecord(ip) {
    const url = `https://api.cloudflare.com/client/v4/zones/${config.zoneId}/dns_records`;
    const data = {
        type: config.dnsRecord.type,
        name: config.dnsRecord.name,
        content: ip
    };

    const response = await axios.put(url, data, {
        headers: {
            'Authorization': `Bearer ${config.apiToken}`,
            'Content-Type': 'application/json'
        }
    });

    if (response.status === 200) {
        console.log(`DNS record updated successfully to ${ip}`);
    } else {
        console.error('Failed to update DNS record.');
    }
}

(async () => {
    const currentIp = await getPublicIp();
    await updateDnsRecord(currentIp);
})();

总结

以上就是如何使用Node.js实现CloudFlare的动态DNS更新功能。这个工具可以帮助你轻松地保持你的域名解析指向最新的公网IP。如果你有任何问题或建议,欢迎在GitHub上提交issue或pull request。


cloudflare 好用不, 最近想尝试下

我一直在用cloudflare。毕竟国内的都要备案。

CloudFlare动态域名助手 Node.js版

CloudFlare 是一个非常强大的 CDN 和 DNS 管理服务。如果你希望动态地更新你的 DNS 记录(例如,当你需要更新你的 IP 地址时),可以使用 CloudFlare 提供的 API 来实现。

下面将介绍如何使用 Node.js 编写一个简单的 CloudFlare 动态域名助手。

步骤1: 安装依赖

首先,确保你已经安装了 Node.js 和 npm(Node 包管理器)。你可以使用以下命令来创建一个新的项目并安装必要的包:

mkdir cloudflare-helper
cd cloudflare-helper
npm init -y
npm install cf-workers-cli axios
  • cf-workers-cli 是 CloudFlare 的官方命令行工具。
  • axios 是一个常用的 HTTP 客户端库,用于发送 HTTP 请求到 CloudFlare API。

步骤2: 创建脚本

创建一个名为 update-dns.js 的文件,并添加以下内容:

const axios = require("axios");

// 你的 CloudFlare 账户信息
const EMAIL = "your-email@example.com";
const API_KEY = "your-api-key";

// Zone ID 和记录 ID
const ZONE_ID = "your-zone-id";
const RECORD_ID = "your-record-id";

// 获取当前的公网 IP 地址
async function getPublicIP() {
    const response = await axios.get("https://api.ipify.org");
    return response.data;
}

// 更新 DNS 记录
async function updateDNSRecord(ip) {
    const url = `https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}`;
    
    const data = {
        type: "A",
        name: "your-domain.com", // 替换为你的域名
        content: ip,
        ttl: 120,
        proxied: false
    };

    try {
        const response = await axios.put(url, data, {
            headers: {
                "Content-Type": "application/json",
                "Authorization": `Bearer ${API_KEY}`
            }
        });
        console.log("DNS 记录更新成功:", response.data);
    } catch (error) {
        console.error("DNS 记录更新失败:", error.response.data);
    }
}

(async () => {
    const currentIP = await getPublicIP();
    console.log("当前公网 IP 地址:", currentIP);

    // 检查是否需要更新
    const currentDNSIP = await getDNSRecord(ZONE_ID, RECORD_ID); // 你需要自己实现 getDNSRecord 函数
    if (currentDNSIP !== currentIP) {
        await updateDNSRecord(currentIP);
    } else {
        console.log("DNS 记录已经是最新状态");
    }
})();

解释

  • 获取当前公网 IP:使用 axiosapi.ipify.org 发送请求,获取当前的公网 IP 地址。
  • 更新 DNS 记录:使用 CloudFlare 的 API 更新指定域名的 A 记录。
  • 检查是否需要更新:比较当前公网 IP 和 DNS 记录中的 IP 地址,只有当两者不同时才进行更新。

注意事项

  • 将上述代码中的 your-email@example.com, your-api-key, your-zone-id, your-record-id, 和 your-domain.com 替换为你自己的信息。
  • 你需要实现 getDNSRecord 函数来获取当前的 DNS 记录,以便与当前的公网 IP 进行对比。

以上就是使用 Node.js 实现 CloudFlare 动态域名助手的基本步骤。希望对你有所帮助!

回到顶部