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

$ 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配置?另请参阅更新的帖子。

我的回答是你所追求的吗?如果是这样,这个问题需要简化-谁知道ping和/ etc / hosts却不了解DNS?

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

答案是“安装和配置dnsmasq”。做完了:)

#1 楼

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


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

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

主机文件

hosts文件方法具有不需要任何特殊方法的优点。如果您有多台计算机,可能会很麻烦,因为当一台计算机的名称更改时,您必须更新每台计算机。如果动态分配B的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的几乎每个操作系统都有一个类似的文件; Wikipedia有一个列表。

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



确定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条目,隧道或虚拟条目。

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

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

如果您有以下方法,此方法是迄今为止最简单的方法必需的设备。您只需要配置一台设备,所有计算机都将知道彼此的名称。此方法假定您的计算机通过DHCP获取IP地址,这是计算机连接到网络时自动检索IP地址的一种方法。如果您不知道DHCP是什么,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.x.y或10.x.y.z形式的地址范围。例如,在上面显示的Tomato路由器上,“网络”标签中有一个值为10.3.0.1的“路由器IP地址”设置和一个值为255.255.255.0的“子网掩码”设置,这意味着计算机处于本地网络的地址格式必须为10.3.0.z。自动分配的DHCP地址也有一定范围的地址(10.3.0.129–10.3.0.254);对于您手动分配的DHCP地址,请选择一个不在此范围内的地址。

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

使用Dnsmasq创建自己的DNS服务器。

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

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


除了从Internet获得的主机名之外,还告诉Dnsmasq提供主机名。最简单的方法是在/etc/hosts中输入名称和IP地址(请参见上面的“主机文件”部分),并确保/etc/dnsmasq.confno-hosts伪指令没有注释。 (以#开头的行已被注释掉。)您可以将名称放在另一个文件中;例如:如果这样做,请在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软件包。确保base目录中的文件headtail/etc/resolvconf/resolv.conf.d/不包含任何nameserver条目,然后运行resolvconf -u(以root用户身份)。


告诉其他机器以S用作S DNS服务器。编辑/etc/resolv.conf并用单个nameserver替换所有nameserver 10.3.0.2行,其中10.3.0.2是S的IP地址(有关如何查找S的IP地址,请参见上文)。

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

全球Internet上的名称

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

获取自己的域名

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

动态DNS

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

评论


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

– RaduRădeanu
13年4月27日在13:10

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

–吉尔斯'所以-不再是邪恶的'
13年4月27日在14:26

我修改了c:\ windows \ system32 \ drivers \ etc \ hosts并成功运作。谢谢!

– RaduRădeanu
2013年4月27日15:29



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

–詹森·图兰(Jason Turan)
16 Dec 26'3:39

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

– WesternGun
18年7月2日在15:37



#2 楼

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

由于您要询问,其他所有内容似乎都过分了。如果不是,那么您可能不会问。

评论


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

– Zitrax
16 Mar 27 '16 at 13:44

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

–tne
16年3月28日在16:15

又名Zeroconf或Bonjour。由avahi软件包提供。例如,您可以通过avahi-browse -alr查询网络。

– DanMan
18 Mar 13 '14:55



#3 楼

vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";




/etc/init.d/networking restart


评论


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

– tshepang
2011年7月18日在21:15

第一位将在dhcp服务器上完成(并且您想运行service restart dhcpd)。第二部分将在客户端上完成,并且现在大多数发行版都应在服务网络重新启动时运行。

–卡莱布
2011年7月18日在21:54

我记得我只需要在客户端运行此程序。

–LanceBaynes
2011年7月19日下午5:11

#4 楼

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

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

#5 楼

如果您不希望与主机文件混合,并且偶然拥有Internet域名和Internet访问权限,则可以创建一个指向内部IP的A类型子域。例如,设置intranet-pc1.someperson.com并指向10.0.1.13

#6 楼

正如建议的那样,多播DNS(mDNS)似乎是这里最简单的解决方案,只要您只想从同一局域网访问计算机即可。
在Linux上,您可以使用以下方式将主机名导出到具有mDNS的网络中: avahi。要将其安装在Ubuntu服务器20.04上,请使用apt install avahi-daemon
之后,您的服务器应可通过以下方式访问:hostname.local