最小限の例

最小限の例

最小限の例

マシン A と B。B はドメイン名で mDNS を使用しb.local、ポート 2222 で ssh サービスを設定します。A と B はファイアウォールをオンにしません。

マシンAの場合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"

ただし、マシンAでは、使用はssh -p 2222 b.local正常に動作します(-4または-6テストも行われています)

役に立つかもしれない情報

実際の例では、マシン A はすべてのファイアウォールを無効にした Windows 11 です。マシン B は、avahi-daemon mDNS サービスを使用するマシン A 内の WSL2 ubuntu 21.10 です。

マシン A 側では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

関連情報