为什么我无法使用为树莓派设置的主机名来访问它?

为什么我无法使用为树莓派设置的主机名来访问它?

我的家庭网络上有两台计算机:一台 Raspberry Pi 4 和一台 Windows 笔记本电脑。我的 Raspberry Pi 运行的是它自带的默认 Raspbian。我正在尝试为我的 Raspberry Pi 设置一个主机名,以便可以通过该主机名在网络上访问它。

Raspberry Pi 在192.168.0.40,而 Windows 笔记本电脑在192.168.0.140

我将/etc/hostname文件从更改raspberrypiphobos,这是我想要使用的主机名。

/etc/resolv.conf看起来像这样:

  1 # Generated by resolvconf
  2 domain cable.rcn.com
  3 nameserver 192.168.0.1

/etc/dhcp/dhclient.conf看起来像这样:

  1 # Configuration file for /sbin/dhclient.
  2 #
  3 # This is a sample configuration file for dhclient. See dhclient.conf's
  4 #       man page for more information about the syntax of this file
  5 #       and a more comprehensive list of the parameters understood by
  6 #       dhclient.
  7 #
  8 # Normally, if the DHCP server provides reasonable information and does
  9 #       not leave anything out (like the domain name, for example), then
 10 #       few changes must be made to this file, if any.
 11 #
 12
 13 option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
 14
 15 send host-name = gethostname();
 16 request subnet-mask, broadcast-address, time-offset, routers,
 17         domain-name, domain-name-servers, domain-search, host-name,
 18         dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
 19         netbios-name-servers, netbios-scope, interface-mtu,
 20         rfc3442-classless-static-routes, ntp-servers;

命令hostname返回phobos

当我尝试从我的 Windows 笔记本电脑 ping Raspberry Pi 时,我得到以下信息:

PS C:\Users\Leo> ping phobos
Ping request could not find host phobos. Please check the name and try again.

然而,当我 ping raspberrypi(这是我在文件中找到的原始主机名)时/etc/hostname,我得到:

PS C:\Users\Leo> ping raspberrypi

Pinging raspberrypi.cable.rcn.com [192.168.0.40] with 32 bytes of data:
Reply from 192.168.0.40: bytes=32 time=6ms TTL=64
Reply from 192.168.0.40: bytes=32 time=5ms TTL=64
Reply from 192.168.0.40: bytes=32 time=6ms TTL=64
Reply from 192.168.0.40: bytes=32 time=4ms TTL=64

Ping statistics for 192.168.0.40:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 4ms, Maximum = 6ms, Average = 5ms

这让我认为我的路由器(Arris DG3450A)没有在其 DHCP 设置中更新 Raspberry Pi 的主机名,但我不确定如何通知它这样做。任何建议都将不胜感激。如果我可以提供任何其他信息,请告诉我。

答案1

要通过 访问设备hostname,路由器和客户端设备都必须正确配置,否则路由器就不知道如何路由流量。

通过主机名访问设备时,它们是通过路由器端访问的<hostname>.<LocalDomain>,而路由器端不是通过 DHCP 配置的,因此必须执行以下操作:

  1. 路由器
    1. 通过以下方式访问的设备设置静态 IP hostname
      IP      '192.168.0.40'
      mac     'A1:B2:C3:D4:E5:F6'
      name    'Phobos'
      
    2. 本地域路由器上的名称必须在所有设备上都相同
      • 默认本地域通常是.local.lan,但可以定制为任何东西
      • 所有客户端必须匹配设置为本地域在路由器上

  2. 视窗
    1. 本地域是工作组名称,通过以下方式设置:

      • 图形用户界面(GUI):
        WinKey+ R打开: SystemPropertiesAdvanced→ 确定
        1. 标签:计算机名改变...成员
        2. 工作组: <LocalDomain>→ 确定 → 确定
      • 命令行:
        WinKey+ R打开: powershellCtrl++Shift确定
        1. 任何一个Add-Computer或者wmic可用于:
          # PowerShell:
            Add-Computer -WorkGroupName "<LocalDomain>"
          
          # Windows Management Instrumentation Command:
            wmic computersystem where name="%computername%" call joindomainorworkgroup name="<LocalDomain>"
          
    2. 设置客户端hostname条目%WinDir%\System32\etc\hosts

      #
      
               ##::[[---  Windows Host Config  ---]]::##
      
      #===========================================================
                          ##----- LAN -----##
      #===========================================================
      
        # Static IP:        Hostname:     Hostname.LocalDomain:
          192.168.0.1       <router>      <router>.lan
          192.168.0.40      Phobos        Phobos.lan
      
    3. 重启

  3. 树莓派
    设置为路由器的本地域 (因发行版而异)重启

