Минимальный пример
Машины 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