* feat(secondary): Send NOTIFY messages after zone transfer - Modified TransferIn() method to accept a transfer.Transfer parameter - Added NOTIFY message sending after successful zone transfer in secondary plugin - Updated Update() method to pass the transfer handler through the zone update cycle - Added comprehensive tests for the secondary notify functionality Closes #5669 Signed-off-by: liucongran <liucongran327@gmail.com> * fix(secondary): Fix TransferIn method call in test Update test to pass nil parameter to TransferIn method after signature change Signed-off-by: liucongran <liucongran327@gmail.com> * refactor(secondary): Clean up imports and add helper methods - Reorder imports for consistency - Add hasSOA() and getSOA() helper methods to Zone - Remove unnecessary blank lines in tests Signed-off-by: liucongran <liucongran327@gmail.com> * fix(test): Fix variable declaration in secondary test Change corefile variable assignment to use short declaration syntax (:=) to fix compilation error. Signed-off-by: liucongran <liucongran327@gmail.com> * refactor(secondary): Use getSOA helper method in shouldTransfer Replace direct SOA access with getSOA() helper method for consistency. Signed-off-by: liucongran <liucongran327@gmail.com> --------- Signed-off-by: liucongran <liucongran327@gmail.com> Co-authored-by: liucongran <liucongran@cestc.cn>
secondary
Name
secondary - enables serving a zone retrieved from a primary server.
Description
With secondary you can transfer (via AXFR) a zone from another server. The retrieved zone is not committed to disk (a violation of the RFC). This means restarting CoreDNS will cause it to retrieve all secondary zones.
If the primary server(s) don't respond when CoreDNS is starting up, the AXFR will be retried indefinitely every 10s.
Syntax
secondary [ZONES...]
- ZONES zones it should be authoritative for. If empty, the zones from the configuration block are used. Note that without a remote address to get the zone from, the above is not that useful.
A working syntax would be:
secondary [zones...] {
transfer from ADDRESS [ADDRESS...]
}
transfer fromspecifies from which ADDRESS to fetch the zone. It can be specified multiple times; if one does not work, another will be tried. Transferring this zone outwards again can be done by enabling the transfer plugin.
When a zone is due to be refreshed (refresh timer fires) a random jitter of 5 seconds is applied, before fetching. In the case of retry this will be 2 seconds. If there are any errors during the transfer in, the transfer fails; this will be logged.
Examples
Transfer example.org from 10.0.1.1, and if that fails try 10.1.2.1.
example.org {
secondary {
transfer from 10.0.1.1 10.1.2.1
}
}
Or re-export the retrieved zone to other secondaries.
example.net {
secondary {
transfer from 10.1.2.1
}
transfer {
to *
}
}
Bugs
Only AXFR is supported and the retrieved zone is not committed to disk.
See Also
See the transfer plugin to enable zone transfers to other servers. And RFC 5936 detailing the AXFR protocol.