Минимальный пример

Минимальный пример

Минимальный пример

Машины A и B, где B использует mDNS с доменным именем b.localи настраивает службу ssh на порт 2222. A и B не включают брандмауэр.

В машинах А nginx.conf:

stream {
    upstream b-ssh {
        server  b.local:2222;
    }
    server {
        listen      2222;
        listen      [::]:2222;
        proxy_pass  b-ssh;
    }
}

При nginx -tтестировании этой конфигурации на машине A произошла ошибка:

[emerg] host not found in upstream "b.local:2222"

Однако в машине А использование ssh -p 2222 b.localработает нормально ( -4или -6также тестируется)

Возможно полезная информация

В моем реальном примере машина A — это Windows 11, на которой отключены все брандмауэры; машина B — это WSL2 Ubuntu 21.10 внутри машины A, которая использует службу mDNS avahi-daemon.

На стороне машины A nginx.confя также установил HTTP-прокси-пароль:

http {
    server {
        listen  8929;
        listen  [::]:8929;
        location / {
            proxy_pass  http://b.local:8929;
        }
    }
}

и это работает хорошо, даже несмотря на то, что используется доменное имя mDNS.

Если я заменю доменное имя mDNS на его реальный IP-адрес на вышестоящем сервере, то SSH-прокси заработает.

решение1

Установите libnss-mdnsи убедитесь, что в /etc/nsswitch.conf:

hosts:          files mdns [NOTFOUND=return] dns

Вы можете протестировать разрешение mdns с помощью getent:

getent hosts b

Связанный контент