最小示例

最小示例

最小示例

机器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 是机器 A 内部的 WSL2 ubuntu 21.10,使用 avahi-daemon mDNS 服务。

在侧机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

相关内容