如何可靠地寻址网络上的不同机器?
我以前一直使用.local后缀与本地网络上的计算机交谈。但是,使用新路由器.local很少(尽管有时)起作用。我发现,.home和.lan两个平时工作,但并非总是如此。
.-------. .--------. .-----.
| modem |---| router |))))))(wifi))))))| foo |
.-------. .--------. v .-----.
|| | v
/_^_^_\ | \))))))).-----.
/ cloud \ | | bar |
\-_-_-/ .-----. .-----.
| baz |
.-----.
Run Code Online (Sandbox Code Playgroud)
因此,从终端上foo,我可以尝试:
ssh bar.local
ssh bar.home
ssh bar.lan
ssh baz.local
ssh baz.home
ssh baz.lan
Run Code Online (Sandbox Code Playgroud)
有时这些后缀中的一些有效,一些无效,但我不知道如何预测哪个或何时。
foo, bar, 和baz都是现代 Linux 或 Android 系统,并且 Linux 机器都安装了(或可以安装)avahi-daemon 或其他合理可用的软件包
(我不想设置静态 IP 地址:我想继续为每台机器使用 DHCP(来自路由器),即使我对静态地址没问题,我也希望能够在其中输入主机名无根 …
使用 CentOS 7 运行服务器机器,我注意到 avahi 服务默认运行。
我有点想知道它的目的是什么。
它似乎做的一件事(在我的环境中)是随机禁用 IPv6 连接,在日志中看起来像这样:
Oct 20 12:23:29 example.org
avahi-daemon[779]: Withdrawing address record for fd00::1:2:3:4 on eno1
Oct 20 12:23:30 example.org
Withdrawing address record for 2001:1:2:3:4:5:6:7
Oct 20 12:23:30 example.org
Registering new address record for fe80::1:2:3:4 on eno1.*.
Run Code Online (Sandbox Code Playgroud)
(后缀1:2:3...是编的)
事实上,在此之后,公共2001:1:2:3:4:5:6:7IPv6 地址将不再可访问。
因此,我通过以下方式禁用了 avahi 服务:
# systemctl disable avahi-daemon.socket avahi-daemon.service
# systemctl mask avahi-daemon.socket avahi-daemon.service
# systemctl stop avahi-daemon.socket avahi-daemon.service
Run Code Online (Sandbox Code Playgroud)
到目前为止,我还没有注意到任何限制。
因此,我的问题是关于服务器系统上 avahi 的用例。
我刚刚学习守护进程,那时我开始了解 avahi 守护进程,您能详细解释一下 avahi 守护进程以及为什么 linux 有一个 avahi 用户吗?
我有一个基于Ubuntu 16.04的 HTPC/媒体服务器,它运行24/7。据我记得使用官方 Ubuntu 发行版,我一直对avahi-daemon有问题。这个问题在网上经常讨论。有些人决定只删除守护程序,但是,我实际上需要它,因为我正在运行 CUPS 服务器并使用 Kodi 作为我的 AirPlay 接收器。
mDNS/DNS-SD 本质上与单播 DNS 区域 .local 不兼容。我们强烈建议不要在这样的网络设置中使用 Avahi 或 ?nss-mdns。注意:nss-mdns 通常不与 Avahi 捆绑在一起,需要单独下载和安装。(avahi.org)
症状很简单 - 在大约 2-4 天的正常运行时间后,网络连接将中断,这将被记录
Mar 17 18:33:27 15 avahi-daemon[1014]: Withdrawing address record for 192.168.1.200 on enp3s0.
Mar 17 18:33:27 15 avahi-daemon[1014]: Leaving mDNS multicast group on interface enp3s0.IPv4 with address 192.168.1.200.
Mar 17 18:33:27 15 avahi-daemon[1014]: Interface enp3s0.IPv4 no longer relevant for mDNS.
Run Code Online (Sandbox Code Playgroud)
如果您以物理方式重新连接以太网插头,或者重新连接软件端,网络将 …
我在本地网络中运行 Arch Linux 服务器。它运行着 avahi-daemon 来宣传一些服务(如打印服务器)。
现在我的服务器不再可用,这是第二次发生。经过一番调查,我发现它的 IPv4 地址已从网络接口中删除,日志中包含以下消息:
Feb 04 22:36:34 edeltraud avahi-daemon[389]: Withdrawing address record for 192.168.168.23 on enp0s25.
Feb 04 22:36:34 edeltraud avahi-daemon[389]: Leaving mDNS multicast group on interface enp0s25.IPv4 with address 192.168.168.23.
Feb 04 22:36:34 edeltraud avahi-daemon[389]: Interface enp0s25.IPv4 no longer relevant for mDNS.
Run Code Online (Sandbox Code Playgroud)
IP 地址由 DHCP 使用 systemd-networkd 配置。这是/etc/systemd/network/enp0s25.network:
[Match]
Name=enp0s25
[Network]
DHCP=ipv4
IPForward=ipv4
DNS=85.214.20.141
DNS=213.73.91.35
DNS=2001:470:20::2
[DHCP]
UseDNS=false
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,但这可能非常危险,因为我基本上是将我的网络适配器交给容器。
有没有办法让我发布此服务并按计划进行映射工作?
我想从 iPad2 打印到在 CUPS 上运行的办公室打印机。遵循几个食谱样式的备忘单后,从 iPad 打印仍然无法正常工作。iPad 看到我创建的打印机条目并将其作为选项提供,但队列中没有任何显示,也没有打印机输出。服务器上的本地打印作业有效,因此 CUPS 可以识别打印机并与打印机配合使用。Avahi-discover 列出打印机并将转储相关的 XML 文件。服务器是 Ubuntu 10.10。
此处概述了所使用的程序。
这个页面有一个更简单的食谱。
任何提示表示赞赏。
编辑:
今天,我禁用了服务器上的防火墙。现在,当尝试打印时,此消息会重复出现在 CUPS error_log 中:
E [13/Jul/2011:10:17:15 -0400] Request from "192.168.x.y" using invalid Host: field "server.local"
Run Code Online (Sandbox Code Playgroud)
服务器的名称是 server.local,可以使用该名称访问它。地址“192.168.xy”是 iPad 的地址。
我正在运行 Kali 2.0 64 位,最近我注意到 avahi-daemon 在启动时启动,监听几个 udp 端口。
如何在不清除软件包本身的情况下完全禁用它?
我试过了
sudo rcconf --off avahi-daemon
但是有一个警告: 服务“avahi-daemon”已经关闭。跳过...
然后我尝试
sudo update-rc.d -f avahi-daemon remove
它不会产生任何错误或警告,但 avahi-daemon 在启动时仍然存在。
然后我尝试通过添加来编辑/etc/default/avahi-daemon文件AVAHI_DAEMON_START = 0
但这也行不通。
我终于使用了 UPSTART 手动覆盖 -->> echo manual | sudo tee /etc/init/avahi-daemon.override
而且还是不行。
请帮忙,
我已经无计可施了!
谢谢你。
我avahi-daemon在 Debian 9.1 服务器上运行;但是,avahi-browse -a在我的家庭网络(由单个网络组成)中不显示任何服务192.168.178.0/24。
我可以访问所有客户端(ping在适用的情况下使用 和进行测试ssh)并且
server# tcpdump port 5353
Run Code Online (Sandbox Code Playgroud)
给出了我的客户的大量输出,例如,
15:30:07.206879 IP Client-OSX.fritz.box.mdns > 224.0.0.251.mdns: 0 [20a] [9q] PTR (QM)? _services._dns-sd._udp.local. PTR (QM)? _http._tcp.local. PTR (QM)? _ipp._tcp.local. PTR (QM)? _pdl-datastream._tcp.local. PTR (QM)? _printer._tcp.local. PTR (QM)? _scanner._tcp.local. PTR (QM)? _privet._tcp.local. PTR (QM)? _http-alt._tcp.local. PTR (QM)? _ssh._tcp.local. (847)
Run Code Online (Sandbox Code Playgroud)
但是,我的客户端看不到我的服务器,反之亦然,但客户端可以看到彼此的服务,例如,
client1# avahi-browse -a
+ enp0s25 IPv6 client2 SSH Remote Terminal local
+ enp0s25 IPv4 my-printer _privet._tcp local
...
Run Code Online (Sandbox Code Playgroud)
/etc/avahi/avahi-daemon.conf:
[server] …Run Code Online (Sandbox Code Playgroud)