it-swarm.cn

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

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

$ 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
131
tshepang

在包括本地网络在内的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地址)。

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

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

在UNIX系统上,主机文件是/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 screenshot

输入MAC地址,IP地址和所需的名称。您可以在本地网络的地址范围内选择任何IP地址。大多数家用路由器都已预先配置为192.168。x形式的地址范围。y或10。xyz。例如,在上面显示的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地址,并且可以通过网络中的任何计算机以指定的名称访问它。

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

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

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

  • 告诉Dnsmasq除了从Internet获得的主机名以外,还要提供您的主机名。最简单的方法是在/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(以root用户身份),删除每条nameserver行,然后放置nameserver 127.0.0.1
    • 如果在Debian或Ubuntu上使用resolvconf,则在网络正常运行的情况下安装resolvconf软件包时,/etc/resolv.conf可能不是最佳选择。确保/etc/resolvconf/resolv.conf.d/目录中的文件baseheadtail不包含任何nameserver条目,然后运行resolvconf -u(作为根用户)。
  • 告诉其他计算机将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(对于最便宜的域名)。使用域名提供商的网络界面将地址分配给主机名。

动态DNS

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

150

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

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

27
tne
vi /etc/dhcp3/dhclient.conf

send Host-name "ubuntu-laptop";

/etc/init.d/networking restart
4
LanceBaynes

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

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

3
Caleb

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

1
MK Yung