以下是我想使用其主机名访问的计算机的详细信息:
$ 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
答案1
在互联网上,包括本地网络,机器通过以下方式相互调用IP地址。为了从机器 A 使用机器 B 的名称访问机器 B,机器 A 必须有某种方式将 B 的名称映射到其 IP 地址。 A 上声明机器名的方式有以下三种:
- A主机文件。这是一个将名称映射到地址的简单文本文件。
- 这域名系统 (DNS)。这是全球互联网上使用的方法。例如,当您在浏览器中加载此页面时,计算机所做的第一件事就是发出 DNS 请求以了解 的地址
unix.stackexchange.com
。 - 其他名称数据库,例如NIS,LDAP或者活动目录。这些在一些公司网络中使用,但并不经常使用(许多使用 NIS、LDAP 或 AD 作为用户数据库的网络使用 DNS 作为计算机名称)。如果您的网络使用其中之一,那么您有一位专业的网络管理员,应该询问他该怎么做。
这些在实践中可以通过多种方式发挥作用;不可能涵盖所有这些。在这个答案中,我将描述一些常见的情况。
主机文件
主机文件方法的优点是不需要任何特殊方法。如果您有多台机器,这可能会很麻烦,因为当一台机器的名称更改时,您必须更新每台机器。如果 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 条目:
确定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上的hosts文件。如果A运行的是unix系统,则需要以
/etc/hosts
超级用户身份进行编辑;看如何以系统管理员 (root) 身份运行命令。
家庭或小型办公室网络上的 DHCP+DNS
如果您有必要的设备,此方法是迄今为止最简单的方法。您只需配置一台设备,所有计算机就会知道彼此的名称。此方法假设您的计算机通过以下方式获取其 IP 地址动态主机配置协议,这是计算机连接到网络时自动检索 IP 地址的一种方法。如果您不知道 DHCP 是什么,他们可能知道。
如果您的网络有家庭路由器,这是为连接到该路由器的计算机配置名称的最佳位置。首先,你需要弄清楚MAC地址B.每个网络设备都有一个唯一的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
下面的行)。
现在,在路由器的网络界面上,查找“DHCP”等设置。设置的名称和位置完全取决于路由器型号,但大多数路由器都有一组相似的基本设置。这是它在 a 上的样子番茄固件:
输入 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 地址,并且可以从网络中的任何计算机通过指定的名称访问它。
使用 Dnsmasq 创建您自己的 DNS 服务器
如果您没有功能强大的家庭路由器,您可以在任何 Linux 计算机上设置相同的功能。我将解释如何使用域名解析建立域名系统。类似的程序还有很多;我选择 Dnsmasq 是因为它易于配置且轻量级(例如,上面所示的 Tomato 路由器就是使用的)。 Dnsmasq 可在大多数适用于 PC、服务器和网络设备的 Linux 和 BSD 发行版上使用。
选择一台始终开启、具有静态 IP 地址、运行某种 Linux 或 BSD 的计算机;我们称之为 S(服务器)。在 S 上,安装该dnsmasq
软件包(如果尚不存在)。下面我假设配置文件是/etc/dnsmasq.conf
;位置可能因某些发行版而异。现在您需要做几件事。
- 告诉 Dnsmasq 除了从 Internet 获取的主机名之外还提供您的主机名。最简单的方法是输入名称和 IP 地址
/etc/hosts
(请参阅上面的“主机文件”部分),并确保/etc/dnsmasq.conf
没有no-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
一行。更改后,重新启动 Dnsmasq。执行此操作的命令取决于发行版;典型的可能性包括或。server=8.8.8.8
/etc/dnsmasq.conf
/etc/dnsmasq.conf
restart dnsmasq
/etc/init.d/dnsmasq restart
- 如果您运行的是 Debian、Ubuntu 或衍生版本,请安装该
- 告诉 S 对所有主机名请求使用 Dnsmasq 服务。编辑文件
/etc/resolv.conf
(以 root 身份),删除每一nameserver
行,然后放入nameserver 127.0.0.1
。- 如果您在 Debian 或 Ubuntu 上使用 resolvconf,那么在网络启动并运行的
/etc/resolv.conf
情况下安装软件包可能不是最佳的。resolvconf
确保目录中的filesbase
、head
和不包含任何条目,然后运行(以 root 身份)。tail
/etc/resolvconf/resolv.conf.d/
nameserver
resolvconf -u
- 如果您在 Debian 或 Ubuntu 上使用 resolvconf,那么在网络启动并运行的
- 告诉其他机器使用S作为DNS服务器。编辑
/etc/resolv.conf
所有nameserver
行并将其替换为单个行nameserver 10.3.0.2
,其中 10.3.0.2 是 S 的 IP 地址(有关如何查找 S 的 IP 地址,请参阅上文)。
您还可以使用 Dnsmasq 作为动态主机配置协议服务器,使机器能够自动获取与其名称对应的地址。这超出了本答案的范围;查阅 Dnsmasq 文档(这并不难)。请注意,给定本地网络上只能有一个 DHCP 服务器(本地网络的确切定义超出了本答案的范围)。
全球互联网上的名称
到目前为止,我已经假设了一个本地网络。如果您想为位于世界不同角落的机器命名怎么办?您仍然可以使用上述任何技术,只不过涉及 DHCP 的部分仅适用于本地网络。或者,如果您的计算机有公共 IP 地址,您可以为它们注册您自己的公共名称。 (您也可以将私有 IP 地址分配给公共名称;这种情况不太常见,也不太有用,但不存在技术困难。)
获取您自己的域名
你可以得到你自己的域名并将 IP 地址分配给该域内的主机名。您需要向域名提供商注册域名;这通常花费 10-15 美元/年(对于最便宜的域名)。使用域名提供商的 Web 界面将地址分配给主机名。
动态域名解析
如果您的计算机有动态 IP 地址,您可以使用动态域名解析当地址更改时更新与计算机名称关联的 IP 地址的协议。并非所有域名提供商都支持动态 DNS,因此请在购买前先进行考察。供个人使用,无IPexample.ddns.net
如果您使用自己的域名(例如),则提供免费的动态 DNS 服务。
答案2
使用组播 DNS(mDNS)。这是一个在 LAN 子网上工作的零配置协议。无需服务器。使用.local
TLD(这是您已经使用的)。
因为你在问,其他一切似乎都太过分了。如果不是,那么您可能不会问。
PS:.local
TLD 可能是通过解析器的 DNS 搜索路径暗示的,并且完整的域可能会根据实施情况从特定于操作系统的主机名概念自动构建(因此您可能不需要以任何方式更改主机名) 。例如,如果您的主机名是svr
,svr.local
或者甚至svr
应该在您的 LAN 子网上解析。
答案3
答案4
计算机不仅仅神奇地知道哪些主机名属于哪些 IP 地址。即使在本地主机上,也涉及某种查找。
您将需要配置其他系统以使用某种名称查找服务。这可以/etc/hosts
位于客户端、ldap、nsswitch 或普通 DNS 服务器上。我使用bind
并输入本地域内的所有本地计算机,然后让它为该站点提供 DNS 服务。