Minimalbeispiel
Maschine A und B, wobei B mDNS mit Domänennamen verwendet b.local
und den SSH-Dienst auf Port 2222 einrichtet. A und B schalten die Firewall nicht ein.
In Maschine A nginx.conf
:
stream {
upstream b-ssh {
server b.local:2222;
}
server {
listen 2222;
listen [::]:2222;
proxy_pass b-ssh;
}
}
Beim nginx -t
Testen dieser Konfiguration auf Maschine A ist der folgende Fehler aufgetreten:
[emerg] host not found in upstream "b.local:2222"
Auf Maschine A funktioniert die Verwendung jedoch ssh -p 2222 b.local
normal ( -4
oder -6
wird auch getestet).
Möglicherweise nützliche Informationen
In meinem realen Beispiel ist Maschine A ein Windows 11, das alle Firewalls deaktiviert; Maschine B ist WSL2 Ubuntu 21.10 innerhalb von Maschine A, das den mDNS-Dienst Avahi-Daemon verwendet.
Auf der Seite von Maschine A nginx.conf
habe ich außerdem einen HTTP-Proxy-Pass festgelegt:
http {
server {
listen 8929;
listen [::]:8929;
location / {
proxy_pass http://b.local:8929;
}
}
}
und das funktioniert gut, obwohl hier der mDNS-Domänenname verwendet wird.
Wenn ich den mDNS-Domänennamen im Upstream-Server durch seine echte IP ersetze, funktioniert der SSH-Proxy.
Antwort1
Installieren Sie es libnss-mdns
und stellen Sie sicher, dass ein Eintrag für MDNS vorhanden ist in /etc/nsswitch.conf
:
hosts: files mdns [NOTFOUND=return] dns
Sie können die MDNS-Auflösung wie folgt testen getent
:
getent hosts b