我正在尝试使用 Slicehost 更改共享服务器上的主机名,以便我可以将 Postfix 设置为空客户端。
我编辑了 /etc/hosts
,重启后主机名仍然不正确。
我做错了什么?
username@mail Fri Jul 01 13:01:32 ~
$ sudo cat /etc/hostname
mail.domain1.com
username@mail Fri Jul 01 13:01:45 ~
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
208.78.100.198 mail.domain1.com
username@mail Fri Jul 01 13:02:13 ~
$ hostname -f
pop.where.secureserver.net
我还打算向该服务器添加另一个域,如何正确配置。
答案1
尝试将 hosts 中的第二行设置为208.78.100.198 mail.domain1.com mail
。另外,无需重新启动:FQDN 不存储在任何地方,而是即时查找。
我认为,通过对服务器的 IP 地址进行 DNS 查询,然后获取第一个响应,可以找到 FQDN,这就是这种方法有效的原因。应该可以仅使用 DNS(或 NIS、LDAP 或其他任何查找主机的方法nsswitch.conf
)来设置 FQDN,而无需修改主机,但如果它在 hosts 文件中,则不需要网络流量,因为网络流量可能会超时或在紧急情况下导致问题。
更多信息 以下是发生的所有事情(这仅限于 Linux,其他操作系统可能会做些不同的事情):
hostname
使用gethostname(2)
中指定的函数unistd.h
获取主机名。此函数通过调用 实现uname(2)
,其中nodename
提取并返回结构的字段。这将在引导过程的早期通过相应的sethostname(2)
调用进行设置,因为内核没有其他方式知道主机的名称。在您的情况下,它将是mail
。(顺便说一句,这是您应该在 中拥有的/etc/hostname
)。
然后使用标准系统解析器来解析,根据系统实用程序的版本,解析器可以是 或getaddrinfo(3)
。返回定义为“主机的正式名称”的gethostbyname(3)
字段。我相信这对应于 hosts 文件中列出的第一个名称。h_name
至于您的多个域问题,hostname
无法正确处理多个名称。每个接口(甚至是虚拟接口)都可以拥有自己的 IP,有时甚至多个物理接口也可以共享一个 IP。
您应该确保连接到您的主机的每个 IP 都通过反向 IP 查找解析为适当的名称,并正确配置您的邮件服务器。