At the moment we're not doing DNSSEC. We
appreciate that it would
be a big challenge.
Another option I considered (less flexible but viable) is just to
run two separate knot instances with the different zones loaded, and
switch traffic to the other set!
For DNSSEC - because the target zone(s) are also internal, I presume
it would be possible to calculate once and then cache the zone so
long as none of its ALIAS targets had changed. This would still be
a hit of calculations as the target zone changed, but it should
taper off in everyday production use.
Our Knot servers are all fed directly - we run 4 of them currently,
two in each datacenter, and they are all fed by a process which
reads database updates from a queue, and rebuilds the zone files and
then reloads them.
The interesting bit of code for a new or updated zone is:
# Do we have config for this zone?
# Check for a template
my $results = $self->knotc_cmds_read("zone[$effective_zone].template");
my $result = $results->[0] // '';
chomp $result;
$result =~ s/^.* = //;
my $metric_type = 'zones_updated';
if ($result ne 'default') {
# setup the new zone
$metric_type = 'zones_added';
my $committer = $self->knotc_begin_transaction_auto();
my ($success, $output) = $self->knotc_cmds([
[ 'conf-set', 'zone.domain', $effective_zone ],
[ 'conf-set', "zone[$effective_zone].template",
'default' ],
]);
unless ($success) {
$Logger->log_fatal("Zone setup failed for $effective_zone: ",
$output);
}
$committer->commit();
}
$self->metrics->{$metric_type}++;
# for new or updated, trigger a zone reload
my ($success, $output) = $self->knotc_cmds([['zone-reload',
$effective_zone]]);
$Logger->log("Zone reload failed for $effective_zone: ", $output) unless
$success;
All the indirection there is a module which automatically sends a
conf-abort if it dies before calling conf-commit and such magic.
The entire zone is built based on a "needs rebuild" trigger placed
in the queue to each server, so they update separately out of that
queue; meaning if one is down for a while it collects a list of what
to do before coming back into service.
So they are all entirely independent of each other.
Bron.
On Wed, Apr 15, 2026, at 12:13, Daniel Salzman wrote:
Bron,
Thanks for the details. Let me think about it.
There is another important aspect of the solution, DNSSEC. Your
proposed solution would require online signing,
which is not ideal for high-traffic environments (unless you have
thousands of servers :-)). What is your stance
on DNSSEC?
Do you use zone transfers, or how do you feed your Knot servers?
Daniel
On 4/15/26 17:01, Bron Gondwana wrote:
>
>
> On Wed, Apr 15, 2026, at 08:08, Daniel Salzman wrote:
>> Hi Bron,
>>
>> Welcome aboard!
>
> Hi Daniel, thank you!
>
>> First of all, I have to say that the ALIAS record type (and
similar alternatives) is rather a workaround until
>> HTTPS/SVCB alias mode is widely supported. We added this type
primarily for use with our Redis backend
>> and we aren't philosophically ready to add processing of it to
the server itself. However, I believe we can find
>> a solution for your needs.
>>
>> I think that your use case, where the target ALIAS zone is
locally available, is not common. Usually, a full DNS resolver
>> is necessary, which is the biggest issue. Our server is focused
on high performance, so performing the resolution
>> while responding to queries is not optimal. In your case it is
not even necessary.
>
> Yes, absolutely -we're not keen to make our server more
expensive. We switched to Knot in the first place because our old
backend was being hammered by DDoS attacks, even behind Cloudflare
caching frontends.
>
>> Possible options:
>> - Using our Redis backend in combination with
https://gitlab.nic.cz/knot/knot-dns/-/blob/master/scripts/redis_unalias.py
<https://gitlab.nic.cz/knot/knot-dns/-/blob/master/scripts/redis_unalias.py>
>> Sorry for the lack of documentation.
>> - If the dynamic records are uniform across the zones, cannot
you use something like (ignore the random zone names)?:
>>
>> knotc> zone-begin --
>> OK
>> knotc> zone-set -- test A 192.168.1.1
>> OK
>> knotc> zone-diff --
>> [.] +test. 3600 A 192.168.1.1
>> [e92bd5f.4738fa5efafc1ebdc3.] +test.e92bd5f.4738fa5efafc1ebdc3.
3600 A 192.168.1.1
>> [63da60e39bb6cd76fa.] +test.63da60e39bb6cd76fa. 3600 A 192.168.1.1
>> [96e07.] +test.96e07. 3600 A 192.168.1.1
>> [aa.] +test.aa. 3600 A 192.168.1.1
>> [center.] +test.center. 3600 A 192.168.1.1
>> [collector.] +test.collector. 3600 A 192.168.1.1
>> [e6a69.] +test.e6a69. 3600 A 192.168.1.1
>> [ecbecfc1abcc.] +test.ecbecfc1abcc. 6536 A 192.168.1.1
>> [hawking.] +test.hawking. 16183 A 192.168.1.1
>> [noc3598.] +test.noc3598. 3600 A 192.168.1.1
>> [records.] +test.records. 3600 A 192.168.1.1
>> knotc> zone-commit --
>> OK
>
> It's sadly not 100% uniform across all zones. We have default
records, which can be overridden by individual customers.
>
>> - If you insist on the dynamic ALIAS resolution, a new query
module could be implemented.
>
> I do think that the ALIAS resolution the way I did it is an exact
match for what we want, it's a layer of indirection for the records
which are "a service provided by us" - the kind of thing you'd just
use a CNAME for if it wasn't for how CNAMEs and MX records behave
so unfortunately.
>
>> What do you think? Maybe more details about your deployment
would help. Feel free to send
>> me relevant zone snippets.
>
> Our goal is to be able to switch all the records with IPs
starting 103.168 to IPs in a separate datacenter when transitioning
traffic to the other site (either deliberately, or for disaster
recovery)
>
> Here is a zone which is absolutely vanilla, no special records.
It's one of my family's domains:
>
>
lorinna.net <http://lorinna.net>. 3600 IN SOA (
ns1.messagingengine.com <http://ns1.messagingengine.com>.
>
postmaster.messagingengine.com
<http://postmaster.messagingengine.com>.
> 2026041300 ;serial
> 86343 ;refresh
> 600 ;retry
> 1209600 ;expire
> 3600 ;minimum
> )
>
lorinna.net <http://lorinna.net>. 3600 IN NS
ns1.messagingengine.com <http://ns1.messagingengine.com>.
>
lorinna.net <http://lorinna.net>. 3600 IN NS
ns2.messagingengine.com <http://ns2.messagingengine.com>.
>
lorinna.net <http://lorinna.net>. 3600 IN MX 10
in1-smtp.messagingengine.com <http://in1-smtp.messagingengine.com>.
>
lorinna.net <http://lorinna.net>. 3600 IN MX 20
in2-smtp.messagingengine.com <http://in2-smtp.messagingengine.com>.
>
lorinna.net <http://lorinna.net>. 3600 IN A 103.168.172.37
>
lorinna.net <http://lorinna.net>. 3600 IN A 103.168.172.52
>
lorinna.net <http://lorinna.net>. 3600 IN TXT "v=spf1
include:spf.messagingengine.com ?all"
> *.lorinna.net. 3600 IN MX 10
in1-smtp.messagingengine.com
<http://in1-smtp.messagingengine.com>.
> *.lorinna.net. 3600 IN MX 20
in2-smtp.messagingengine.com
<http://in2-smtp.messagingengine.com>.
> *.lorinna.net. 3600 IN A 103.168.172.37
> *.lorinna.net. 3600 IN A 103.168.172.52
>
_dmarc.lorinna.net. 3600 IN TXT "v=DMARC1; p=none;"
>
fm1._domainkey.lorinna.net. 3600 IN CNAME (
fm1.lorinna.net.dkim.fmhosted.com
<http://fm1.lorinna.net.dkim.fmhosted.com>.
> )
>
fm2._domainkey.lorinna.net. 3600 IN CNAME (
fm2.lorinna.net.dkim.fmhosted.com
<http://fm2.lorinna.net.dkim.fmhosted.com>.
> )
>
fm3._domainkey.lorinna.net. 3600 IN CNAME (
fm3.lorinna.net.dkim.fmhosted.com
<http://fm3.lorinna.net.dkim.fmhosted.com>.
> )
>
mesmtp._domainkey.lorinna.net. 3600 IN CNAME (
>
mesmtp.lorinna.net.dkim.fmhosted.com
<http://mesmtp.lorinna.net.dkim.fmhosted.com>. )
>
_autodiscover._tcp.lorinna.net. 3600 IN SRV ( 0 1 443
>
autodiscover.fastmail.com <http://autodiscover.fastmail.com>. )
>
_caldav._tcp.lorinna.net. 3600 IN SRV 0 0 0 .
>
_caldavs._tcp.lorinna.net. 3600 IN SRV 0 1 443
d27457.caldav.fastmail.com <http://d27457.caldav.fastmail.com>.
>
_carddav._tcp.lorinna.net. 3600 IN SRV 0 0 0 .
>
_carddavs._tcp.lorinna.net. 3600 IN SRV ( 0 1 443
d27457.carddav.fastmail.com <http://d27457.carddav.fastmail.com>.
> )
>
_imap._tcp.lorinna.net. 3600 IN SRV 0 0 0 .
>
_imaps._tcp.lorinna.net. 3600 IN SRV 0 1 993
imap.fastmail.com
<http://imap.fastmail.com>.
>
_jmap._tcp.lorinna.net. 3600 IN SRV 0 1 443
api.fastmail.com
<http://api.fastmail.com>.
>
_pop3._tcp.lorinna.net. 3600 IN SRV 0 0 0 .
>
_pop3s._tcp.lorinna.net. 3600 IN SRV 10 1 995
pop.fastmail.com
<http://pop.fastmail.com>.
>
_submission._tcp.lorinna.net. 3600 IN SRV 0 0 0 .
>
_submissions._tcp.lorinna.net. 3600 IN SRV 0 1 465
smtp.fastmail.com <http://smtp.fastmail.com>.
>
mail.lorinna.net <http://mail.lorinna.net>. 3600 IN MX 10
in1-smtp.messagingengine.com <http://in1-smtp.messagingengine.com>.
>
mail.lorinna.net <http://mail.lorinna.net>. 3600 IN MX 20
in2-smtp.messagingengine.com <http://in2-smtp.messagingengine.com>.
>
mail.lorinna.net <http://mail.lorinna.net>. 3600 IN A 103.168.172.65
>
>
> And here's one where the apex A record and www A record are
pointed to an external system, but the rest is managed at Fastmail.
>
> miv.org.au <http://miv.org.au>. 3600 IN SOA (
ns1.messagingengine.com <http://ns1.messagingengine.com>.
>
postmaster.messagingengine.com
<http://postmaster.messagingengine.com>.
> 2026041300 ;serial
> 86223 ;refresh
> 600 ;retry
> 1209600 ;expire
> 3600 ;minimum
> )
> miv.org.au <http://miv.org.au>. 3600 IN NS
ns1.messagingengine.com <http://ns1.messagingengine.com>.
> miv.org.au <http://miv.org.au>. 3600 IN NS
ns2.messagingengine.com <http://ns2.messagingengine.com>.
> miv.org.au <http://miv.org.au>. 3600 IN MX 10
in1-smtp.messagingengine.com <http://in1-smtp.messagingengine.com>.
> miv.org.au <http://miv.org.au>. 3600 IN MX 20
in2-smtp.messagingengine.com <http://in2-smtp.messagingengine.com>.
> miv.org.au <http://miv.org.au>. 3600 IN A 178.62.49.34
> miv.org.au <http://miv.org.au>. 3600 IN TXT (
>
google-site-verification=3xg8-ieU1iufBCuguKrrUSGTEnrDYy7aSnPLvN66XHk )
> miv.org.au <http://miv.org.au>. 3600 IN TXT "v=spf1
include:spf.messagingengine.com ?all"
> *.miv.org.au. 3600 IN MX 10
in1-smtp.messagingengine.com
<http://in1-smtp.messagingengine.com>.
> *.miv.org.au. 3600 IN MX 20
in2-smtp.messagingengine.com
<http://in2-smtp.messagingengine.com>.
> *.miv.org.au. 3600 IN A 103.168.172.37
> *.miv.org.au. 3600 IN A 103.168.172.52
> _dmarc.miv.org.au. 3600 IN TXT "v=DMARC1; p=none;"
> fm1._domainkey.miv.org.au. 3600 IN CNAME
fm1.miv.org.au.dkim.fmhosted.com
<http://fm1.miv.org.au.dkim.fmhosted.com>.
> fm2._domainkey.miv.org.au. 3600 IN CNAME
fm2.miv.org.au.dkim.fmhosted.com
<http://fm2.miv.org.au.dkim.fmhosted.com>.
> fm3._domainkey.miv.org.au. 3600 IN CNAME
fm3.miv.org.au.dkim.fmhosted.com
<http://fm3.miv.org.au.dkim.fmhosted.com>.
> mesmtp._domainkey.miv.org.au. 3600 IN CNAME (
>
mesmtp.miv.org.au.dkim.fmhosted.com
<http://mesmtp.miv.org.au.dkim.fmhosted.com>. )
> _autodiscover._tcp.miv.org.au. 3600 IN SRV ( 0 1 443
autodiscover.fastmail.com <http://autodiscover.fastmail.com>.
> )
> _caldav._tcp.miv.org.au. 3600 IN SRV 0 0 0 .
> _caldavs._tcp.miv.org.au. 3600 IN SRV 0 1 443
d442465.caldav.fastmail.com <http://d442465.caldav.fastmail.com>.
> _carddav._tcp.miv.org.au. 3600 IN SRV 0 0 0 .
> _carddavs._tcp.miv.org.au. 3600 IN SRV ( 0 1 443
d442465.carddav.fastmail.com <http://d442465.carddav.fastmail.com>.
> )
> _imap._tcp.miv.org.au. 3600 IN SRV 0 0 0 .
> _imaps._tcp.miv.org.au. 3600 IN SRV 0 1 993
imap.fastmail.com
<http://imap.fastmail.com>.
> _jmap._tcp.miv.org.au. 3600 IN SRV 0 1 443
api.fastmail.com
<http://api.fastmail.com>.
> _pop3._tcp.miv.org.au. 3600 IN SRV 0 0 0 .
> _pop3s._tcp.miv.org.au. 3600 IN SRV 10 1 995
pop.fastmail.com
<http://pop.fastmail.com>.
> _submission._tcp.miv.org.au. 3600 IN SRV 0 0 0 .
> _submissions._tcp.miv.org.au. 3600 IN SRV 0 1 465
smtp.fastmail.com <http://smtp.fastmail.com>.
> mail.miv.org.au <http://mail.miv.org.au>. 3600 IN MX 10
in1-smtp.messagingengine.com <http://in1-smtp.messagingengine.com>.
> mail.miv.org.au <http://mail.miv.org.au>. 3600 IN MX 20
in2-smtp.messagingengine.com <http://in2-smtp.messagingengine.com>.
> mail.miv.org.au <http://mail.miv.org.au>. 3600 IN A 103.168.172.65
>
www.miv.org.au <http://www.miv.org.au>. 3600 IN A 178.62.49.34
>
>
> And here's one that runs entirely separately, just using Fastmail
for DNS:
>
>
dkim2.com <http://dkim2.com>. 3600 IN SOA (
ns1.messagingengine.com <http://ns1.messagingengine.com>.
>
postmaster.messagingengine.com
<http://postmaster.messagingengine.com>.
> 2026040300 ;serial
> 86265 ;refresh
> 600 ;retry
> 1209600 ;expire
> 3600 ;minimum
> )
>
dkim2.com <http://dkim2.com>. 3600 IN NS
ns1.messagingengine.com
<http://ns1.messagingengine.com>.
>
dkim2.com <http://dkim2.com>. 3600 IN NS
ns2.messagingengine.com
<http://ns2.messagingengine.com>.
>
dkim2.com <http://dkim2.com>. 3600 IN MX 10
mail.dkim2.com
<http://mail.dkim2.com>.
>
dkim2.com <http://dkim2.com>. 3600 IN A 134.209.211.166
>
dkim2.com <http://dkim2.com>. 3600 IN TXT "v=spf1 a mx -all"
> *.dkim2.com. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
_dmarc.dkim2.com. 3600 IN TXT ( "v=DMARC1; p=none;
rua=mailto:dmarc@dkim2.com"
> )
>
ed25519._domainkey.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=ed25519;
p=H4AK/+/8XXxmn/bnyOHaqPpyJtrqBf80sgZpnepMPUQ=" )
>
fm1._domainkey.dkim2.com. 3600 IN CNAME
fm1.dkim2.com.dkim.fmhosted.com
<http://fm1.dkim2.com.dkim.fmhosted.com>.
>
fm2._domainkey.dkim2.com. 3600 IN CNAME
fm2.dkim2.com.dkim.fmhosted.com
<http://fm2.dkim2.com.dkim.fmhosted.com>.
>
fm3._domainkey.dkim2.com. 3600 IN CNAME
fm3.dkim2.com.dkim.fmhosted.com
<http://fm3.dkim2.com.dkim.fmhosted.com>.
>
mesmtp._domainkey.dkim2.com. 3600 IN CNAME (
>
mesmtp.dkim2.com.dkim.fmhosted.com
<http://mesmtp.dkim2.com.dkim.fmhosted.com>. )
>
sel1._domainkey.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvwtNJpRLYM99Ya2Vm5Th/BUxw7MazipAvYMHJA80TD9P1F5gx6eHMT8kErqOG5w7ngZPAoEvH0Dq2rfyGC7gqp93RR7xCD/YNm72/uq9NC+zv1gQ3IqeHbKJEd8MQMj4CL+0fhRyAPpMWEPirYGSgVDxKjJHwa0XLlt00iI6DV1m/IhbH2hzcd6WfBBdiFLV+ovTS8InQDedl12aJtRJv/gKLA+6+Nd4DlTb3mBT2JvT0WoIbJ43pZpBR8ItXHOGT75mxMILEcWI2EhtPq/GaJHWbn7RxgyV0I44bTUiKut+8udflCjSpiOBXlFNp20bUQTjNxKNcCiLGFzc8cYFIwIDAQAB"
> )
>
dev.dkim2.com <http://dev.dkim2.com>. 3600 IN A 134.209.211.166
>
mail.dkim2.com <http://mail.dkim2.com>. 3600 IN A 134.209.211.166
>
mailman.dkim2.com <http://mailman.dkim2.com>. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
mailman.dkim2.com <http://mailman.dkim2.com>. 3600 IN A
134.209.211.166
>
mailman.dkim2.com <http://mailman.dkim2.com>. 3600 IN A
134.209.211.166
>
mailman.dkim2.com <http://mailman.dkim2.com>. 3600 IN TXT "v=spf1
a mx -all"
>
_dmarc.mailman.dkim2.com. 3600 IN TXT "v=DMARC1; p=none"
>
sympa.dkim2.com <http://sympa.dkim2.com>. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
sympa.dkim2.com <http://sympa.dkim2.com>. 3600 IN A 134.209.211.166
>
sympa.dkim2.com <http://sympa.dkim2.com>. 3600 IN A 134.209.211.166
>
sympa.dkim2.com <http://sympa.dkim2.com>. 3600 IN TXT "v=spf1 a
mx -all"
>
_dmarc.sympa.dkim2.com. 3600 IN TXT "v=DMARC1; p=none"
>
test1.dkim2.com <http://test1.dkim2.com>. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
test1.dkim2.com <http://test1.dkim2.com>. 3600 IN TXT "v=spf1 a
mx -all"
>
_dmarc.test1.dkim2.com. 3600 IN TXT "v=DMARC1; p=none"
>
ed25519._domainkey.test1.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=ed25519;
p=hwjviTXyzUXSCWayBqE17s/4NSynQKxw58jayHudRAI=" )
>
rsa1024._domainkey.test1.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIubB7x1q3rNGDWgObuKSOyYVtVKmcJpIvtWdRzg71iGRGqMdEE18GAOk+6j+GAcHTppkh4qR1d9vOl4S1L8ClAvSFUz0azi31fLQcMpZbagyseSq9FnF4nHL/7MAA2brAXkVCQ1rZLKNHMwkXGggkA9kg+LloNfSML+utkhN3gQIDAQAB"
> )
>
sel1._domainkey.test1.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqRtvI17L4pHwF58KhyjiN7d74ZHDZia1IOzuXA6hygEuxt0+0Ey9PJvrDpKp/JsJIiJ0Ji8hrQfeMbAX5wHpz8GAkRlWOdorPuZiMZegTU9oD9nWRO/GcAu7Ub4V1pF6AwwfykCmzKbomX7jWa1y0oNgMHMUeZAi1XveQ6cfebJOwtgqWMOTSenY8+p8hU97YFxwKXO0FsAQYvNMMSZAXPM00V/ZaxiZ1UZUCMM/uesVkU7pIOzItGEjoWUrPkIos1GGf+2nBncqNgmivPkJPFeaJXOIL1iHqKJrSzZuTxCWPTQ+JVPyeAgDk0xyGK3RbiyItPjVZhBs7sZekNGVCwIDAQAB"
> )
>
sel2._domainkey.test1.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqiTwabnGlrGDoPlSHpfiWjsbwucsezwm/iU9bjloGqothOM7XNIrS1ub2f5BNz9yQjOhWGJ+fo8DOnF9YdUKXkBxuUdt49eyClLDaUG4Q35hJBWFF1MsmihtJpo6PzXGZYP/c4mPc2vXTPd3hbAqkftMgUCOCUIUyUEXhMl/R6/XkXATcyDId3TsSyQUJk3U+2r/wQJGz5JkOxyDX1NEawfh3GDuppCUFZFWnsrEvolBGDqZk8RG2FNmRysglRau4z9GG8jieXG4NjIT/yOh3pjbYGq4tgrMVZ7AcrIpCRbEJTUCExgrh3iQRXReVPy2qhcgY6BQLF2ahiTBUm2wAwIDAQAB"
> )
>
sel3._domainkey.test1.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr8xHmZoXE3P12DNh5jhFAJjtI9kosn3bISKWYNyn2PAn8E+Ik70iScLj8bFUNcjlLRtBDo5KZ323gdoYS3AUBSJlbkLJKCnQnH6pY+rawmt5kCNJm15DTFlOyZhaMWUilFyVzzGDqXf3d/VzFiX+13GnDdwR1QOnbOTMKx9Y0+nEhlnqRwv3YFjAO1aQOdFzguxMi5wiZQIFtmwwY8GgFIVrEqFq4UCU/hc/E2YcYjHv5zg2KR/zJivfXdLOceHqzJTYdOca/IDqfat2IgOooVVsfHZCCScOutZe9JwWYt98EOiFfvmLs3pvJnBLyGM2BOZUpJnkXSDCnTKxboRnqQIDAQAB"
> )
>
test2.dkim2.com <http://test2.dkim2.com>. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
test2.dkim2.com <http://test2.dkim2.com>. 3600 IN TXT "v=spf1 a
mx -all"
>
_dmarc.test2.dkim2.com. 3600 IN TXT "v=DMARC1; p=none"
>
rsa1024._domainkey.test2.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcSzEVS5IaMQZWJaqmA7dnD1fHuks1mqzY9RfQn9skWCYJZxHx0d45oSSrMt8lSKZiN4FLgbBl0jiLWXq+oPP3rUEhQrqElzyzo1Swn1Phsq45ij655pXFgZpfXvS95nP2GGDrQLcZhi5VNDg9ACoitB1CtxTipRXm8anlzLtg2QIDAQAB"
> )
>
sel1._domainkey.test2.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAolQDA1kFcPW13OQNJv7zEGhf18S+PU8oGUOSScVYRJELDUxZzv0i1OsyNW5T2hZlmTDFRszoxstj1o8JBn9nYm6zfdvr4w8JS5SrAEx8MzI4N/SghA334hbXtXQZ3br179XVgTMGJL0OMWw2Qp0c9HQAtQNF3ckeMiPncWp8e58in5YCjvHhezl8/VGrBx+CsDKxT8JFs/0QluC6AFQuM9ZIsm3RPwf4BsPE0/ADpuA5GUUdYUzhNt2Uq9Wr82BJLt8cy1a9FVEGKxdMhgJ7Gx4hx8GpM/oaiQYMO9VmNZVz8n87BkNOnjlpYFCtfb9FH8/mYPwqaSa0DmcahfeHVQIDAQAB"
> )
>
sel2._domainkey.test2.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3i4wXkWpIYib21p0CZx1dobNCYababIxIZAJO5SEGiK++C7jLgnpqg+lvTKS7eR5q1MO3ZCY19Bgm/PcigLvuLtMzap4yY+h9hnsQYzrdcAamzrpB3cjiNoCNhT0Zp7kRI6Rx0t2Uc91e0CvaFf8zAJIF4VUyQNXx9Gn/SEtNr0iQCNsPptGA1PUGUwDQUGze7fkXtnBOrgvNjILfnUC7MA6W+2+mCYtHzOkRB+t6SMutR2cDSXabjYBL5/1bweL6ABDouGgBnIj9LrY6RcbzrBpLuUAuXi71dLEHs0KW0UdImyUpE1i+thKqhNGaYnaL8KrTlDUC8g62T2kQNuHJQIDAQAB"
> )
>
sel3._domainkey.test2.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuDOUuL/rLDi7fohdOw/sk31eGe5CtX9UEw5pSQv/EyYwW9lxZqi9SwU8Of+z7uHLMFJi+YbYV25CYDUrDIE71WLKou3FL0WyH0U4DrZoR7CBnMjRz92Lqh+VV1PJz0t5mU8YD0O+JJ80jScKIIcC8r1qysQI9Y7EdIAWFZlYS97c6WhKVg94xeOAaRDnpbr80H29g9pqGs4Yk4Hc1r5OXptj12sBMO7JCz/4dQ2Di0JsPOwEjWNbV9ysz8EcSW/+RoFG5Iomf4/q/aW7T6tUGqdj8M0eQ0TO0xW0lc4jqKUHH85LbdZFhcDIBUg8ML6mRgSVy779MxMP7+uw3iVLQQIDAQAB"
> )
>
test3.dkim2.com <http://test3.dkim2.com>. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
test3.dkim2.com <http://test3.dkim2.com>. 3600 IN TXT "v=spf1 a
mx -all"
>
_dmarc.test3.dkim2.com. 3600 IN TXT "v=DMARC1; p=none"
>
ed25519._domainkey.test3.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=ed25519;
p=reUWo3pXLWHk5dILIK4NoCR3F2iACFdQ/FlhvVvMtxc=" )
>
sel1._domainkey.test3.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAju2t0p4xwgCT4UCRgfNZ27U6nhQ5sHSV23hR2TBngda8yAChPInsdVyjJv+cSeZf7tG7yKrzKTM9KaKK8BzBguYrJ9DRJqg7MPPsXlZJ53Ydku3GKLcuiBmDrwUxyBGAMFxndVs+uNJkF2qi+RK0Dgd45wMZiJJF1K3bPjkkQub4Ex4MXvbIqqThthlYiKUGHFBPKg7DALkdoIlegrAP4xZ43Cszd5u9AvNdjvAr31ajjaGrGuQH+gW5kXdwZpDiQgvi0Obnr7AZeVSyr4I5CTNLoj4ed4I0AOJ3TsoZM1fFzHr/rqhL+oEKW3tA7UYGaRoXFDei0qLXhRGTJjzscQIDAQAB"
> )
>
sel2._domainkey.test3.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAynXlN4POdoj82RpdpD7iG8RR/RF1TjQxy65Fu/12cV0YYX1mZLOHcvSUkxkxMKSxdZnv/7UKuQcbdQXC7jBah/JQNYzLVDUe3bKbrjsypczRPYKajxnEYCsjvoKDR9g2XtlppGrchst77wcj3SWplz2MGBk5E2SGVo1TuvuRt2S0iiye8+Z2KBaVUE3t55YxRHhjIfudboyq4Vqt6o1/6gl7eieZjqfqIBcU8k1xgEG5EG5GYCV12cUzvFU4Q5jPIzDWydppSN+jsIdSRbA8E0GweeRYumuNHryfDexZ04GafvjDwC+b9PCD5r8xiyt7N8gPNG052smGeK39N9Y/TQIDAQAB"
> )
>
sel3._domainkey.test3.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmJR1PxhxeO2eZlHPZfikAOyn/95rjszoGWRZti+0VyitapUVvla9noM3w0rbFEbVwW4Y3ILqY7j1C1jiM02okbYNYwE0CC1WSTGUrSoyRV7nGFJ5n6vcLCLqE9EFJwFnUCCXDTz+90D4aiXgasm/MAJJMkBQzdrrpQTwnLGVfWYGenqUWJ1+yn8kXmDq/wub0oE5G3DEE7noCgxpzkEd6tqCIJ3Z1wcA9qnUsTBjmDLPEZAwc4ajwZ/cfXceDXnprUKlFvq9tfMReKfObT2g6/iBsesBLCsuYgHKRydNqT1+YU0GmkSQkXutgyH5o4WzkUsPim2saIiTkVPTCtbWBwIDAQA"
> )
>
test4.dkim2.com <http://test4.dkim2.com>. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
test4.dkim2.com <http://test4.dkim2.com>. 3600 IN TXT "v=spf1 a
mx -all"
>
_dmarc.test4.dkim2.com. 3600 IN TXT "v=DMARC1; p=none"
>
ed25519._domainkey.test4.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=ed25519;
p=fJAwKEPblCYdjrEIPeyOFy6AeXZUBALBdGQRjSPe97c=" )
>
sel1._domainkey.test4.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqxfEjz2MPZ7ZiE/uQkgPOC7mn0CweB5MZgHMqgGPQodj2DpbILnxBivC64VV5/JItBaNCtEL3UFY1YzlJOKzqjJacF66u9en4m6L6uC31vrHmVME6+rx7B5nMBlkwPheamx8Dyf+wNo3/9UCKxSdFdtiJLpLGC7Tg2ry7tpxST4Joaf9fIggc3Zmaraidk0S0uJKQq6ZKoZtjJkt0Bd+LGEnGC6C9/lrjHarnImc1bcELpJrzmneOmJO1/b4C8TXawu7luKn6dTWhujAOam+sO4vXxwpCDEa2saSrB6ru2Ef4ittBVn8fYDCwCjqbniU3B/g7BcBYnnMLUvQecZEqwIDAQAB"
> )
>
sel2._domainkey.test4.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApolcHH25pnffLSu90xCKJINg7wItlff/H1x529bcRoYDl171r7rqnXA4dBaVSQoIK+vHsoizucMNw1dvdlxgdjOjBxJQOzF5gT4rvFjXn6gJG41MJcAolxA12FAM3XAlYmy2tE5jIU9TXenLgnXzLuf+YYLWsU2XHFO7yQkOwakgLFVQ7hljB1lCA6gWdERj1pa/v0njvBCK2k4+n70cS0CVE4n1zeKUSM/WHhqrW1ty2N4DW47JpBlbmJLepMuR3wPnkE7vL4OR+2HmZ+x6DzdZbzo0FFvh7jdfjlX/BB84ixaXIsJfEzWZMRc6DF+7oQIJ7WkyAETX2CXp/GpQwwIDAQAB"
> )
>
sel3._domainkey.test4.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiy1mVSb6jt4Y4m0V2M3/e/azZBQUGjahidiAgIE/4ZrJn65azagf3byfJwSvyxbnUSNvvJRf4aEiktKVOWKm9HbFMB8bS972Uj6IhviNrbrI7fdos/wv7SB7lCEVETKHC8lot7mw3xD86RLzhBFlBpgKreQrN0bXGC7vkMLE5Noxxj1BdVOEL7RQf96NGgi08ksgvlOMAcEVsVrGYJbrqAW85QJYe/0oQTb9BB86gRqweaZprFPDKB0/UUlRMNNR3+Zwrp7ibb8c0QXaDJ4V+5k2ABw8Cp99uXHeK8K50nfakQnY5EUlQ8lpCIG2JHLHTF7s4TbnXJST7Jy5RSmNywIDAQAB"
> )
>
test5.dkim2.com <http://test5.dkim2.com>. 3600 IN MX 10
mail.dkim2.com <http://mail.dkim2.com>.
>
test5.dkim2.com <http://test5.dkim2.com>. 3600 IN TXT "v=spf1 a
mx -all"
>
_dmarc.test5.dkim2.com. 3600 IN TXT "v=DMARC1; p=none"
>
ed25519._domainkey.test5.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=ed25519;
p=IAG1F5P3LD1Q8Y67PeW7YJLuvrM19wpaof+dzdC679I=" )
>
sel1._domainkey.test5.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0YUNs4TOful7xAtEh/PcKbVRvxBOOC52crCwqRCeVUnsvyOPx/qtY0oA2qPZVzDFU/h3fyz54eqYMiOIbxJavt3+nDNf8VfyHxQfc6+JdHdcHAJDpM1EMgN5awMxvc76csMVN6hnYFeOuSZECQy8Kr2C8QPCTcoMeNmR0udfKBo17Gjx4Wg9QDlc0CrzdenXscs0+D/3Y47lN1KllQeBAR7wvTVFoFKvSZ2CvwW264Syx76viMd0+JaK0YdhAcphMuHeNWzCKA+pMVD45gtikpkOQo+MBQIV96lNXa3fEw20S1IZfCMZHMSBbLmsiDY4luCe6kA08khNaE/zBi1GbQIDAQAB"
> )
>
sel2._domainkey.test5.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwSkJ+kfygUujU2u3tquvkjpPV/Gluz9k7rNnDfQwSddbZLOtDSQRt5pA04fjUcS+PraUAg2arKuGv05Nuw/X0ts7bh3N0b2Iwbg1IEGGa6gXMmJ6Lj5T0O716rk0GOvdWqLz/466MzCH8viwPwSLY25EBDD3r1Y9o58xy6VhiUuMsqttjzsk743A0wKQHr5FEYim0qnfY0ePfAr0s36XItgQaXH9pkr2CPmqSXlIwKN99h2TJVcf86dMDqxuqUnI2OilwKcGtMk2/oMxC3A5gGgFkivxUIdoKs0Y/JruR6mvnoFREbC5GToWNGCgciYbxMfaQIRO9tJwyPGl8gPpiQIDAQAB"
> )
>
sel3._domainkey.test5.dkim2.com. 3600 IN TXT (
> "v=DKIM1; k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsU7LuV9aZv8jiNflYQBEpGjGjzKF+PBBFSezLBkRsYQ8IKcmCa0v/BI2hC0h0DGqtOb4dz640F3oZFRyUcX5PsKinm6SChl1qOog4+3oNFs7bhe3NJm7MRgTCSKomEWKXJei303wy/iDKtm+KUL8mSFNlAr3FnVTxXq2LY+rUG786Ha7xvK7NeLN4+R22061QVf+rqWhMgZB0fEGzIAVx2C7P2dCMT1sZoPPXHajXmw36LbOUDp151tfH7LQ9qdPL+08FYjM4xoJdLy3kgHATb0bnebq0Mfxym2x14nI6YoOzqE+fcL4xJXqfVISC1Uyvx0ndNO6jajsBIbr2ihKewIDAQAB"
> )
>
>
> ... so basically my idea is to replace every current
103.168.172.x IP in our generated zones with an indirection to the
actual service name, and then be able to update just that one zone
file in order to change the IPs which are served for that service.
>
> I'd be happy to re-implement that as a separate plugin, or as
variables or some other way to do that indirection - I just want it
to keep the DNS service fast, and allow me to switch all those
records all at once.
>
> Thanks,
>
> Bron.
> --
> Bron Gondwana, CEO, Fastmail Pty Ltd / Fastmail US LLC
> brong(a)fastmailteam.com
>
>
--
Bron Gondwana, CEO, Fastmail Pty Ltd / Fastmail US LLC
brong(a)fastmailteam.com
--