是否可以分层次地收集.local域IP地址以构建基于dhcp的dns?

时间:2011-03-09 04:08:13

标签: linux dns dhcp avahi dns-sd

假设您处于正常的dhcp环境中,

您将获得如下的IP地址:

  • 192.168.0.101 for segmentpc1.localdomain on segment A
  • 192.168.1.102 for stagepc2.localdomain on segment B

我想通过在主机名设置的那些linuxpcs上安装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 ... 我认为重用avahi解析dhcped ip地址的能力是有益的。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 multicast addresses)。

假设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网络中的所有地址。

RFC1918private networks的标准明确允许将192.168.0.0块配置为单个B类子网。

<强>更新
看过你的评论。

第一个结论。 Avahi无法满足您的要求 Avahi依靠子网广播。

在avahi也不适用的类似环境中,我曾尝试通过检测连接事件更改来自动更新/ etc / hosts文件和DNS记录。

所有PC都可以看到互联网并检测到连接更改(NetworkManager dispatcher hooks中的Linux - Windows通过订阅System Event Notification Service)。

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

如果你想要实现这个或类似的解决方案,我必须警告你这是相当多的工作。