最小示例
机器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