如何使用主机名从局域网访问计算机


120

以下是我要使用其主机名访问的计算机的详细信息:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

这是默认的Debian 6(Squeeze)安装,所以我还没有摆弄任何东西。

这是我从尝试访问以上计算机的计算机(运行Debian Unstable)获得的:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local

您需要在客户端(运行的计算机ping)上或在客户端查询的计算机上执行某些操作。客户端上的操作系统是什么?它的DNS配置是什么?
吉尔斯

什么是DNS配置?另外,请参阅更新的帖子。
tshepang 2011年

1
我的回答是你所追求的吗?如果是这样,问题需要简化-谁知道ping/etc/hosts,但不是DNS呢?
吉尔斯

非常感谢。会看看。哦,这不只是答案,而是文章。:)
tshepang 2011年

3
答案是“安装和配置dnsmasq”。做完了 :)
沃伦·杨

Answers:


145

在包括本地网络在内的Internet上,机器通过IP地址相互调用。为了使用机器B的名称从机器A访问机器B,机器A必须具有某种方式将B的名称映射到其IP地址。有三种在A上声明机器名称的方法:

  • 一个hosts文件。这是一个将名称映射到地址的简单文本文件。
  • 域名系统(DNS) 。这是在全球Internet上使用的方法。例如,当您在浏览器中加载此页面时,计算机要做的第一件事是发出DNS请求以了解其地址unix.stackexchange.com
  • 其他名称数据库,例如NISLDAPActive Directory。这些在某些公司网络中使用,但并不经常使用(许多将NIS,LDAP或AD用于用户数据库的网络将DNS用作计算机名)。如果您的网络使用其中之一,则您有专业的网络管理员,应询问他该怎么做。

在实践中,有许多方法可以起作用。不可能涵盖所有内容。在这个答案中,我将描述一些常见的情况。

主机文件

hosts文件方法的优点是不需要任何特殊方法。如果您有多台计算机,可能会很麻烦,因为当一台计算机的名称更改时,您必须更新每台计算机。如果动态分配B的IP地址是不合适的(这样每次连接到网络时都会获得一个不同的IP地址)。

主机文件是将名称映射到IP地址的简单行列表。看起来像这样:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

在UNIX系统上,hosts文件是/etc/hosts。在Windows上为c:\windows\system32\drivers\etc\hosts。几乎可以连接到Internet的每个操作系统都有一个相似的文件;维基百科有一个列表

要在A的主机文件中为B添加条目:

  1. 确定B的IP地址。在B上,运行命令ifconfig(如果找不到该命令,请尝试/sbin/ifconfig)。输出将包含以下行:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    在此示例中,B的IP地址为10.3.1.42。如果有几inet addr:行,请选择与您的网卡相对应的那一行,而不是该lo条目,隧道或虚拟条目。

  2. 编辑A上的hosts文件。如果A正在运行某些unix系统,则需要以/etc/hosts超级用户身份进行编辑;否则,请执行超级用户编辑。请参阅如何以系统管理员(root)身份运行命令

家庭或小型办公室网络上的DHCP + DNS

如果您具有必需的设备,则此方法是最简单的方法。您只需要配置一台设备,所有计算机都将知道彼此的名称。此方法假定您的计算机通过DHCP获得IP地址,这是计算机连接到网络时计算机自动检索IP地址的一种方法。如果您不知道DHCP是什么,那么他们可能会知道。

如果您的网络具有家用路由器,那么这是为连接到该路由器的计算机配置名称的最佳位置。首先,您需要找出B 的MAC地址。每个网络设备都有一个唯一的MAC地址。在B上,运行命令ifconfig -a(如果找不到该命令,请尝试/sbin/ifconfig -a)。输出将包含以下行:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

在此示例中,MAC地址为01:23:45:67:89:ab。您必须选择与通过电缆(或wifi卡,如果通过wifi连接)连接到路由器的网络端口相对应的HWaddr线。如果您有多个条目,但不知道是哪个条目,则插入电缆,然后查看哪个网络设备收到IP地址(inet addr下面的行)。

现在,在路由器的Web界面上,查找“ DHCP”之类的设置。设置的名称和位置完全取决于路由器型号,但是大多数具有相似的基本设置。这是Tomato固件上的外观:

番茄截图

输入MAC地址,IP地址和所需的名称。您可以在本地网络的地址范围内选择任何IP地址。大多数家庭路由器都已预先配置为地址格式为192.168。Xy或10. xÿž。例如,在上面显示的Tomato路由器上,“网络”标签中有一个值为10.3.0.1的“路由器IP地址”设置和一个值为255.255.255.0的“子网掩码”设置,这意味着计算机在本地网络的地址格式必须为10.3.0。ž。自动分配的DHCP地址也有一定范围的地址(10.3.0.129–10.3.0.254);对于您手动分配的DHCP地址,请选择一个不在此范围内的地址。

现在将B连接到网络,它应该获得您指定的IP地址,并且可以通过网络中的任何计算机以指定的名称访问它。

使用Dnsmasq制作自己的DNS服务器

如果您没有功能强大的家庭路由器,则可以在任何Linux机器上设置相同的功能。我将解释如何使用Dnsmasq设置DNS。还有许多其他类似的程序。我之所以选择Dnsmasq,是因为它易于配置且轻巧(例如,上面所示的Tomato路由器使用的是)。Dnsmasq在大多数Linux和BSD发行版中都可用于PC,服务器和网络设备。

