在 /etc/hostname 中,我有myname
.
在 /etc/hosts 中,我有:
127.0.0.1 localhost.localdomain localhost myname
::1 localhost.localdomain localhost myname
我对主机名的真正含义及其用途有一个模糊的了解。
这些更精确的问题可以帮助我更好地理解它:
上面示例中我的主机名到底是什么?
myname
或者是其他东西?如果我改为myname.domain.com
in/etc/hostname
,那么我的真实主机名是什么?在示例中,命令
hostname
返回myname
,而命令hostname -f
返回localhost.localdomain
。我认为这/etc/hosts
只是名称和 IP 地址之间的映射。它在这里似乎还有另一个功能。什么是 FQDN 以及它的用途是什么?如何检索?为什么localhost.localdomain
?如果我进去的话
myname.domain.com
,/etc/hostname
我hostname -f
会回来的myname.domain.com
。为什么?为什么这些文件中的 fqdn 不以点结尾?
hostname -d
和 是等价的吗dnsmydomain
?在什么情况下可以使用我的主机名 (
myname
) 以及何时必须使用我的 FQDN (localhost.localdomain
)?
答案1
/etc/hostname
包含本地运行的应用程序已知的机器名称。/etc/hosts
DNS 将名称与 IP 地址关联起来。myname
可以映射到机器可以访问的任何IP地址,但是将其映射到127.0.0.1
是不美观的。- 不是
/etc/hosts
,但/bin/hostname
具有另一个功能-f
。 - 因为
/etc/hosts
可以超越常识。谨慎编辑它,不要在临时补丁和实验后留下垃圾。 - 两种风格(⋯
.
顶级域名.
和….
顶级域名)是可以接受的。前者是明确的,而后者是普遍存在的。 - 不知道
dnsmydomain
是什么,但可能性不大。从技术上讲,在其中查找某些内容/etc/hosts
并不是“DNS”。 - 请记住这一点 1. 主机名 – 适用于本地运行的应用程序;也适用于诸如 SMB (samba) 之类的特殊网络协议。 FQDN(如果不是伪造的或占位符,如
localhost.localdomain
)——用于从外部访问机器。 FQDN 在使用的地方必须是可解析的。
答案2
/etc/主机名和/etc/主机很简单,但又不那么简单……
如何快速设置 Debian/etc/hostname
和/etc/hosts
1)编辑/etc/主机名。
有两种有效的方法可以进行设置。
要么做到:
machine
,即该处理器的一个简单的单字名称。
例如,“joe
”可能是您自行选择的机器名称。
请注意,这将需要 /etc/hosts 中的别名,如下所述。
或者
machine.domain.net
,即完全限定域名 (FQDN)。
例如, 'joe.xyz.com
'。
(假设您有一条 DNS 主机“A”记录,从 joe.xyz.com 指向您 joe 的 IP 地址,即在您名为 joe 的计算机上。通常您会在购买域名的位置设置此记录。更多信息请参阅片刻。)
一次/etc/主机名设置好了,那么下一步就是获取命令hostname --all-fqdn
和dnsdomainname
为了正常工作,按顺序如下:
2)编辑/etc/主机。
其中有一行该主机的完全合格域名,例如“machine.domain.net”,以其本机的 IP 地址(可能来自动态 IP 地址服务器)为前缀,如下所示:
# IP FQDN (CANONICAL_HOSTNAME) ALIASES
#-------------- --------------------------- ------------------------
192.168.1.14 Joe.xyz.com joe
首先,请注意大写或小写并不重要这里。 提示:然而,设置一些上限可以让我们注意到接下来的步骤中事情的来源。所以我已经大写了Joe。
另请注意对于简单的
hostname
(即 /etc/hostname = 'machine')以正确生成 FQDN,别名名为“machine”的文件必须存在于 /etc/hosts 中。这就是别名的原因乔有没有。 (顺便说一句,即使您不使用该别名,也可以使用它。)否则不需要或不使用该别名。另请注意,“domain.net”必须是可解析的,即 DNS 中必须存在其 A 记录。这就是所谓的‘可解析的'(即通过 DNS 解析器)。
3) 现在通过运行以下命令将 /etc/hostname 和 /etc/hosts 中的这些新设置安装到内核中:
$ /etc/init.d/hostname.sh # Or by rebooting
4) 测试主机名
$ hostname # Reports the hostname previously read from in /etc/hostname.
joe
或者
$ hostname
joe.xyz.com
尖端:
请注意,这不是 /etc/hostname 当前的内容(就像您现在再次编辑它一样),而是 /etc/init.d/hostname.sh 脚本之前读取的内容(可能是重新启动的结果)。
另请注意,“j”是小写的,因此这表明它来自 /etc/hostname,而不是 /etc/hosts。
5) 测试 FQDN
$ hostname --all-fqdn #reports the FQDN(s) matched in /etc/hosts.
Joe.xyz.com # It searches /etc/hosts for the joe in /etc/hostname.
# Notice that the 'J' is uppercase.
# This suggest it came from /etc/hosts.
6)测试DNS域名
$ dnsdomainname #reports the computed DNS doman name
xyz.com # (i.e. the right most part of the FQDN;
# the part to the right of the first, left most, dot)
# This is coming from Joe.xyz.com in /hosts,
# after 'Joe.' is removed.
现在这应该会让设置网络和电子邮件服务器变得更加容易。
答案3
我非常讨厌有人告诉我阅读手册,但在这种情况下,请务必查看主机名的手册页,大多数(如果不是全部)问题都应该得到解答。它写得比我能解释的要好得多。
为了提供一些帮助,针对您的问题的一些摘录如下: - 您的主机名是您在 /etc/hosts 中看到的内容。 - 返回的 FQDN 基于解析器返回的内容,因此您会看到 /etc/hosts 中的值被返回,因为解析器首先检查主机文件,然后执行任何必要的 DNS 查询。
我不相信主机名手册页中提到的一个问题(基于我自己重新阅读的手册页)是文件中的条目不以点结尾的原因。
该约定用于处理 DNS 记录。主机名和主机文件实际上不是 DNS 记录。如果您在 bind 中配置这些条目以解析 DNS 查找,那么可以使用点(查看这个很好的资源:http://www.zytrax.com/books/dns/apa/dot.html)。
另外,请记住,所有这些值都不会从系统中广播。因此,如果您希望另一个系统基于 FQDN 进行访问,则它基于该其他系统上的主机文件,或者缺少基于外部系统在 FQDN 上执行的 DNS 查找的主机条目,以允许其解析回系统。
答案4
在回答
如果我的 IP 是动态的 (DHCP) 并且不时发生变化怎么办?我应该在 /etc/hosts 中使用哪个地址作为我的名字?
首先,我要指出,/etc/hosts 是安装它的主机的名称到地址映射的静态定义,并且仅由该主机用于将名称转换为 IP 地址。
因此,有两个观点需要考虑 - 主持人“我的名字”和其他人。
对于该“myhost”主机,可以使用“localhost”引用当前主机(在 /etc/hosts 中定义为 127.0.0.1),或者将“myname”添加到定义 localhost 的 /etc/hosts 行,以便“myname” ' 总是映射到本地主机。就像这样:
127.0.0.1 本地主机 我的名字
然后,无论给接口提供什么 IP 地址,您都将始终拥有一个可用的地址(额外的好处是您不需要点击硬件即可从“myname”对话到“myname”)。
现在,当“myhost”具有动态 IP 地址时,要允许其他主机找到“myhost”,您必须使用 DNS,并且所述 DNS 服务器必须处理 DHCP 分配的映射。 (嗯,好吧,我还能想到其他解决方案,但恕我直言,我想到的所有解决方案都属于“愚蠢”类别。好吧,你可以对主机做一些事情,让 IT 告诉 DNS它在哪里,但这是一个值得在这里完全不同的问题/答案流的问题,恕我直言)