我正在研究linux环境和c语言。我不能使用 python、perl、PHP 和 apache。我确切的需求是我想为网络中连接的每个设备指定相同的主机名。我知道我们不能为所有设备指定相同的主机名。但是可以通过中美?
例如:
本地网络中连接了 3 台设备:设备 A、设备 B 和设备 C。IP 地址分别为 192.168.0.4、192.168.0.5 和 192.168.0.6。每台设备都包含一个 httpd 服务器,我可以通过该服务器在我的 PC 上访问该设备的网页。假设我在浏览器中输入 192.168.0.4,它将打开该设备的网页。现在我的 PC 直接连接到一台设备。我将在浏览器中写入 device.local,这样它应该会打开本地设备的网页。这可能吗?如果可以,那么如何操作?
我所做的研究:
- 我使用过 dnsmasq,但它无法运行。我刚刚在 dnsmasq.conf 文件中启用了 cname。它给出了以下错误:dnsmasq:/etc/dnsmasq.conf 的第 529 行有错误选项
我使用 avahi 进行零配置网络。其中有 avahi-daemon。因此我可以为每个设备指定主机名。但它给出的名称类似于 device.local、device-2.local 和 device-3.local。之后我也按照此链接操作,但对我不起作用。
提前致谢。解决这个问题对我来说真的很重要。
答案1
您可以使用轮询 DNS使单个 DNS 条目在多个 IP 地址池中给出一个 IP 地址。因此,对 的查询device.local
将使用 进行回复192.168.0.4
,然后对 的下一个查询device.local
将使用 进行回复,192.168.0.5
依此类推,直到地址池用完。一旦地址池连续给出,DNS 服务器将从 IP 地址列表的顶部开始,并再次以相同顺序给出它们。本质上,这是穷人的负载平衡。
记录CNAME
不是您想要的。停止使用它们 - 您想要使用A
记录和循环赛。
假设我已将第一台笔记本电脑连接到设备 A,将第二台笔记本电脑连接到设备 B。在两台笔记本电脑的浏览器中,我都输入了 device.local。那么在第一台笔记本电脑上应该会显示设备 A 的网页,在第二台笔记本电脑上应该会显示设备 B 的网页。这可能吗?
现在情况就不一样了。在上面我谈到的第一个场景中,所有设备(设备 A、设备 B、设备 C 以及任何想要访问它们的 PC/笔记本电脑)都在同一个网络上,或者至少有一条通往设备 A、B 和 C 的清晰路线。
如果您将笔记本电脑直接连接到设备 A,但无法连接到设备 B 或 C,那么您会遇到两个问题:
- 您无法访问托管循环记录的 DNS 服务器。您唯一的选择是在笔记本电脑上托管某种 DNS 服务器服务,或者使用吞咽hosts 文件。
- 如果您在笔记本电脑上托管了循环 DNS 服务,那么您获得正确 IP 地址的机会只有很小一部分。如果 DeviceC 的 IP 地址在循环队列中排在下一个,但您只连接到 DeviceA,那么您就没那么幸运了。
如果两个设备之间需要直接连接,您只能寄希望于 SAMBA / NetBIOS 提供的广播名称解析。但是,这在子网间不起作用(没有很大的麻烦),在 Yon Grande Internet 等公共网络上当然也不起作用。
此时,我相信你需要认真考虑一下:
- 你想设计什么
- 为什么你要这样设计
- 所涉及协议和标准的目的和局限性。(即一般的 DNS 和名称解析)
答案2
您使用的方法完全错误。您希望每台设备以不同的方式解析名称 - DNS 的重点不是让不同的设备单独解析名称。您要么希望每台设备都有不同的 DNS 服务器,这意味着每台机器都设置一个本地 DNS 服务器,要么...明智的答案是,只使用系统本身的 hosts 文件,这会更简单。