反向DNS查找会减慢LAN上的网络运行速度


9

环境

我的局域网设置非常基本:

  • 连接到ISP的调制解调器和Internet的路由器
  • 我的开发电脑直接连接到路由器

路由器提供DHCP,但不运行自己的DNS服务器。实际上,在我的LAN上任何地方都没有托管DNS服务器(典型的家庭网络设置)。路由器配置为发送ISP的DNS服务器作为DHCP租约信息的一部分。

我在开发PC上安装了VirtualBox机器,并在其上安装了Debian Squeeze(6.0.4)。VirtualBox网络模式是Bridged Adapter在LAN上模拟独立服务器。作为VirtualBox服务器而不是物理服务器并不是很重要,但是出于完整性考虑,我将其提及。

问题

每当网络操作在执行之前执行LAN ip的DNS反向查询时,服务器就会有很长的延迟。网络运行缓慢的一些示例:

  • 从我的开发PC到服务器的SSH连接
  • 连接到Glassfish服务器的管理端口
  • netstat -lnetstat -nl非常快)
  • Starting MTA: exim4 开机需要很长时间才能完成

其中一些具有变通办法,例如将开发人员的IP /etc/hosts添加到Ip 或添加特定于命令的选项,以避免进行DNS反向查找。显然,/etc/hosts仅使用DHCP之所以走得很远,是因为它与DHCP不一致。

但是,我不禁以为我错过了一些东西。我真的需要在局域网中的某个地方设置DNS服务器吗?对于我的需求而言,这似乎是一项巨大而无用的努力,而且我不敢相信像我这样的DHCP环境中没有其他选择。

我在网上搜索了很多东西,也许我没有正确的搜索词,但是我找不到解决方案...

在BillThor的回答后更新1

使用主机(dig给出相同的结果):

# ip of stackoverflow.com
$ time host -v 64.34.119.12
Trying "12.119.34.64.in-addr.arpa"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15537
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;12.119.34.64.in-addr.arpa.     IN      PTR

;; ANSWER SECTION:
12.119.34.64.in-addr.arpa. 143  IN      PTR     stackoverflow.com.

Received 74 bytes from 192.168.1.1#53 in 15 ms

real    0m0.020s
user    0m0.008s
sys     0m0.000s

# ip of dev pc
$ time host -v 192.168.1.50
Trying "50.1.168.192.in-addr.arpa"
;; connection timed out; no servers could be reached

real    0m10.004s
user    0m0.004s
sys     0m0.000s

我的/etc/resolv.conf(在安装过程中自动创建)

nameserver 192.168.1.1

对于公共IP,主机和挖掘都非常快速地返回,但是对于LAN IP,超时则需要10秒。我想10s是我当前的超时值。

更新2

随着dev-pc在/ etc / hosts文件:

$ time getent hosts 192.168.1.50
192.168.1.50    dev-pc

real    0m0.001s
user    0m0.000s
sys     0m0.000s

如果没有dev-pc在/ etc / hosts文件:

$ time getent hosts 192.168.1.50

real    0m10.012s
user    0m0.004s
sys     0m0.000s

看起来越来越像我必须为每个试图进行反向DNS查找的分段程序选择选项或参数!没有一台计算机(无论是否虚拟)都不能充当我的LAN上的DNS服务器,因为它们并不总是处于运行状态。不幸的是,路由器的固件不包括DNS服务器。

Answers:


3

192.168.1.1是您路由器的IP地址吗?

nameserver 192.168.1.1 建议您的路由器将自己宣传为DNS服务器,而不是“发送ISP的DNS服务器”。

您有什么品牌和型号的路由器?Web界面是否显示日志消息?

我想知道您的路由器是否将请求转发到ISP的名称服务器,但是您的ISP的名称服务器正在丢弃该请求,因为它们不希望您知道其IP机器192.168.1.50被称为什么。

意见建议:

  • 仔细检查路由器的设置。它应该回答您自己的专用网络的请求。也许您可以在路由器的Web界面中添加静态主机条目?
  • 尝试在网络上的所有系统上安装Avahi
  • 告诉路由器使用Google Public DNS8.8.8.88.8.4.4)或OpenDNS

我的路由器是“ NETGEAR路由器WNR3500L” @ 192.168.1.1。日志仅显示DHCP租约,并登录到管理界面。没错,在处理DHCP租约时,路由器将192.168.1.1作为dns服务器发送出去(已通过Wireshark确认)。在路由器的管理界面上,我对DNS地址使用“从ISP自动获取”。另一个选项是通过IP直接指定DNS服务器。我想这意味着DNS请求实际上是由路由器转发的。
伯尼