答案2

IP 网络上的主机名解析一直是一个比任何新手想象的更棘手且更不直观的话题。

将您自己的主机名称设置为该主机的本地名称对网络上的任何其他人来说都没有任何意义。您不能指望该名称更改会自动在网络上公布或通过长期以来使用的任何服务发现和名称解析协议自动注册到任何名称服务器。因此,您必须自己决定希望您的主机名称以何种方式被网络上的其他设备发现和解析,并找到实现这一点的方法。

如果你的 Raspberry Pi 正在运行多播 DNS (mDNS) 的实现,例如 Avahi,那么如果 Avahi 守护程序知道/etc/hostname通过hostname(1)命令查找你的主机名,你的设备应该会在你的网络上显示为主机名.本地(例如 phobos.local)。

如果您的网络上没有使用 mDNS,则可能需要手动更新本地 DNS 服务器以包含 phobos.example.com 的条目(不要使用 .local;将 .local 留给 ZeroConf/mDNS)。

DHCP 是关于客户端从服务器请求配置设置,而不是客户端将主机名等信息推送到服务器。它从未用于主机名到 IP 地址的解析。DHCP 协议确实为 DHCP 客户端提供了一种方法来通知 DHCP 服务器客户端认为其自己的主机名是什么,但它主要是提供信息的,而且大多数 DHCP 服务器不包含将客户端定义的主机名推送到任何附近的 DNS 服务器或通过任何其他服务发现或名称解析协议进行宣传的机制。但您的家庭网关设备(您的 Arris DG3450A)可能确实在其嵌入式 DHCP 服务器和嵌入式 DNS 服务之间进行了某种集成。

当客户端设备将其自己的自定义主机名注册到 DNS 服务器时,有基于适当的标准轨道协议(如 DNS UPDATE(RFC 2136))的解决方案,也有不太标准但可能更为广泛的事实上的市场解决方案(如动态 DNS(DDNS))。

我认为您没有说过您使用什么作为 DNS 服务器,但您可能想看看它是否支持 DNS UPDATE 或 DDNS,并看看您的 Raspbian 环境是否有其中任一协议的客户端。

答案3

有一种手动操作的方法可以用主机名替换本地 IP...

在每台本地机器上,编辑您的/etc/hosts文件
C:\Windows\System32\etc\hosts如果我没记错的话)

添加一行说明例如
129.168.0.40 pi4 raspberry4 rp4 hobby play

您将能够使用其中任意一个名称来代替 IP。

值得注意的警告;如果您更改了 IP,则需要在文件的每个活动实例中手动更改它。也就是说,将其保存在单个“服务器”上(带有正在运行的 sshd),并将scp其保存到其他机器上?

(有在 [Shell] 启动时运行脚本的方法,超出了本文的范围)
Linux提示:sudo 仅在 lost+found 文件夹中执行一个命令,不需要执行更多

想法:创建一个在每台本地计算机上运行的脚本,并将scp/etc/hostname 添加到 sshd-server,然后可以将所有这些附加在一起并提供为本地主机文件。

相关内容