我想要的是使用 avahi-daemon 来多播多个名称。这样我就可以使用domainA.localdomainB.local连接到它。
然后我可以使用 nginx 将这些地址重新路由到不同应用程序的不同 Web 界面。
是否可以将 avahi-daemon 配置为多播多个名称?
PS 不要求使用 avahi-daemon。如果有另一个程序具有此功能,我很乐意切换。
研究与成果
因此,按照 gollum 的建议,我首先尝试了 avahi-aliases。它位于存储库中,但它似乎没有正确安装在我的系统上。根据说明应该在/etc/init.d/中安装了一个脚本,但是没有。
然后我给出了咕噜建议尝试的另一个链接,这立即起作用了。它确实依赖于 python-avahi,并且只是需要在后台运行的 python 脚本的示例。我现在能够广播domainA.local、domainB.local和domainC.local,并与nginx结合使用,从而导致机器上不同的Web界面,但都可以在端口80上访问。
更新
经过对两者的更多摆弄后,我还发现 avahi-aliases 只能广播子域。因此,如果您的计算机名是 elvispc,那么 avahi-aliases 只能广播 subdomainA.elvispc.local 和 subdomainB.elvispc.local,其中 python 脚本将广播任何名称。
答案1
一个麻烦的解决方案是在后台运行以下命令的多个实例:
avahi-publish -a -R whatever.local 192.168.123.1
更好的解决方案可能是使用 python-avahi 发布 cname。参见例如https://github.com/airtonix/avahi-aliases或者http://www.avahi.org/wiki/Examples/PythonPublishAlias
更新:
avahi wiki 似乎消失了。这是我发布的链接的存档页面:https://web.archive.org/web/20151016190620/http://www.avahi.org:80/wiki/Examples/PythonPublishAlias
答案2
另一种方法,独立于单个 systemd 文件中,发布于跟踪缺少此功能的错误。
[Unit]
Description=Publish %I as alias for %H.local via mdns
Requires=avahi-daemon.service
After=avahi-daemon.service
[Service]
Type=simple
ExecStart=/bin/bash -c "/usr/bin/avahi-publish -a -R %I $(avahi-resolve -4 -n %H.local > /dev/null && ip route get 1 | awk '{print $7;exit}')"
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
用法:
# Publish test.local as a pointer to this system:
sudo systemctl enable --now [email protected]
答案3
首先,Avahi 似乎并不通过其标准命令之一直接支持别名,但他们的网站(自 2016 年的某个时候以来基本上处于离线状态)曾经托管一个非常简短的 Python 脚本来执行此操作。
使用此脚本,您可以为当前计算机发布任意数量的 CNAME,如下所示:
$ ./avahi-alias my-alias.local my-second-alias.local
我对这一切做了很多谷歌搜索,你可以看到我写的结果这里。那里有原始 wiki 脚本的副本以及有关如何使其作为服务运行的说明。
这篇文章还包括我对所有各种 Avahi 别名项目的笔记,您可以在那里找到(包括这里已经提到的 Airtronix 项目)。事实证明,它们都只是原始 Python 脚本的细微变体,除了 OpenShift Origin 服务器项目中基于 Ruby 的脚本之外。