是的,我猜它正在转发DNS请求。如果将其更改为使用Google Public DNS(8.8.8.88.8.4.4)怎么办?
Mikel 2012年

哇,这实际上有很大的不同!当给定私有IP地址时,这些DNS服务器(Google和OpenDNS)显然会快速失败。我将再运行一些测试,但是我认为这可以解决我的问题!
伯尼2012年

将此标记为已接受答案。这三个答案很有帮助,但是更改dns服务器可以“总体上”解决该问题。
伯尼

4

失败的DNS查找应该很快失败。但是,我通常运行dnsmasq,它将读取hosts文件并将这些条目用于正向和反向查找。它还充当DNS缓存服务器,以减少上游DNS服务器上的负载。

您可能需要使用hostor dig命令来查看哪些查询速度很慢。如果将您重定向到未运行DNS服务器,则DNS将花费相当长的时间才能失败。您可以调整超时并重试,/etc/resolv.conf以加快失败速度。

编辑:要测试解析器响应,请尝试使用time getent hosts 192.168.1.50。这应该从您的/etc/hosts文件以及DNS 返回查询。该hostdig命令只检查DNS。如果返回但要花几秒钟,则可能需要将移动文件中hosts条目的顺序更改/etc/nsswitch.conf为列表的开头。

如果您有任何仅依靠DNS进行名称查找的程序,则将dnsmasq其设置并用作您的主要DNS名称服务器即可/etc/resolve.conf解决该问题。Exim应该使用解析器进行基本查找。您将需要一个/etc/hosts文件,除非可以在路由器上禁用DHCP服务器,否则可以dnsmasq用于DHCP。 dnsmasq如果处理的DHCP请求中提供了名称,它将自动注册名称。

EDIT2:如果您的计算机都不总是处于开机状态,则您可能需要考虑安装samba并wins在nsswitch配置中使用它。它应该很快,所以如果您将它放在dns主机条目的前面,它可能会起作用。

您还可以查看安装avahi实用程序,该实用程序将在链接本地网络上启用自动发现。我让它在IPv6端工作,但是它没有发布IPv4地址。主机的默认域为“ .local”。这可能不适用于您的情况,但可以被覆盖。它似乎也慢做查找比wins因此将mdns提前dns在nsswitch的配置可能不适合。


我认为他说所有(唯一的)LAN查找速度都很慢,并且他正在尝试完全避免主机文件。
ckhan 2012年

由于这只是一台测试服务器(也是虚拟服务器!),所以我不能将其作为整个局域网的DHCP服务器。即使我的开发电脑(因此测试服务器)未运行,也有其他偶尔的无线客户端也需要IP。
伯尼2012年

再次更新了我的帖子。感谢您一直以来的帮助。
伯尼2012年

3

如果您不想进行为家庭网络设置本地DNS(可能还有DHCP)服务器的练习,则可以告诉服务尽可能不执行反向DNS查找。

例如,要为SSHD禁用反向dns查找,请将以下内容添加到sshd_config文件中(或类似的内容,取决于发行版):

UseDNS no

您可以从Exim配置中删除此行,尽管我不清楚这是否会影响启动速度,但可以防止在连接客户端时反向DNS查找:

host_lookup = *

看来您可以为启动Glassfish进程的用户导出此环境变量:

export AS_NO_REVERSE_DNS=true


我希望可以使用我拥有的实际设备来设置DNS服务器,但是除非我在路由器上加载备用固件,否则这实际上是不可行的。感谢您的配置选项;我还没有找到关于AS_NO_REVERSE_DNSGlassfish选项的信息,所以我来看一下。
伯尼

1

从动态IP更改为静态IP后出现相同的问题。现在配置了“我的网络”:静态-没有IPv6,并且不打算使用邮件服务器。

我通过执行以下操作解决了该问题:

1:运行dpkg-reconfigure exim4-config

2:当您遇到DNS查找问题->将DNS查找设置为最小(拨号)

它给我一个错误,就是这种查找无法正常工作,并且建议编辑/ etc / hosts-但是我对/ etc / hosts所做的唯一一件事是注释掉了ip6-allnodes和ip6-allrouters行。

重新启动现在应该很快(至少对我而言)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.