我的企业最近为企业内的所有系统部署了 DNS 功能。由于我们的一些服务器偶然出现了异步路由错误,我们发现即使服务禁用了反向 DNS 查找(例如 Postfix 中的“disable_dns_lookups”和 SSH 中的“UseDNS no”),RHEL 5 似乎仍会对服务器自己的 /etc/resolv.conf 文件中配置的名称服务器执行某种查找。
我们期望的配置是允许名称服务器条目保留在 /etc/resolv.conf 文件中,但可以在各个服务中禁用 DNS 查找。
我知道这些条目导致了问题;当从 /etc/resolv/conf 文件中删除名称服务器条目时,系统会非常快速地(亚秒级)响应 SMTP 和 SSH。启用名称服务器后,肯定会有 10 秒的延迟。我希望通过禁用服务中的 DNS 查找来解决这个问题。
下面是我看到的行为的一个示例:使用没有名称服务器条目的 SSH:
- 通过 SSH 进入企业内的服务器。
- 通过 SSH 连接到 DNS 查询较慢的服务器。
- 提示时提供密码。
- 服务器立即通过 shell 提示做出响应。
使用带有名称服务器条目的 SSH:
- 通过 SSH 进入企业内的服务器。
- 通过 SSH 连接到 DNS 查询较慢的服务器。
- 提示时提供密码。
- 等待 10 秒,服务器无响应。
- 显示 Shell 提示符。
另一个使用 SMTP 的测试,当我使用 TELNET 访问 PostFix 下的服务器的 SMTP 接口时,在为“RCPT TO”字段指定有效值后,接口会暂停 10 秒钟,然后返回光标,以便协议可以继续,但是当相同的名称服务器条目被注释掉时,它会立即响应。
配置文件中是否存在其他可能受到影响的地方(例如网络或内核级别)?启用 IPV6 是否会导致此问题?
我知道这个问题问得很笼统,因为我无法提供太多有关我的环境的详细信息,而且 Linux 服务器本身有相当多的配置参数。如果有人遇到过类似的问题,任何帮助或指导都可以解决此问题,我将不胜感激。
答案1
我只能代表 Postfix 发言。
disable_dns_lookups=yes
将查找委托给getaddrinfo()
系统函数。而系统函数本身则使用 DNS 系统来检索信息:http://en.wikipedia.org/wiki/Getaddrinfo
/etc/resolv.conf
因此,如果您使用和配置了 Linux/UNIX 系统,Postfix 甚至会使用 DNS 名称服务器/etc/nsswitch.conf
。
没有 DNS 的邮件服务器是毫无用的,因为您将失去进行反向查找、RBL 查找、域验证和许多其他反垃圾邮件机制的能力。
解决方案是修复您的 DNS 设置,以便能够解析除本地主机之外的任何公共 Internet 域/IP。
答案2
有时安装了多播 DNS 侦听器,在 ubuntu 上删除 libnss-mdns 包。系统函数也会使用它,并可能因无法解析地址而造成延迟。