在 Linux Debian 9 上,我能够解析特定的本地域,例如my.sample-domain.local使用诸如nslookup或 之类的命令host,但不能使用诸如ping或 Postgres 客户端之类的其他命令psql。
我认为像网络管理器这样的东西已经正确设置了我的 DNS 解析器(内容/etc/resolv.conf),所以我不确定为什么会发生这种情况?
我与一位使用 Windows 10 的同事进行了核实,他们的主机文件中没有任何自定义条目,尽管在他们的情况下,Windows 版本ping和 Postgres 的数据库 UI 可以按预期工作,将域解析为 IP 地址。
请参阅以下内容:
$ ping my.sample-domain.local
ping: my.sample-domain.local: Name or service not known
$ host my.sample-domain.local
my.sample-domain.local has address <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>
$ ping -c 5 <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>
PING <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN> (<THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>) 56(84) bytes of data.
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=1 ttl=128 time=1.16 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=2 ttl=128 …Run Code Online (Sandbox Code Playgroud) 我想要一个将主机名解析为 IP 地址的命令,就像普通程序解析主机名一样。换句话说,它必须考虑到 mDNS ( .local) 和/etc/hosts,以及常规 DNS。因此排除了host、dig和nslookup,因为所有这三个工具都只使用常规 DNS 并且不会解析.local地址。
在 Linux 上,该getent命令完全符合我的要求。但是,getent在 OS X 上不存在。
是否有 Mac OS X 等价物getent?我知道我可以在几行中使用 写一个,getaddrinfo如果必须的话我会这样做,但我只是想知道是否已经有一个标准命令可以做到这一点。
谢谢!
Ubuntu 18
我已经做了大量的研究,并且接近把这张图片拼凑起来,但不太明白:
如何为 mdns 配置 systemd-resolved?
我的目标具体是:
谁能告诉我如何专门使用 systemd-resolved 来实现这一点?
谢谢
到目前为止,我已经在下面配置了resolved.conf
ubuntu@ip-10-0-0-229:/etc$ --> CHROME -> cat /etc/systemd/resolved.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version. …Run Code Online (Sandbox Code Playgroud) 我想要的是使用 avahi-daemon 多播一个名称。这样我就可以使用 domainA.local domainB.local 连接到它。
然后,我可以使用 nginx 将这些地址重新路由到不同应用程序的不同 Web 界面。
是否可以以多播多个名称的方式配置 avahi-daemon?
PS 使用 avahi-daemon 不是必需的。如果有另一个具有此功能的程序,我很乐意切换。
所以按照咕噜的建议,我首先尝试了 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 脚本将广播任何名称。
我制作了一个 Docker 容器,它运行一个forked-daapd(通过 mDNS 发布的 DAAP 服务器,使用单个端口 3689 用于 HTTP 请求)并将端口正确公开给主机操作系统:
sudo docker run -it --rm -v /home/naftuli/Music:/srv/music -p 3689:3689 \
daapd /sbin/my_init
Run Code Online (Sandbox Code Playgroud)
问题是这个服务永远不会正确发布到 mDNS,因为它的 IP 地址(一些内部 Docker IP 范围)实际上不起作用。我可以用 运行它--net=host,但这可能非常危险,因为我基本上是将我的网络适配器交给容器。
有没有办法让我发布此服务并按计划进行映射工作?
首先,我查阅了几个Q/A,我可以确保以下几点得到满足:
IGMP 侦听不会被交换机/路由器过滤。
Bonjour 服务 ( mDNSResponder.exe) 在防火墙以及UDP 端口 5353(Windows 端)上被授予并允许。
Avahi 配置正确(并且禁用了 ipv6)并且nssitch.conf已完成所需的修改
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Avahi-daemon 以及 bonjour 服务正在运行。
ipv6在活动网络接口上被禁用,avahi-daemon 也配置为不使用 ipv6: use-ipv6=no。一段时间后,从 Windows.local发出 a 后,与树莓派对应的主机名不再解析ping pi.local,请注意,启动时它响应完美,并且重新启动 avahi-daemon 将在问题再次出现之前临时修复它。
就在mdns解析失败之后,我在锉刀上执行了以下命令,avahi-resolve -n pi.local它显示了ipv6(fe80::xxaa:yybb:zzde:ee),这很奇怪,因为正如我提到的,我在avahi配置中禁用了ipv6,就在我重新执行相同的命令之后,这次我得到了ipv4作为答案
pi.local 192.168.1.7
ping 似乎也再次响应。
运行 Linux pi 4.4.38-v7+ #938
使用适用于 Windows v2.0.2 的 Bonjour 打印服务:https://support.apple.com/kb/DL999,并且它作为服务运行。
avahi-resolve …
systemd-resolved 是否可以像 avahi-browse 一样用于浏览 mdns 服务?
例如:
$ avahi-browse _smb._tcp
+ eno1 IPv6 PC1 Microsoft Windows Network local
+ eno1 IPv6 PC2 Microsoft Windows Network local
+ eno1 IPv6 PC3 Microsoft Windows Network local
+ eno1 IPv6 PC4 Microsoft Windows Network local
Run Code Online (Sandbox Code Playgroud)
但在同一网络中的另一台机器上,使用resolved,但查询给定服务的所有机器不起作用:
$ resolvectl --protocol=mdns service _smb._tcp.local
Resolve call failed: All attempts to contact name servers or networks failed
Run Code Online (Sandbox Code Playgroud)
但是涉及主机名的直接查询正在工作:
$ resolvectl --protocol=mdns service PC1._smb._tcp.local
PC1._smb._tcp.local: PC1.local:445 [priority=0, weight=0]
fe80::e4c2:d456:7856:45f1%4 -- link: eth0
(PC1/_smb._tcp/local)
-- Information acquired via protocol …Run Code Online (Sandbox Code Playgroud) 我在所有家用机器上注意到的一点是,它们都不能解析.localIPv6 的地址。这看起来很奇怪,因为他们可以为 IPv4 解析它们,而且我所有的家用机器都有本地链接fe80::地址和公共2a00::地址。
到目前为止,我一直无法弄清楚这些工作缺少什么。
IPv4
# ping neptune.local
PING neptune.local (192.168.1.223) 56(84) bytes of data.
64 bytes from neptune (192.168.1.223): icmp_seq=1 ttl=64 time=275 ms
64 bytes from neptune (192.168.1.223): icmp_seq=2 ttl=64 time=197 ms
Run Code Online (Sandbox Code Playgroud)
IPv6
# ping -6 neptune.local
ping: neptune.local: Name or service not known
# ping -6 2a00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
PING 2a00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx(2a00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx) 56 data bytes
64 bytes from 2a00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx: icmp_seq=2 ttl=64 time=2.21 ms
64 bytes from 2a00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx: icmp_seq=3 ttl=64 time=3.13 ms
Run Code Online (Sandbox Code Playgroud)
主机条目来自/etc/nsswitch.conf: …