0

假设你在正常的dhcp环境中,

你会得到一个像这样的IP地址:

  • 192.168.0.101 用于分段 A 上的 linuxpc1.localdomain
  • 192.168.1.102 用于分段 B 上的 linuxpc2.localdomain

我想通过仅在那些设置了主机名的 linuxpc 上安装 avahi 来查找它们。

于是在 192.168.2.103 linuxpc3.localdomain 上,运行

ping linuxpc1.local

会工作。

实现这一点不影响 dhcp 服务器设置的最简单方法是什么?

或者,如果这很困难,至少我想知道从 linuxpc3.localdomain 主机运行脚本的名称的 IP 地址。

getipbyname-avahi.py linuxpc1.local
-> returns 192.168.0.101

我不想设置 NIS 或 LDAP 或 SQL ...我认为重用解析 dhcped ip 地址的 avahi 功能是好的开始。

4

2 回答 2

2

为什么不在 DHCP 中启用 DNS 更新?

就像是

ddns-updates                on;
ddns-update-style           interim;
ddns-domainname             "network.athome.";
ddns-rev-domainname         "in-addr.arpa.";

在您的 dhcpd.conf 中(我假设您使用 ISC),它将更新 DNS。

如果您无法更改 dhcp 配置,您可以在客户端脚本挂钩中使用nsupdate

于 2011-03-10T05:22:31.957 回答
0

可能的解决方案(或者我应该说是kludge)。
我能看到的唯一方法是将所有 linuxpc 机器的网络掩码扩展到 255.255.0.0(B 类网络掩码)。
但是,您必须在 DHCP 服务器上执行此操作,就像您配置 linuxpc1 eth0 mac 地址将分配 IP 地址 192.168.0.101 一样。
这意味着将所有 C 类私有子网络合并到一个 B 类块中。

详细信息
否则,我认为您无法直接使用 avahi 来做到这一点。这就是为什么。

Avahi 使用 mDNS 公开主机名。

详细来说,事情是这样工作的:
作为其处理逻辑的一部分,您的 linuxpc3 的 avahi 守护程序将在 ip 地址 224.0.0.51 的端口 5353 (?) 上发送 DNS UDP 数据报。
该地址是为 zeroconf 保留的多播地址之一(请参阅iana 多播地址)。

假设 linuxpc3 地址为 192.168.2.103(遵循您的命名约定),并假设标准 C 类网络掩码为 255.255.255.0,那么只有地址在 192.168.2.1 和 192.168.2.254 之间的那些盒子会收到相应的 dns A 更新记录(我的意思是在这些盒子中运行的其他 avahi/bonjour 守护进程)。

因此,linuxpc1 和 linuxpc2 都不会知道 linuxpc3.local 主机名/地址对。

如果所有这些框的网络掩码都扩展为 255.255.0.0,则广播范围将扩展为包括 192.168/16 网络中的所有地址。

RFC1918专用网络标准明确允许将 192.168.0.0 块配置为单个 B 类子网。

更新
看到您的评论。

第一个结论。Avahi 没有针对您的需求组合的解决方案。
Avahi 依赖于子网广播。

在 avahi 也不适用的类似情况下,我曾经求助于通过检测连接事件更改来自动更新 /etc/hosts 文件和 DNS 记录。

所有 PC 都可以看到互联网并正在检测连接更改(NetworkManager 调度程序挂钩中的 Linux - Windows 通过订阅系统事件通知服务)。

所有机器都通过 www.dropbox.com 中的消息报告其连接状态和 IP 地址,并从各自的本地保管箱文件夹中获取更新。

如果您想改为实现此功能或类似的解决方案,我必须警告您这是一项相当多的工作。

于 2011-03-09T07:51:38.637 回答