Die Notiz habe ich im November 2020 geschrieben
Diese Woche habe ich ja viel gelernt über hidden-primary Setups, über Nameserver wie PowerDNS und CoreDNS, über DNS bei Plusserver, über AXFR und IXFR, über Openstack Designate, über Triton CNS, über DNS-Anbieter wie INWX, Cloudflare und deSEC. Dabei bin ich - wie so oft - über eine kleine Gemme in der Triton-Dokumentation gestolpert, die ich hier festhalten möchte, da ich sie sonst vermutlich bald wieder vergessen haben werde. Wenn man sich auf Triton eine Instanz erzeugt, werden per CNS über ein hidden-primary Setup automatisch DNS-Einträge für die neue Instanz erzeugt:
toens@wintermute:~$ triton inst create -w -n thunderdome-db e75c9d82 496922ac
Creating instance thunderdome-db (df5b8c73-2244-cff9-e4f7-ea65a49ce5f8, base-64-lts@19.4.0)
Created instance thunderdome-db (df5b8c73-2244-cff9-e4f7-ea65a49ce5f8) in 1m5s
toens@wintermute:~$ triton inst get thunderdome-db | jq .dns_names
[
"df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.de",
"thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.de",
"df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.get-cloud.xyz",
"thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.get-cloud.xyz",
"df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.xyz",
"thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.xyz",
"df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.get-cloud.io",
"thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.get-cloud.io",
"df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.tgos.de",
"my-fabric-network.df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.tgos.de",
"thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.tgos.de",
"my-fabric-network.thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.tgos.de",
"df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io",
"my-fabric-network.df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io",
"thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io",
"my-fabric-network.thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io"
]
Die verschiedenen Domains sind das Ergebnis verschiedener Umstände und der Experimente in der letzten Woche. Der entsprechende CNS-Status sieht so aus:
[root@c598e340-4715-4335-be8e-ca17174d6911 (de-gt-2:cns0) ~]# cnsadm status
ZONE LATEST SERIAL CHANGED
de-gt-2.snc.tgos.de 388460948 2 days ago
de-gt-2.cns.tgos.de 388460948 2 days ago
get-cloud.xyz 388460948 2 days ago
de-gt-2.cns.tgos.xyz 388460948 2 days ago
de-gt-2.cns.get-cloud.io 388460948 2 days ago
de-gt-2.snc.get-cloud.io 388475190 6 hrs ago
128.168.192.in-addr.arpa 388460948 2 days ago
69.65.10.in-addr.arpa 388460948 2 days ago
15.168.192.in-addr.arpa 388410191 1 wk ago
5.168.192.in-addr.arpa 388410024 1 wk ago
PEER ZONE LATEST SERIAL DRIFT VERSION
10.64.64.125 de-gt-2.snc.tgos.de 388460948 none
de-gt-2.cns.tgos.de 388460948
185.181.104.96 de-gt-2.cns.tgos.xyz 388460948 INWX AXFR Server
62.138.233.183 get-cloud.xyz 388460948
de-gt-2.cns.get-cloud.io 388460948
de-gt-2.snc.get-cloud.io 388475190
10.64.64.252 de-gt-2.snc.tgos.de 388460948 none
de-gt-2.cns.tgos.de 388460948
62.138.201.123 get-cloud.xyz 388460948
de-gt-2.snc.get-cloud.io 388475190
Man kann damit ganz gut die Reaktionszeit der verschiedenen DNS-Anbieter testen:
toens@wintermute:~$ dig +short df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.get-cloud.xyz
toens@wintermute:~$ dig +short thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.get-cloud.xyz
toens@wintermute:~$ dig +short thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.de
10.65.69.249
toens@wintermute:~$ dig +short df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.xyz
10.65.69.249
toens@wintermute:~$ dig +short thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.get-cloud.io
toens@wintermute:~$ dig +short df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.tgos.de
192.168.128.178
toens@wintermute:~$ dig +short my-fabric-network.df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io
toens@wintermute:~$ dig +short thunderdome-db.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io
toens@wintermute:~$ dig +short df5b8c73-2244-cff9-e4f7-ea65a49ce5f8.inst.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.get-cloud.xyz
Wie man sieht funktionieren manche Zonentransfers fast sofort und bei manchen tut sich minutenlang gar kein Tranfer. Bei der Auswahl eines DNS-Anbieters für ein hidden-primary Setup sollte man genau auf solche Merkmale achten.
Nun zu der kleinen Funktion, die ich in der Dokumentation entdeckt hatte. Wie oben gezeigt, hat die Instanz bei zuverlässigen DNS-Anbietern in sehr kurzer Zeit einen DNS-Eintrag bekommen, den man jetzt z. B. für die Ausstellung eines Letsencrypt-Zertifikats verwenden könnte (vielleicht mit triton-dehydrated). Ich kann bei der Erzeugung (oder auch nachträglich) aber auch einen DNS-Eintrag für einen Service erzeugen lassen:
toens@wintermute:~$ triton instance tag set -w thunderdome-db triton.cns.services=thunder
{
"triton.cns.services": "thunder"
}
Schon erzeugt CNS weitere DNS-Namen für die gewünschte Instanz:
toens@wintermute:~$ triton inst get thunderdome-db | jq .dns_names |grep svc
"thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.de",
"thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.get-cloud.xyz",
"thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.xyz",
"thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.get-cloud.io",
"thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.tgos.de",
"my-fabric-network.thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.tgos.de",
"thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io",
"my-fabric-network.thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.snc.get-cloud.io"
Wenn ich jetzt einer weiteren Instanz den obigen Service Tag vergebe, wird diese automatisch im DNS dem Service hinzugefügt:
toens@wintermute:~$ dig +short thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.de
10.65.69.249
10.65.69.46
Wenn ich jetzt die Instanz wieder aus der Verteilung nehmen will, kann ich das z. B. aus der Instanz heraus tun:
toens@wintermute:~$ triton ssh thunderdome-db
__ . .
_| |_ | .-. . . .-. :--. |-
|_ _| ;| || |(.-' | | |
|__| `--' `-' `;-| `-' ' ' `-'
/ ; Instance (base-64-lts 19.4.0)
`-' https://docs.joyent.com/images/smartos/base
[root@thunderdome-db ~]# mdata-list
root_authorized_keys
[root@thunderdome-db ~]# mdata-put triton.cns.status down
Im DNS sollte die Instanz dann zügig ausgetragen sein:
toens@wintermute:~$ dig +short thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.de
10.65.69.46
Andere DNS-Systeme haben noch nicht einmal den ersten Eintrag hinbekommen:
toens@wintermute:~$ dig +short thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.get-cloud.io
toens@wintermute:~$
Manche sind eben benutzbarer als andere:
toens@wintermute:~$ triton ssh thunderdome-db
__ . .
_| |_ | .-. . . .-. :--. |-
|_ _| ;| || |(.-' | | |
|__| `--' `-' `;-| `-' ' ' `-'
/ ; Instance (base-64-lts 19.4.0)
`-' https://docs.joyent.com/images/smartos/base
[root@thunderdome-db ~]# mdata-put triton.cns.status up
[root@thunderdome-db ~]# exit
logout
Connection to 10.65.69.249 closed.
toens@wintermute:~$ dig +short thunder.svc.a5ba23f5-8237-6879-e7e1-ea6f574fbde9.de-gt-2.cns.tgos.de
10.65.69.249
10.65.69.46