Nginx — невозможно использовать доменное имя mDNS на вышестоящем сервере

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

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

В машине А:

      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"

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

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

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

В стороне машины Аnginx.conf, я также установил проход HTTP-прокси:

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

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

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

1 ответ

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

      hosts:          files mdns [NOTFOUND=return] dns

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

      getent hosts b
Другие вопросы по тегам