我试图用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
我也打算添加另一个域到这个服务器,我如何正确configuration这个。
尝试将主机的第二行设置为208.78.100.198 mail.domain1.com mail 。 而且,重新启动并不是必要的:FQDN不会被存储在任何地方,它可以在飞行中查找。
我相信FQDN是通过对服务器的IP地址进行DNS查询find的,然后采取第一个响应,这就是为什么这个工作。 应该可以通过仅使用DNS(或NIS,LDAP或nsswitch.conf查找主机的其他任何地方)来设置FQDN,但是如果它位于主机文件中,则不需要可能超时的networking通信或否则在紧急情况下会造成问题。
更多信息下面是发生的一切(这是仅限于Linux,其他操作系统可能会做些不同的事情):
hostname使用unistd.h指定的gethostname(2)函数来获取主机名。 这个函数实现为对uname(2)的调用,其中结构的nodename字段被提取并返回。 这将在启动过程中在相应的sethostname(2)调用之前设置,因为内核没有其他方式知道主机的名称。 在你的情况下,这将是mail 。 (顺便说一句,这是你应该在/etc/hostname )。
然后使用标准的系统parsing器来parsing,parsing器可以是getaddrinfo(3)或gethostbyname(3)具体取决于系统utils的年份。 被定义为“主机的正式名称”的字段h_name被返回。 我相信这对应于主机文件中列出的名字。
至于你的多域问题, hostname不能正确处理多个名称。 每个接口(甚至是虚拟接口)都可以拥有自己的IP,有时甚至多个物理接口可以共享一个IP。
您应该确保连接到主机的每个IP通过反向IP查找parsing为适当的名称并正确configuration邮件服务器。