{"id":15148650,"url":"https://github.com/subbyte/cloudflare-ddns-posix","last_synced_at":"2026-01-21T12:01:21.716Z","repository":{"id":223181637,"uuid":"759510194","full_name":"subbyte/cloudflare-ddns-posix","owner":"subbyte","description":"Cloudflare DDNS update service","archived":false,"fork":false,"pushed_at":"2025-02-18T03:43:56.000Z","size":20,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-07T04:31:28.043Z","etag":null,"topics":["cloudflare","curl","ddns","openbsd","posix","shellscript"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/subbyte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2024-02-18T19:32:38.000Z","updated_at":"2025-02-18T03:44:00.000Z","dependencies_parsed_at":"2025-02-13T08:47:41.885Z","dependency_job_id":"432b116a-33e8-473a-81e3-a6cb7e90d485","html_url":"https://github.com/subbyte/cloudflare-ddns-posix","commit_stats":{"total_commits":4,"total_committers":1,"mean_commits":4.0,"dds":0.0,"last_synced_commit":"a85585ec706941befed0d24580c93e25f2bc207f"},"previous_names":["subbyte/cloudflare-ddns-posix"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/subbyte/cloudflare-ddns-posix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subbyte%2Fcloudflare-ddns-posix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subbyte%2Fcloudflare-ddns-posix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subbyte%2Fcloudflare-ddns-posix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subbyte%2Fcloudflare-ddns-posix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/subbyte","download_url":"https://codeload.github.com/subbyte/cloudflare-ddns-posix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subbyte%2Fcloudflare-ddns-posix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28632781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","curl","ddns","openbsd","posix","shellscript"],"created_at":"2024-09-26T13:21:26.171Z","updated_at":"2026-01-21T12:01:21.710Z","avatar_url":"https://github.com/subbyte.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloudflare Dynamic DNS Update Service\n\nMost existing Cloudflare DDNS scripts\n1. Use Python for network access (libressl complication on OpenBSD)\n2. Access Cloudflare API for every checkup\n3. May not handle domain properties such as *proxied*/*non-proxied*\n\n## Design\n\n- Keep it simple (no Python, no bash) to run on BSD\n- Track IP update fast (every minute) without authenticated Cloudflare API\n- Be comprehensive regarding error handling and logging\n\nHow to fast track IP update?\n\nThis script is designed to be run as cron job every minute. To minimize\nauthenticated connections to Cloudflare, it has an argument `sentinel_domain`,\nwhich is any *non-proxied* domain in the given zone. `sentinel_domain` resolves\nto the public IP directly (monitored publically with `dig`). If it is different\nfrom the current public IP, then the script connects to Cloudflare to update\nthe DNS records.\n\nWhy comprehensive?\n\nThe big drawback of shell scripting is unenforced error handling, especially\ncompared to pure functional languages such as Haskell. This could lead to tons\nof unexpected behaviors in long-term real-world deployments. We need\ncomprehensive error handling and logging here.\n\n## Requirements\n\n- `dig`\n- `curl`\n- `jq`\n\n## Install\n\n1. Create `/etc/ddns/cloudflare.keys` with contents:\n\n```\nZONE_ID=xxxxxx\nAPI_TOKEN=xxxxxx\n```\n\n2. Set the file `/etc/ddns/cloudflare.keys` to be only readable by the ddns service executor\n\n3. Copy `ddns` to a directory of your choice, e.g., `/usr/local/bin/`\n\n4. Add a cron job using `crontab -e` under the service executor/user:\n\n```\n* * * * * /usr/local/bin/ddns /etc/ddns/cloudflare.keys sentinel.domain first.domain second.domain 2\u003e\u00261 | /usr/bin/logger -t ddns\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubbyte%2Fcloudflare-ddns-posix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsubbyte%2Fcloudflare-ddns-posix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubbyte%2Fcloudflare-ddns-posix/lists"}