1.15.0 (2024-10-01)
This is a major release with many improvements:
- New
CLOUDFLARE_*
variables: Cloudflare is transitioning its tools to use the new prefixCLOUDFLARE_*
. Therefore, the updater now acceptsCLOUDFLARE_API_TOKEN
andCLOUDFLARE_API_TOKEN_FILE
. The oldCF_API_TOKEN
andCF_API_TOKEN_FILE
will still be fully supported until 2.0.0, then deprecated (but still supported) until 3.0.0. - Improved custom IP providers: The updater now forces IPv4 or IPv6 when connecting to custom IP providers
url:<URL>
. This solves a long-standing issue where custom providers couldn't be used on dual-stack machines supporting both IPv4 and IPv6. This enforcement ensures predictable IPv4/IPv6 detection on such machines. - Stricter IP validation: The updater now rejects unusual IP addresses for updating DNS records, such as link-local addresses or IPv4-mapped IPv6 addresses for AAAA records. These addresses are unsuitable and may cause trouble.
- Experimental support of using a network interface’s IP address (not finalized until 1.16.0): Experimental support lets you use the address assigned to a specific network interface, bypassing the routing table used by the
local
provider. The syntax for this feature is under development and will not be finalized until 1.16.0. Please refer to README and join the discussion on GitHub issue #713 if you are interested.
As a reminder, since 1.13.0, the updater no longer drops superuser privileges and PUID
and PGID
are ignored. Please use Docker’s built-in mechanism to drop privileges. The old Docker Compose template may grant unneeded privileges to the new updater, which is not recommended. Please review the new, simpler, and more secure template in README. In a nutshell, remove the cap_add
attribute and replace the environment variables PUID
and PGID
with the user: "UID:GID"
attribute. Similar options may exist for systems not using Docker Compose.
- ipnet: reject IPv4-mapped IPv6 addresses for updating IPv6 records (#936) (be5b3a7)
- ipnet: tighten the checking of IP addresses (#942) (640d30b)
- pp: print blank lines to separate each round of updating (#958) (0a6c71b)
- provider: fix the name and messages of custom URL providers (#940) (2d95d69)
- provider: force IPv4/IPv6 for custom URL providers (#939) (3e80358)
- updater: actively close idle connections for IP detection (#943) (05cbf7e)
- config: accept
CLOUDFLARE_*
and all compatible token settings (#948) (4fc883c) - provider: get IP from a specific network interface (#941) (69f8cf2) (#947) (4518fac)
1.14.2 (2024-09-13)
This is an urgent hotfix that resolves a nil pointer dereference issue introduced in version 1.14.1.
1.14.1 (2024-09-13)
This version is buggy; use version 1.14.2 instead.
This is a minor release that addresses minor issues and improves the usability of the new feature for managing WAF lists, which was initially introduced in version 1.14.0.
- api: clear a WAF list when it cannot be deleted (#908) (1acf11d)
- api: warn about mismatched attributes (#921) (80388a0)
1.14.0 (2024-08-25)
This is a major release with many improvements! The most significant new feature is the ability to maintain a WAF list of detected IP addresses; you can then refer to the list in your firewall rules. Please consult the README. The second most important update is to use a variant of the Happy Eyeballs (Fast Fallback) algorithm to detect the blockage of 1.1.1.1. As the name of the new algorithm suggests, you should not notice any delay due to the detection, being happy. 😄
As a reminder, since 1.13.0, the updater will no longer drop superuser privileges and PUID
and PGID
will be ignored. Please use Docker’s built-in mechanism to drop privileges. The old Docker Compose template may grant the new updater unneeded privileges, which is not recommended. Please review the new template in README that is simpler and more secure when combined with the new updater. In a nutshell, remove the cap_add
attribute and replace the environment variables PUID
and PGID
with the user: "UID:GID"
attribute. If you are not using Docker Compose, chances are your system supports similar options under different names.
Other notable changes:
- The global Cloudflare account ID will no longer be used when searching for DNS zones.
CF_ACCOUNT_ID
will be ignored. - To reduce network traffic and delay, the Cloudflare API token will no longer be additionally verified via Cloudflare’s token verification API. Instead, the updater will locally check whether the token looks like a valid Bearer Token before using the API.
- Many parts of the README have been rewritten to improve clarity and to document the support of WAF lists.
- The DNS record updating algorithm was revised to be more deterministic, which means the updater will not give up updating stale DNS records (and create new ones) when there are errors; it will simply try again next time. As a result, in very rare cases, the updater may need more rounds to recover from errors.
- api: decouple account IDs from operations on DNS records (#875) (0fa1085)
- api: eliminate potential memory leak in caching (#854) (b9c7327)
- api: make the updating algorithm more deterministic (#864) (b557c41)
- api: remove global account ID and remote token verification (#877) (5a40ea7)
- monitor: retry connections to Uptime Kuma (#890) (8236410)
- setter: do not quote DNS record IDs (#851) (fc8accb)
- updater: delete unmanaged IP addresses from WAF lists (#885) (bf0361c)
- updater: show the hint to disable a network when IP detection timeouts (#859) (bdf154c) (#862) (397e722)
- api: ability to update WAF lists (#797) (180bcd7)
- provider: Happy Eyeballs for 1.1.1.1 v.s. 1.0.0.1 (#883) (be0109b)
1.13.2 (2024-07-23)
This is a quick release to change the default user/group IDs of the shipped Docker images to 1000 (instead of 0, the root
). The change will help many people use the Docker images more safely. You are still encouraged to review whether the default ID 1000 is what you want. If you have already adopted the new recommended Docker template (in README) with user: ...
(not PUID
or PGID
) to explicitly set the user and group IDs, this release does not affect you.
1.13.1 (2024-07-19)
This is a very minor release that improves the error messages produced by the new API token verifier (introduced in 1.13.0). See #813.
1.13.0 (2024-07-16)
This is a major release that no longer drops superuser privileges. Please review the instructions in README for the new recommended setup.
-
The updater will no longer drop superuser privileges and
PUID
andPGID
will be ignored. Please use Docker’s built-in mechanism to drop privileges. The old, hacky Docker Compose template will grant the new updater unneeded privileges, which is less secure and not recommended. Please review the new template in README that is simpler and more secure when combined with the new updater. In a nutshell, removecap_add
completely and adduser: ...
asuser: "1000:1000" # Run the updater with a specific user ID and group ID (in that order). # You should change the two numbers based on your setup.
If you have not, please add
cap_drop: [all]
to drop all Linux capabilities. You should probably removePUID
andPGID
as well because they are now useless. -
In case you are using the
*-nocapdrop
Docker tags, they will no longer be maintained. The updater will no longer drop superuser privileges, and thus thenocapdrop
builds are identical to the regular ones. Just use the regular Docker tags such aslatest
. -
The older versions used to add the comment “Created by cloudflare-ddns” to all newly created DNS records. Since this version, the comment has become configurable, but by default it is empty. To restore the old behavior, add the configuration
RECORD_COMMENT=Created by cloudflare-ddns
(or any comment you want to use).
- api: make record comment of new DNS records configurable using
RECORD_COMMENT
(#783) (b10c9a3) - api: recheck tokens if the network is temporarily down (#790) (15d1a5a)
- api: smarter sanity checking (#796) (80dc7f4)
- cron: show dates when needed (#795) (d1850b1)
- config: recheck 1.1.1.1 and 1.0.0.1 some time later when probing fails (possibly because the network is temporarily down) (#788) (0983b06)
- updater: bail out faster when it times out (#784) (3b42131)
1.12.0 (2024-06-28)
This is a major release with two significant improvements:
- The updater can send general updates via shoutrrr now.
- The updater supports non-Linux platforms now. Linux capabilities are not supported on other platforms, but all other features should run as expected at least on Unix-like platforms.
There are also two notable improvements to the stock Docker images. Starting from this version:
- Annotations are properly added to the Docker images, thanks to the updates to the upstream Docker toolchain.
- A new Docker tag,
1
, is introduced to track the latest version with the major version1
. I plan to develop2.0.0
that may contain larger breaking changes. Sticking to1
instead oflatest
now can avoid unexpected breakage in the future.
Note that the notification system was revamped to integrate shoutrrr. As a result, messages may have been reworded.
- add annotations to Docker images (#651) (dd04d0d) (#652) (fe2ed00) (#653) (56748eb) (#659) (687ccaa), closes #454
- limit the number of bytes read from an HTTP response (for extra security) (#629) (d64e8d4)
- monitor: force non-empty error messages for Uptime Kuma (#624) (a9bce5c) (#774) (df565b9)
- provider: trim the response of
url:URL
(generic provider) before parsing it (#709) (48edb15)
- cron: show the far start time during countdown (#761) (39c659a)
- droproot: support non-Linux platforms (#733) (a93b6ab)
- monitor: prioritize error messages (#622) (2f653ca)
- monitor: send
Failed to detect IPv4/6 address
to monitors (#620) (f1793ad) - notifier: embed shoutrrr (#633) (61f42a0) (#640) (817125e) (#762) (c09e2b2) (#768) (9cdfec3) (#772) (b8d4604), closes #532
- setter: print
(cached)
for results based on cached API responses (#776) (1bcbbf0)
1.11.0 (2023-10-23)
This release adds the experimental support of Uptime Kuma.
UPDATE_CRON=@disabled
is deprecated; useUPDATE_CRON=@once
instead
- add support of Uptime Kuma (#600) (c68eeeb) (#605) (e65531a)
- introduce
UPDATE_CRON=@once
(#607) (aa57602)
1.10.1 (2023-09-17)
- The updater will now keep existing record comments when updating IP addresses. Previously, it would incorrectly erase them. This was a known bug in 1.10.0, and was fixed by fixing the upstream library
cloudflare-go
.
1.10.0 (2023-09-10)
- The current updater will erase existing record comments when updating the IP address due to an unfortunate design in an upstream library. This bug seems to affect all updaters of version 1.8.3 or later (I didn’t really check them). I am attempting to address the bug by fixing the upstream library, but if that does not work, a hack to keep existing record comments will be added to the updater. The bug is tracked by GitHub issue #559.
1.9.4 (2023-06-07)
This is a minor update that comes with a nice bugfix from go-retryablehttp 0.7.4.
1.9.3 (2023-06-06)
This version will automatically switch to 1.0.0.1 when 1.1.1.1 appears to be blocked or intercepted by your ISP or your router. The blockage and interception should not happen, but many ISPs and routers were misconfigured to use 1.1.1.1 as a private IP. The new updater tries to work around it by switching to 1.0.0.1. The long-term solution is to notify your ISP or upgrade your router.
- config: display a message when 1.0.0.1 also doesn't work (#495) (5f5602d)
- config: check 1.1.1.1 only when IPv4 is used (#494) (d0db1be)
- config: use 1.0.0.1 when 1.1.1.1 is blocked (#491) (8b9d160)
1.9.2 (2023-04-11)
1.9.1 (2023-03-15)
This version is a hotfix for running the updater in quiet mode in a system (e.g., Portainer) that expects some output from the updater. Unfortunately, the new quiet mode introduced in 1.9.0 was too quiet for those systems. This version will print out something to make them happy.
1.9.0 (2023-03-15)
- the quiet mode will no longer print the version and the information about superuser privileges (unless there are errors) (#415) (92a4462)
The feature to disable cron is experimental. The intention is to use another mechanism to manage the update schedule and run the updater. The quiet mode was made quieter so that repeated execution of the updater will not lead to excessive logging with non-errors.
1.8.4 (2023-03-03)
This release comes with no user-visible changes. It was compiled by version 1.20.1 of Go (instead of 1.20) and was shipped with version 0.62.0 of the cloudflare-go library that fixed a bug about proxy settings. I believe the bug does not affect the updater, but there's no reason not to use the fixed version. 😄
1.8.3 (2023-02-11)
- api: annotate newly created DNS records (#366) (09bbaf4): this uses the newly available DNS record comments
Upgraded Go to version 1.20.
1.8.2 (2023-01-02)
This release is shipped with a newer golang.org/x/net/http2 that fixes CVE-2022-41717. The updater should not be affected by the CVE, but a vulnerability scanner might still mark the updater or the image as insecure. This release should shut those scanners. No new features are added.
1.8.1 (2022-12-05)
A minor update with internal refactoring and insignificant UI adjustments.
1.8.0 (2022-11-25)
- provider: deprecate possibly unmaintained ipify (#270) (69b5d70)
- monitor: correct printf format string (#265) (0740d61)
- setter: improve monitor messages (#273) (c0599f6)
- monitor: improve Healthchecks integration (#272) (b24cce6)
- pp: add an option to disable emojis (#280) (95d0c67)
- provider: auto retry IP detection (#290) (de4d730)
- provider: warn about the use of weak PRNGs (#254) (ae2c866)
- The
ipify
provider is deprecated.
1.7.2 (2022-11-07)
- This version was published to retract all prior versions on https://pkg.go.dev. There are no observable changes.
1.7.1 (2022-10-23)
TTL
no longer supports templates; onlyPROXIED
supports them- existing templates that worked for 1.7.0 will stop working; see README.markdown for detailed documentation
1.7.0 (2022-09-06)
- config: accept templates for PROXIED and TTL (#214) (a78b96b)
- warn about incorrect TTL values (#206) (c6a7ea8)
- experimental
PROXIED_DOMAINS
andNON_PROXIED_DOMAINS
introduced in 1.6.0 are no longer supported; they are replaced by the new experimental template system
1.6.1 (2022-08-13)
1.6.0 (2022-08-12)
- config: don't print "Monitors: (none)" (#201) (472aef4)
- config: print wildcard domains with prefix
*.
(#198) (caf370c) - config: separate printed domains with comma (#200) (d658d58)
- setter: print out better error messages (#195) (68007f8)
- add systemd unit file for non-Docker users (#139) (bbe48ae)
- per-domain proxy settings (#202) (8b456cf)
1.5.1 (2022-06-23)
- file: fix arguments of pp.Errorf (55c5988)
1.5.0 (2022-06-18)
1.4.0 (2022-05-09)
- api: revise the token verification message (#104) (209afdc)
- updating was wrongly restricted by detection timeout (#159) (b3fc809)
1.3.0 (2021-11-15)
- detector: re-implement the cdn-cgi/trace parser and make it the new default policy; deprecate “cloudflare” in favor of “cloudflare.doh” or “cloudflare.trace” (#102) (ebf0639)
1.2.0 (2021-10-18)
1.1.0 (2021-08-23)
- api: always use ASCII forms of domains (#61) (befb0a9) (#58) (55da36f)
- api: cache results of ListRecords (8680b4b)
- api: more robust splitter for domains (#42) (12648db)
- cmd: actually display version (d619c02)
- config: fix indentation in ReadEnv (7c615a7)
- config: redo parsing (#36) (0801a45)
- pp: use less angry emojis for non-fatal errors (020d326)