DNS - DoT mit 2 Domains

Hoerli

Ensign
Registriert
Nov. 2015
Beiträge
160
Hallo Forum!
Eventuell kann mir hier jemand kurzer Hand weiter helfen.

Ich habe zwei Domains, welche auf einen Server laufen.
Dns1.meine-erste-domain.de
Dns1.meine-zweite-domain.de

Auf dem Server habe ich einen DNS-over-TLS und DNS-over-HTTPS mit nginx eingerichtet.
Mit einer Domain funktioniert das prima.
Die zweite Domain lässt sich für DoH auch super einbinden. Einfach das Stück Config kopieren und die Zertifikate anpassen. Läuft.
Nur mit DoT gibts ein kleines Problem.

Das Problem ist, das ich die zweite Domain für DoT nicht korrekt konfigurieren kann.
Ich kann zwar bei der Config alle Zertifikate angeben, nginx akzeptiert das auch, nur das Endgerät nimmt das irgendeines und bei 2 Zertifikaten ist die Chance 50:50, das es funktioniert / das ich die passende Domain erwischt hab.

Okay, dann hab ich mir gedacht, machen wir es halt mit CNAME(s) und verweisen die zweite Domain auf die erste.
Geht auch nicht.
Scheinbar funktioniert DoT nur korrekt, wenn das passende Zertifikat auf dem Server liegt.

Getestet habe ich das ganze mit Android 10 und 11.
Leider gibt mir Android keine Fehlermeldung raus, warum es nicht gehen sollte, daher ist die Fehlersuche für mich gerade sehr schwer.
Meine Domains habe ich über CloudFlare laufen.


Kann ich überhaupt zwei Domains für DoT nutzen, oder geht das aktuell nicht?


Eine Anleitung die ich verwendet hatte, war folgende:
https://www.linuxbabe.com/ubuntu/dns-over-tls-resolver-nginx

Vielleicht hat ja einer von euch die Lösung für das Problem :)

Und hier gibt es noch meine nginx-Config:
Code:
upstream dns-servers {
        server 127.0.0.1:53;
        }
server {
        listen 853 ssl;
        ssl_certificate /etc/letsencrypt/live/dns1.meine-erste-domain.de/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/dns1.meine-erste-domain.de/privkey.pem; # managed by Certbot

        #ssl_certificate /etc/letsencrypt/live/dns1.meine-zweite-domain.de/fullchain.pem; # managed by Certbot
        #ssl_certificate_key /etc/letsencrypt/live/dns1.meine-zweite-domain.de/privkey.pem; # managed by Certbot

        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;

        ssl_handshake_timeout 10s;
        #ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 4h;
        proxy_pass dns-servers;

     error_log   /var/log/nginx/dot-log.error.log crit;
}
 
Ich bin mir nicht ganz sicher, ob ich es richtig verstehe.
Beide Domains laufen letztendlich auf den gleichen nginx auf? Und der läuft mit der Config, die du reingepostet hast?
Falls ich das so richtig verstanden habe, ist das Problem, dass in 50% der Fälle dns1.meine-zweite-domain.de verwendet wird, du landest beim nginx, der hat aber nur ein Zertifikat für dns1.meine-erste-domain.de. Weil die Authentizität des Servers nicht gewährleistet werden kann, wird die Verbindung vom Client beendet.
Um das Problem zu lösen, musst du entweder ein Zertifikat erstellen, das beide Domains umfasst, oder du erstellst einen zweiten Server Block und benutzt bei beiden den "name"-Parameter.

P.S. Mit DoT kenne ich mich nicht aus, ich denke aber, dass das prinzipiell ja wie jede andere TLS-Verbindung auch funktionieren sollte.
 
  • Gefällt mir
Reaktionen: SaxnPaule
Hey @burglar225
du hast es korrekt verstanden.
Das Problem ist, ich verstehe gerade nicht, wie ich hier den name-Parameter korrekt anwende.
Den Gedanken dazu hatte ich bereits und wollte es schon damit lösen, klappt aber nicht.
Füge ich ein server_name hinzu und gebe dem Ding eine Domain an, hat nginx damit ein Problem.
Er meckert dann genau diese Config-Zeile an.
 
Warum erstellst du mit certbot nicht einfach ein Zertifikat, das für beide Domains gültig ist? Mit dem -d Parameter kann man beim Erstellen beliebig viele Domains angeben. Dann fügst du den server_name-Parameter ein und fertig:
Code:
server_name  dns1.erste-domain.de  dns2.zweite-domain.de;

Ansonsten bitte die Config posten, wenn da ein Fehler auftritt, sonst kann ich dazu nichts sagen.
 
In der Anleitung, welche ich schlussendlich verwendet habe, muss ich die Config hier ablegen:
/etc/nginx/streams/
Sobald ich dort den server_name-Parameter setze, kommt folgende Fehlermeldung raus:
Code:
nginx: [emerg] "server_name" directive is not allowed here in /etc/nginx/streams/dns-over-tls:8
nginx: configuration file /etc/nginx/nginx.conf test failed

Die Config im sites-enabled-Ordner ergibt Probleme mit den Parametern ssl_handshake_timeout, ssl_session_timeout und proxy_pass.
Als Error kommt dann auch "... is not allowed here in ...".
 
Ah interessant, mit nginx streams habe ich auch noch nicht gearbeitet.

Meinem Verständnis nach ist das aber nicht möglich, da TCP allein ja kein Konzept von Vhosts bzw. Server-Namen hat. Das ist ein spezifisches Feature von HTTP, mit dem man mehrere Domains auf einer IP hosten kann. Da bei den Streams aber nur TCP (bzw. DNS) über nginx geproxyed wird, kann nginx keine Unterscheidung nach Domain vornehmen. Der Client schickt gar keine Information mit, welche Domain er denn erwartet.

Ohne eine zweite IP dürfte dein Vorhaben nicht machbar sein.
 
  • Gefällt mir
Reaktionen: burglar225
Danke für die Antwort @Marco01_809
Das ist leider schade, aber so ist es eben.
Falls jemand eine passende Config hat, um zwei Domains mal zu nutzen, gerne hier Posten.
Bis dahin, gehe ich mal davon aus, ist der Fall erst einmal für mich erledigt.
 
Zurück
Oben