如果我使用 Ubuntu 或 Linux Mint(我尝试过并且知道这两种版本确实有效),我可以运行如下命令:
wayne@myhost$ ssh [email protected]
并且该名称会自动解析为我的本地网络上其他主机的 IP。
我决定开始扩展到其他发行版,并且我的笔记本电脑上运行了 Arch - 但如果我尝试使用之前的命令,我会得到Could not resolve hostname otherhost.local: Name or service not known
需要什么才能实现这种自动名称解析(?)?
答案1
韦恩自己的答案现在已经很老了。此后,Arch 转而使用 systemd 而不是 init 脚本。 Arch 维基百科阿瓦希页面已更新,并包含有关为何需要执行以下步骤的详细信息。简而言之:Avahi 是一个零配置工具,这意味着一旦安装在 LAN 的所有计算机上,它就无需配置即可工作,但您必须配置软件的其余部分,以便它实际上向 Avahi 询问信息。
以 root 身份运行它们,或sudo
在终端中适当地添加前缀,然后替换nano
为您选择的编辑器。
pacman -S avahi nss-mdns
安装 Avahi 服务守护程序和多播 DNS 解析器。nano /etc/nsswitch.conf
该文件告诉 C 库如何获取名称服务信息。- 将行更改
hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns
为hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns
,保存并退出。该mdns_minimal
服务处理查找,必须在和.local
之前添加。resolve
dns
systemctl start avahi-daemon
由于我们已经启动,因此手动启动 Avahi 服务。查找错误)systemctl enable avahi-daemon
在启动时启用 Avahi 服务。
我刚刚在 Arch 笔记本电脑上执行了这些步骤,无需重新启动任何其他服务或 WiFi 接口即可让我的其他机器在几秒钟内发现它,并让我的笔记本电脑发现它们的服务。
由于我还无法评论 ggg 的答案,因此我只想在此指出,无需在启动脚本中执行此操作 - 这就是在 systemd 中启用服务的目的。做一次就可以忘记它。
答案2
感谢指向拱门维基Ulrich Dangel 关于 Avahi 的文章,这就是我所做的:
- 安装 avahi 和 nss-mdns
$ sudo pacman -S avahi nss-mdns
- 添加
/etc/rc.d/avahi-daemon start
到末尾rc.local
- 因为我正在跑步
dhcpcd
,所以/etc/dhcpcd.conf
我注释掉了该noipv4ll
行。 - 我也跑了
$ sudo /usr/sbin/avahi-autopid -D wlan0
。由于我不喜欢重新启动,所以我不确定步骤 3 是否有必要。 - 在
/etc/nsswitch.conf
我将行设置为 readhosts: files mdns4_minimal dns mdns4
。 - 然后我跑去
$ sudo /etc/rc.d/dbus restart
重启dbus。
之后,只要做就行了。ssh [email protected]
答案3
我认为我们不需要avahi-daemon
运行来使用.local
。这是我的启动脚本中的内容。与 Arch Wiki 的方法相比,这要简单得多。
systemctl enable avahi-daemon
avahi-set-host-name $(hostname)
systemctl disable avahi-daemon