coredns/plugin/secondary
Miek Gieben 004c5fca9d
all: simply registering plugins (#3287)
Abstract the caddy call and make it simpler.

See #3261 for some part of the discussion.

Go from:

~~~ go
func init() {
       caddy.RegisterPlugin("any", caddy.Plugin{
               ServerType: "dns",
               Action:     setup,
       })
}
~~~

To:

~~~ go
func init() { plugin.Register("any", setup) }
~~~

This requires some external documents in coredns.io to be updated as
well; the old way still works, so it's backwards compatible.

Signed-off-by: Miek Gieben <miek@miek.nl>
2019-09-20 08:02:30 +01:00
..
log_test.go Clean up tests logging (#1979) 2018-07-19 16:23:06 +01:00
OWNERS Add OWNERS file (#1486) 2018-02-08 10:55:51 +00:00
README.md plugins: set upstream unconditionally (#2956) 2019-07-02 16:23:47 +01:00
secondary.go Remove the word middleware (#1067) 2017-09-14 09:36:06 +01:00
setup.go all: simply registering plugins (#3287) 2019-09-20 08:02:30 +01:00
setup_test.go Update Caddy to 1.0.1, and update import path (#2961) 2019-07-03 09:04:47 +08:00

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.

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
    transfer to ADDRESS
}
  • transfer from specifies from which address to fetch the zone. It can be specified multiple times; if one does not work, another will be tried.
  • transfer to can be enabled to allow this secondary zone to be transferred again.

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 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
        transfer from 10.1.2.1
    }
}

Or re-export the retrieved zone to other secondaries.

. {
    secondary example.net {
        transfer from 10.1.2.1
        transfer to *
    }
}

Bugs

Only AXFR is supported and the retrieved zone is not committed to disk.