环境

环境

环境

我的 LAN 设置非常基本:

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

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

我在我的开发 PC 上设置了一台 VirtualBox 机器并在其上安装了 Debian Squeeze (6.0.4)。 VirtualBox网络模式是Bridged Adapter在我的局域网上模拟一个独立的服务器。成为 VirtualBox 服务器而不是物理服务器并不重要,但我为了完整性而提及它。

问题

每次网络操作在执行之前都会对 LAN ip 进行 DNS 反向查找,服务器会有很长的延迟。网络操作缓慢的一些示例:

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

其中一些有解决方法,例如添加我的开发电脑的 Ip/etc/hosts或添加特定于命令的选项以避免进行 DNS 反向查找。显然,使用/etc/hosts只能到此为止,因为它与 DHCP 不一致。

然而,我不禁认为我错过了一些东西。我是吗真的需要在 LAN 上的某个地方设置 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,host 和 dig 的返回速度都非常快,但对于 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 服务器。

答案1

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

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

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

我想知道您的路由器是否将请求转发到 ISP 的名称服务器,但您的 ISP 的名称服务器正在丢弃该请求,因为他们不想让您知道他们的 IP 机器的名称192.168.1.50

建议:

  • 仔细检查路由器的设置。它应该回答您自己的请求专用网络。也许您可以在路由器的 Web 界面中添加静态主机条目?
  • 尝试安装阿瓦希在网络上的所有系统上。
  • 告诉您的路由器使用谷歌公共 DNS(8.8.8.88.8.4.4) 或开放DNS

答案2

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

例如,要禁用 SSHD 的反向 DNS 查找,请将以下内容添加到文件sshd_config(或根据发行版类似添加):

UseDNS no

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

host_lookup = *

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

export AS_NO_REVERSE_DNS=true

答案3

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

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

编辑:要测试解析器响应,请尝试使用time getent hosts 192.168.1.50.这应该返回来自您的/etc/hosts文件和 DNS 的查找。和host命令dig仅检查 DNS。如果此操作返回但需要几秒钟,您可能需要更改hosts/etc/nsswitch.conf文件移动到列表前面的条目的顺序。

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

EDIT2:如果您的计算机中没有一台始终处于运行状态,您可能需要考虑安装 samba 并wins在 nsswitch 配置中使用。它应该很快,所以如果你把它放在dns主机条目前面,它可能会起作用。

您还可以考虑安装avahi能够在本地链路网络上启用自动发现的实用程序。我让它在 IPv6 端工作,但它没有发布 IPv4 地址。主机的默认域是“.local”。这可能不适合您的情况,但可以被覆盖。查找速度似乎也比wins在nsswitch 配置中mdns提前进行dns可能不合适。

答案4

从动态 IP 更改为静态 IP 后遇到同样的问题。我的网络现在配置为:静态 - 无 IPv6 并且不打算使用邮件服务器。

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

1:运行 dpkg-reconfigure exim4-config

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

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

现在重新启动应该很快(至少对我来说是这样)。

相关内容