我的问题是关于我的 Gentoo Linux 系统上 hostname -f 的奇怪行为。
症状:
rt01 ~ # time hostname -f
rt01.domain.net
real 0m5.007s
user 0m0.001s
sys 0m0.000s
使用 strace 我可以看到执行了以下步骤:
- 读取 /etc/host.conf(可能)以确定主机查找的顺序
- 读取 /etc/hosts(我认为这应该足够了,但事实并非如此......)
- 连接到 /etc/resolv.conf 中指定的 DNS 服务器
- 再次读取 /etc/hosts
该机器上的 iptables 设置阻止它连接到任何 DNS 服务器。因此,根据设计,此时它被阻止了。我的预期是,如果配置如下,则无需执行此步骤:
/etc/主机.conf
# This keyword specifies how host lookups are to be performed. It
# should be followed by one or more lookup methods, separated by
# commas. Valid methods are bind, hosts, and nis.
#
order hosts, bind
/etc/hosts
# IPv4 and IPv6 localhost aliases
127.0.0.1 rt01.domain.net rt01 localhost
<public ip> rt01.domain.net rt01
::1 localhost
/etc/conf.d/主机名
# Set to the hostname of this machine
hostname="rt01"
有人能向我解释一下为什么 hostname -f 尝试连接到 DNS 服务器吗?我认为 /etc/hosts 提供的信息应该足够了。
答案1
DNS 查询的解析顺序基于 的内容/etc/nsswitch.conf
。具体来说,hosts
例如,此行将导致您的机器在检查本地文件之前查询服务器:
hosts: dns files
手册页:http://man7.org/linux/man-pages/man5/nsswitch.conf.5.html