{"id":25421298,"url":"https://github.com/dingdangdog/cloudflare_ddns","last_synced_at":"2025-10-28T05:03:52.328Z","repository":{"id":273208335,"uuid":"918911371","full_name":"dingdangdog/cloudflare_ddns","owner":"dingdangdog","description":"Simple script to quickly implement DDNS based on CloudFlare.","archived":false,"fork":false,"pushed_at":"2025-08-26T05:45:47.000Z","size":71,"stargazers_count":17,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-26T06:19:35.566Z","etag":null,"topics":["cloudflare","ddns","myip","whoiam"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dingdangdog.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-19T07:39:06.000Z","updated_at":"2025-08-26T05:45:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"8b7895d1-34de-4328-9689-23e92ed8bad1","html_url":"https://github.com/dingdangdog/cloudflare_ddns","commit_stats":null,"previous_names":["dingdangdog/cloudflare_ddns"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/dingdangdog/cloudflare_ddns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdangdog%2Fcloudflare_ddns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdangdog%2Fcloudflare_ddns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdangdog%2Fcloudflare_ddns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdangdog%2Fcloudflare_ddns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dingdangdog","download_url":"https://codeload.github.com/dingdangdog/cloudflare_ddns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingdangdog%2Fcloudflare_ddns/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281386589,"owners_count":26492014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-28T02:00:06.022Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","ddns","myip","whoiam"],"created_at":"2025-02-16T20:25:54.457Z","updated_at":"2025-10-28T05:03:52.322Z","avatar_url":"https://github.com/dingdangdog.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CloudFalre DDNS\n\n[简体中文] [English](./README_EN.MD)\n\n快速实现基于Cloudflare的DDNS。\n\n\u003e **悲报：现在调用CF的API报错：`curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.cloudflare.com:443`，看来需要上科技了。。。**\n\u003e \n\u003e 为了解决调用CFAPI报错问题，临时增加了代理接口 `proxyapi`，因此从 `1.0.0` 版本以后，配置有所变化，请自行阅读学习。\n\n\n用法简介：\n\n1. 在你需要实现 DDNS 的主机上，安装 `ddns_client`；\n2. 修改其配置文件 `config.json` ([配置参数说明](#配置参数说明))；\n3. 启动 `ddns_client`；\n\n\u003e 提示：`ddns_client` 需要配置一个可以获取自身公网IP的服务接口，如果你想要自己有一个这样的服务，可以部署本项目提供的 `whoiam` 服务。\n\n## 安装\n\n安全前，建议阅读 [服务介绍](#服务介绍) 了解两个模块(`ddns \u0026 whoiam`)的作用。\n\n\u003e 🧨**提示**：无论自动还是手动安装，请在安装后自行修改配置 `config.json` ！（`ddns` 和 `whoiam` 有各自的配置文件，文件名都是 `config.json`）\n\n**安装方式**：\n\n1. [自动安装脚本](#自动安装)（`ddns`/`whoiam`）；\n2. [手动下载](#手动安装)（`ddns`/`whoiam`）；\n3. 源码安装（`ddns`/`whoiam`）；这个就不介绍了，懂代码的一看就会了。\n4. [Docker](#docker)（`ddns`/`whoiam`）；\n5. [Cloudflare Workers](#cloudflareworkers)（`whoiam`）；\n\n### 自动安装\n\n- ddns_client\n\n```sh\ncurl -sSL https://github.com/dingdangdog/cloudflare_ddns/raw/main/script/update_ddns.sh | bash\n```\n\n修改其配置并运行 `ddns_client`。\n\n- whoiam_server\n\n```sh\ncurl -sSL https://github.com/dingdangdog/cloudflare_ddns/raw/main/script/update_whoiam.sh | bash\n```\n\n修改其配置并运行 `whoiam_server`。\n\n- proxy_server（代理服务）\n\n```sh\ncurl -sSL https://github.com/dingdangdog/cloudflare_ddns/raw/main/script/update_proxy.sh | bash\n```\n\n修改其配置并运行 `proxy_server`。\n\n### 手动安装\n\n1. 在 [Last Release](https://github.com/dingdangdog/cloudflare_ddns/releases) 中下载 `ddns_client` 或 `whoiam_server`，或者自行 [打包ddns_client](#打包ddns_client) / [打包whoiam_server](#打包whoiam_server)；\n2. 下载 ddns_client [配置示例](./ddns/config_demo.json) 或者 whoiam_server [配置示例](./whoiam/config_demo.json) 到你的设备，重命名为 `config.json`，然后编辑你的配置信息；\n3. 运行 `ddns_client` 或 `whoiam_server`。\n\n### Docker\n\n请阅读对应的 `docker-compose.yaml` 文件内容，自行选择使用 `docker-compose` 还是 `docker run` 部署，这里就不再详细介绍了，请各位自行学习 `Docker` 吧！\n\n- [ddns: docker-compose.yaml](./ddns/docker-compose.yaml)\n- [whoiam: docker-compose.yaml](./whoiam/docker-compose.yaml)\n- [proxyapi: docker-compose.yaml](./proxyapi/docker-compose.yaml)\n\n### CloudflareWorkers\n\n1. 在 `CloudFlare` 控制台中创建 `Worker`；\n2. 复制 [whoiam.js](./whoiam/whoiam.js) 的全部代码，填入 `worker`；\n3. 启动 `worker`；\n4. 配置环境变量 `CLIENT_KEYS`，可以配置多个，使用 `,` 间隔！\n5. 配置完成后点击 `部署` ，重新部署 `worker`。\n\n## 服务介绍\n\n### ddns\n\n- 代码：[ddns.go](./ddns/ddns.go)\n- 作用：想办法拿到真实 `IP`，拿到 `IP` 后调用 `Cloudflare API` 修改 `DNS` 记录。\n- 用法：部署到你的动态公网IP主机上，修改 [配置信息](./ddns/config_demo.json) 运行即可。\n\n#### 打包ddns_client\n\n\u003e **提示**：下面是在 `Windows` 开发环境中的示例，请使用 `CMD` 终端命令行执行命令，不要在 `PowerShell` 中执行，否则打包的结果可能无法正常执行\n\n```bash\n# 打包Linux二进制文件，在Windows开发环境下的打包方式\ncd ddns\nSET GOOS=linux\nSET GOARCH=amd64\n\ngo build -o ddns_client ddns.go\n```\n\n#### 配置参数说明\n\n- [config_demo.json](./ddns/config_demo.json)\n\n```json\n{\n  \"CLOUDFLARE\": [ // 现在可以配置多个DNS配置了\n    {\n      \"CF_API_TOKEN\": \"xx\", // 请自行获取你的 Cloudflare 配置\n      \"CF_ZONE_ID\": \"xxx\", // 请自行获取你的 Cloudflare 配置\n      \"CF_RECORD_ID\": \"xxx\", // 请自行获取你的 Cloudflare 配置\n      \"DNS_TYPE\": \"A\", // 域名映射到IP，一般使用 A 类型，其他类型请自行修改\n      \"DNS_DOMAIN_NAME\": \"xxx.com\", // 要设置的 DNS 域名\n      \"DNS_DOMAIN_CONTENT\": \"xxx.com\", // 暂时没用\n      \"DNS_TTL\": 1, // 填1会使用cloudflare默认值\n      \"DNS_PROXIED\": false // 开启DNS代理，隐藏服务器真实IP，如有需要请自行开启。\n    }\n  ],\n  \"WHOIAM_API_URL\": \"http://xxx.com/whoiam\", // 获取 真实公网IP 的接口\n  \"WHOIAM_CLIENT_ID\": 0, // 与 whoiam 搭配使用，接口授权 id\n  \"WHOIAM_CLIENT_KEY\": \"Test_Cilent_Key\", // 与 whoiam 搭配使用，接口授权key\n  \"PROXY_API_URL\": \"http://xxx.com/proxy\", // 代理CF更新DNS的api\n  \"PROXY_CLIENT_ID\": 0, // 与 proxyapi 搭配使用，接口授权 id\n  \"PROXY_CLIENT_KEY\": \"Test_Cilent_Key\", // 与 proxyapi 搭配使用，接口授权key\n  \"MODE\": \"development\", // 开发模式，无论是否重复IP，都会更新DNS配置，如果不是开发模式，会自动与上一次IP校验，详情请阅读代码\n  \"INTERVAL\": 180 // 轮询时间间隔，单位为秒\n}\n```\n\n### proxyapi\n\n- 代码：[proxy.go](./proxyapi/proxy.go) | [proxy.js](./proxyapi/proxy.js)\n- 作用：代理服务，解决客户端无法直接调用Cloudflare API的问题。\n- 用法：部署到可以访问Cloudflare API的服务器上，客户端通过此代理服务更新DNS记录。\n\n#### 打包proxy_server\n\n\u003e **提示**：下面是在 `Windows` 开发环境中的示例，请在 `CMD` 终端命令行执行命令，不要在 `PowerShell` 中执行，否则打包的结果可能无法正常执行\n\n```bash\n# 打包Linux二进制文件，在Windows开发环境下的打包方式\ncd proxyapi\nSET GOOS=linux\nSET GOARCH=amd64\n\ngo build -o proxy_server proxy.go\n```\n\n### whoiam\n\n- 代码：[whoiam.go](./whoiam/whoiam.go)\n- 作用：一个简单的获取客户端公网IP并返回的服务。\n- 用法：部署到你的另一台公网服务器上，使用 `ddns_client` 发起请求到 `whoiam` 服务，获取到 `ddns_client` 所在主机的真实公网IP。\n\n#### 打包whoiam_server\n\n\u003e **提示**：下面是在 `Windows` 开发环境中的示例，请在 `CMD` 终端命令行执行命令，不要在 `PowerShell` 中执行，否则打包的结果可能无法正常执行\n\n```bash\n# 打包Linux二进制文件，在Windows开发环境下的打包方式\ncd whoiam\nSET GOOS=linux\nSET GOARCH=amd64\n\ngo build -o whoiam_server whoiam.go\n```\n\n### 公开免费的服务\n\n如果不想自己部署 `whoiam`，可以使用公开免费的接口，但是注意：\n\n1. 保证接口能够被你的服务器访问（部分接口可能被中国大陆墙）；\n2. 保证接口返回值只有IP！如果想要使用其他格式，请自行修改代码！\n3. 如果返回IPV6的IP，则无法使用！\n\n| **接口地址**                                    | **使用限制**                  | **备注**                           |\n| ------------------------------------------- | ----------------------------- | ---------------------------------- |\n| \u003chttps://api.ipify.org\u003e                       | 无限制，免费                  | 简单易用|\n| \u003chttps://icanhazip.com\u003e                       | 无限制，免费                  | 由 Cloudflare 运营，纯文本返回     |\n| \u003chttps://api.seeip.org\u003e                       | 无限制，免费                  | 支持 IPv4/IPv6，开放源代码         |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdingdangdog%2Fcloudflare_ddns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdingdangdog%2Fcloudflare_ddns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdingdangdog%2Fcloudflare_ddns/lists"}