拥有静态 DNS 主机名

拥有静态 DNS 主机名

我的 Raspberry Pi 3 B+ 上运行着一个实时应用程序,它会生成一个(非常大的)日志文件。为了让非技术人员下载它,我创建了一个用 Electron(NodeJs)编码的桌面应用程序。这个想法是列出网络的所有可用 IP 地址及其主机名,以允许非技术人员选择正确的 IP 地址并自动复制(通过 SFTP)其 PC 上的日志文件。SFTP 代码运行良好(感谢 nodejs 中的 ssh2 模块),但是,我可以识别我想要的 Raspberry。它们正确地从 DHCP 服务器获取 IP 地址,但我找不到获取其主机名的方法。下面是我的代码输出,列出了网络上可用的系统:

192.168.5.61  // err:  { Error: getnameinfo ENOTFOUND 192.168.5.61
    at GetNameInfoReqWrap.onlookupservice [as oncomplete] (dns.js:159:26)
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getnameinfo',
  hostname: '192.168.5.61' }
192.168.5.61  //  undefined  //  undefined
192.168.5.65  //  USER-PC  //  ssh
192.168.5.62  //  KM59CD4F  //  ssh
192.168.5.100  //  server.blabla.com.au  //  ssh

如您所见,所有系统都返回了有效的主机名,除了我的系统报错。我的问题是,我可以在我的 Raspberry 上配置谁来发回有效的主机名? 我尝试使用 dhcpd.conf、dnsmasq.conf 和 hosts。完美的结果将与“192.168.5.65 // USER-PC // ssh”相同,其中 USER-PC 将成为我的系统主机名。

注意:当我在 /etc/hosts 中输入静态 IP 地址时,我的代码会检测到它并将正确的主机名发回给我。

答案1

您的扫描不会查询系统本身。它会查询路由器上的内部 DNS 服务器,该服务器会收集作为 DHCP 租约请求的一部分提供的主机名。

如果 Raspberry Pi 使用 DHCP 获取其 IP 地址,请确保 DHCP 客户端配置为发送“主机名”租约选项 (12)。某些路由器可能还接受“fqdn”选项 (81)。

  • 对于 dhcpcd,将选项添加hostname到配置文件中。
  • 对于 dhclient,将选项添加send host-name = gethostname();到配置文件中。(您也可以使用 . 指定自定义名称send host-name = "foo";
  • 对于 NetworkManager,请ipv4.dhcp-send-hostname在连接配置文件中启用。(某些版本可能需要ipv4.dhcp-hostname手动设置为您想要的主机名。
  • 对于 systemd-network,请确保 [DHCP] 部分已SendHostname=启用(默认)和Anonymize=禁用(也是默认)。

如果 Raspberry Pi 使用静态 IP 配置,您还需要向路由器本身添加静态 DNS 条目。(映射名称 → 地址应该就足够了,路由器将添加反向映射。)

答案2

错误来自我公司的 DHCP 服务器。这是 Windows Server (2003) 的一个(非常)旧版本,我在较新的版本上进行了同样的测试,结果与预期一致。

相关内容