选择一台始终打开的计算机,该计算机具有一个静态IP地址,并且正在运行某种Linux或BSD;我们称它为S(对于服务器)。在S上,安装dnsmasq软件包(如果尚未安装)。下面,我假定配置文件为/etc/dnsmasq.conf; 位置可能会有所不同。现在您需要做几件事。

  • 告诉Dnsmasq除了从Internet获得的主机名之外,还要提供您的主机名。最简单的方法是在中输入名称和IP地址/etc/hosts(请参见上面的“主机文件”部分),并确保/etc/dnsmasq.confno-hosts指令中没有未注释的指令。(以a开头的行#被注释掉。)您可以将名称放在另一个文件中;如果你这样做,放线addn-hosts=/path/to/hosts/file/etc/dnsmasq.conf
  • 告诉Dnsmasq如何获取Internet上机器名称的IP地址。

    • 如果您正在运行Debian,Ubuntu或衍生版本,请安装该resolvconf软件包。在最常见的情况下,一切都将立即可用。
    • 如果您的网络管理员或ISP为您提供了DNS服务器的地址,请在中输入它们/etc/dnsmasq.conf,例如:

      server=8.8.8.8
      server=8.8.4.4
      
    • 如果您不知道当前的DNS设置是什么,请查看文件/etc/resolv.conf。如果您看到类似nameserver 8.8.8.8的线,则server=8.8.8.8在其中插入一条线/etc/dnsmasq.conf。更改后/etc/dnsmasq.conf,重新启动Dnsmasq。执行此命令取决于分发;典型的可能性包括restart dnsmasq/etc/init.d/dnsmasq restart

  • 告诉S将Dnsmasq服务用于所有主机名请求。编辑文件/etc/resolv.conf(作为根用户),删除每一nameserver行,然后放入nameserver 127.0.0.1
    • 如果您在Debian或Ubuntu上使用resolvconf,则在网络启动且正在运行的情况下/etc/resolv.conf安装resolvconf软件包时,可能不是最佳选择。确保文件baseheadtail在该/etc/resolvconf/resolv.conf.d/目录中不包含任何nameserver条目,然后运行resolvconf -u(作为root)。
  • 告诉其他计算机将S用作DNS服务器。编辑/etc/resolv.conf并用nameserver单行替换所有行,nameserver 10.3.0.2其中10.3.0.2是S的IP地址(有关如何查找S的IP地址,请参见上文)。

您还可以将Dnsmasq用作DHCP服务器,以便计算机可以自动获取与其名称对应的地址。这超出了此答案的范围;查阅Dnsmasq文档(这并不困难)。请注意,在给定的本地网络上只能有一个DHCP服务器(本地网络的确切定义超出了此答案的范围)。

全球互联网上的名字

到目前为止,我已经假设了本地网络。如果您想给位于世界不同角落的机器起个名字怎么办?您仍然可以使用上述任何一种技术,只是涉及DHCP的部分仅适用于本地网络。或者,如果您的计算机具有公共IP地址,则可以为其注册一个自己的公共名称。(您也可以将私有IP地址分配给公用名称;这种地址较不常见,也不太有用,但是没有技术上的困难。)

获取自己的域名

您可以获取自己的域名,并将IP地址分配给该域内的主机名。您需要向域名提供商注册域名;这通常每年需要花费$ 10– $ 15(对于最便宜的域名)。使用域名提供商的Web界面将地址分配给主机名。

动态DNS

如果您的计算机具有动态IP地址,则可以在地址更改时使用动态DNS协议更新与计算机名称关联的IP地址。并非所有的域名提供商都支持动态DNS,因此购买前请先购物。对于个人使用,如果您使用自己的域(例如),则No-IP提供免费的动态DNS服务example.ddns.net


使用Dnsmasq制作自己的DNS服务器:当另一台计算机安装Windows时,我该如何告诉另一台计算机使用S
RaduRădeanu13年

@Radu您可以在某个位置通过控制面板更改与连接关联的DNS服务器。我认为您需要拉起网络接口的连接属性。
吉尔斯2013年

我修改了c:\ windows \ system32 \ drivers \ etc \ hosts,它正常工作。谢谢!
RaduRădeanu2013年

我正在拔头发寻找它,并按照您的建议在路由器中找到了它。感谢您提供详细信息!
杰森·图兰

如果是公司网络,我必须告诉基础架构部门。将我的linux mac添加到DNS服务器列表中,对吗?
WesternGun

24

使用多播DNS(mDNS)。这是一种适用于LAN子网的零配置协议。无需服务器。使用.localTLD(这是您已经使用的)。

因为您在问,所以其他一切似乎都过分了。如果不是,那么您可能不会问。


1
如果未在每个Windows框中都安装某些工具,则Windows似乎不支持mDNS。
Zitrax

1
@Zitrax好点(虽然这是一个* nix网站)。Windows安装程序的相关信息可以在此处找到-相对简单。
tne

3
又名Zeroconf或Bonjour。由avahi包装提供。您可以通过avahi-browse -alr例如查询网络。
DanMan '18

4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

/etc/init.d/networking restart

我应该在客户端还是主机上运行它?
tshepang 2011年

第一位将在dhcp服务器上完成(并且您想运行service restart dhcpd)。第二部分将在客户端上完成,并且现在大多数发行版都应以方式运行service networking restart
Caleb

我记得,我只需要在客户端上运行这个..
LanceBaynes

3

计算机不仅神奇地知道哪些主机名属于哪些IP地址。即使在localhost上,也会涉及某种查找。

您将需要配置其他系统以使用某种名称查找服务。它可以/etc/hosts在客户端,ldap,nsswitch或普通DNS服务器上。我使用bind并输入本地域内的所有本地计算机,然后让它为该站点提供DNS。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.