Ich habe ein Netzwerk von AWS EC2-Instanzen. Die meisten davon verwenden den DNS-Resolver des Standard-VPC, um Exfiltration zu verhindern und interne Domänen aufzulösen (mithilfe einer benutzerdefinierten TLD). Das funktioniert alles einwandfrei.
Es gibt jedoch eine (Ubuntu-)Instanz, die einen allgemeinen, öffentlichen Resolver verwenden muss, um das Internet insgesamt zu erreichen (z. B. 8.8.8.8).
Ich habe es geschafft, dies in us-east-1 zum Laufen zu bringen, indem ich /etc/systemd/resolved.conf durch ersetzt habe
[Resolve]
DNS=8.8.8.8 208.67.222
und Hinzufügen einer /etc/systemd/resolved.conf.d/MYTLD.conf
[Resolve]
Domains=MYTLD
DNS=10.6.0.2
Nach dem Neustart von systemd-resolved löst die Instanz alle Domänen problemlos auf. Aber wenn ich genau dieselbe Konfiguration auf ein nahezu identisches Netzwerk in us-east-2 anwende, funktioniert das öffentliche DNS nicht.
Ein Vorschlag, den ich auf StackExchange gefunden habe, war, /etc/resolv.conf mit /run/systemd/resolve/resolv.conf zu verknüpfen. Dadurch begann die Auflösung des öffentlichen DNS, aber die interne TLD wurde gestoppt.
Wie erreiche ich eine konsistente DNS-Auflösung in jeder Region?
Antwort1
Ich habe meine Lösung gefunden.
Der DNS-Resolver war auf Standardblock eingestellt (natürlich. Das war der Sinn dieser Übung.) Aber die Antwort war auf NODATA eingestellt. Dies führte zu einem Race Condition: systemd-resolve verwendetLink-Local-Multicast-Namensauflösungum DNS-Ergebnisse zu erhalten. Das bedeutet, dass gleichzeitig der interne AWS-Server und einer der öffentlichen Server abgefragt wurden. LLMNR gibt entweder das erste erfolgreiche Ergebnis zurück, das es erhält, oder den letzten Fehler (wenn alle Ergebnisse Fehler sind).
Ein NODATA-Ergebnis vom DNS-Resolver ist technisch gesehen ein Erfolg, sodass dieses Ergebnis zurückgegeben wurde, wenn es zuerst eintraf. Das Ändern der Aktion in NXDOMAIN – was aus Sicht von systemd-resolve ein Fehlerergebnis ist – hat das Problem behoben.