下载种子时没有网络 - 似乎与 DNS 有关

下载种子时没有网络 - 似乎与 DNS 有关

我在下载种子时遇到了一个非常奇怪的网络连接问题。在您得出结论说我应该“减少半开和用户连接的数量”之前,请允许我说我已经这样做了。(10 个半开连接,20 个用户,它仍然不起作用,我再也无法下载任何内容)。

我还应该说 QoS 不是必需的。通常根据我下载种子文件的经验(在 Linux/Windows 和 Mac 中),互联网连接由所有进程共享。在这里,种子文件似乎占用了所有可用带宽。(内核不应该在请求发送/接收包的进程之间分配时间吗?)

最后,我应该说,这个问题是在我更新到 slack 64bit v14(从 v13.37)后开始出现的。

因此,实际问题似乎与我开始使用 ktorrent 或 rtorrent 下载时 DNS 服务器没有响应有关。并且不再加载任何网页。torrent 将以合理的速度下载,但不会加载任何网站。因此“nslookup”和“dig”会告诉我未找到 DNS 服务器(顺便说一下,它位于同一台 PC 上):

nslookup facebook.com
;; connection timed out; no servers could be reached

nass@stargaze:~$ dig !$
dig facebook.com
; <<>> DiG 9.9.1-P3 <<>> facebook.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 26154
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;facebook.com.                  IN      A

;; Query time: 1125 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Aug  2 01:14:46 2013
;; MSG SIZE  rcvd: 41

在 torrent 运行时重新启动 dns 服务器 (bind) 通常不会解决问题,尽管有时我见过这种情况发生。停止 dns、删除生成的任何 *.jnl 文件并重新启动似乎有效,但同样,它可能并非总是有效。(对于这种情况,我没有重复的模式)。我不能说我找到了恢复互联网的“方法”。

  • 通常关闭 ktorrent 并等待几秒钟就可以自行修复互联网问题。
  • 其他时候,关闭 ktorrent 客户端并重新启动 dns 服务器会比以前的情况更快。
  • 有时重复重启并不能使 DNS 恢复工作(但等待几分钟就可以解决这个问题)
  • 最近我开始停止命名,删除 *.jnl 文件并重新启动它。这在我的(仅 2 次)试验中取得了 100% 的成功。

防火墙日志、/var/log/messages/ 和 named 的日志没有记录任何奇怪的内容。

我没有使用过 tcpdump、wireshark、netstat,所以我不知道是否可以使用这些工具来识别...某些东西!有人能帮忙吗?

由于此问题似乎主要与 DNS 服务器有关,因此我附加了我的 DNS 文件并稍微解释一下我的电脑的配置:

因此 ADSL 互联网接入调制解调器(由 ISP 提供,始终开启,即使我没有互联网时也是如此)。调制解调器通过 eth1 连接到这台电脑,我在那里下载种子。这台电脑是我的家庭网络和文件服务器(当我不在家时,它也是我的桌面 - 我使用 nx 连接)。它正在运行 iptables、dns 和 squid 服务器(以及其他服务器)。然后从这台电脑的 eth0 为 wifi 和内联网交换机供电。squid 在透明配置上运行,但它不应该干扰 torrent 流量,因为这是在不同的端口(而不是端口 80)上完成的。

因此,最初,我附加了我的 named.conf,以尝试获取有关它的反馈(也许是一些逻辑上错误的配置,未被 webmin 命名配置文件检查器捕获 - 我已多次验证 named.conf 文件在语法上是否正确)

named.conf 是这里

如果这样没问题的话,我是否可以在您的指导下开始使用 tcpdump(和任何其他工具)来收集可能导致这种情况的信息?

非常感谢您的帮助:)

编辑:我的 /etc/resolv.conf 看起来像:

domain skails.home
nameserver 127.0.0.1

答案1

(内核不应该在请求发送/接收包的进程之间分配时间吗?)

典型的情况是,当网络速度很慢或没有网络时,Bittorrent 之类的程序会占用你的网络空间传入您的上游流量(在大多数住宅连接中,通常低于下游流量)被挤占。因此传入的 TCP ACK 无法及时收到,并且他们的一端连接超时,最终您的一端也超时。

我从研究 QoS 中学到的一件事是,传入流量没有 QoS 这样的东西,因为您无法控制发送给您的内容。您实际上只能 QoS/划分/共享传出流量。您可以查看当前的 Linux QoS 配置tc- 但请注意,tc它非常复杂。

单个连接可能会耗尽您的传入带宽并挤占传入的 TCP ACK,从而导致速度变慢、丢失等。并发连接的数量实际上并不重要。

您可能需要将 Bittorrent 程序上传的总带宽设置为略低于最大上行带宽,例如低于您知道的上行速度 8Kbit/秒。您可能还需要查看奇迹塑造者如果您想深入了解 Linux 上的 QoS。

答案2

你的线索是这一行:

;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 26154

假设resolv.conf仅包含127.0.0.1,这告诉您缓存服务器已确定无法访问上游名称服务器或配置错误。此时,服务器将放弃与该域名通信时。这意味着该服务器被添加到了不合格域名服务器列表中。这与负面缓存,仅适用于NXDOMAIN回应。

理所当然的是,一旦facebook.com确定域名已失效,缓存域名服务器将不会再尝试解析它。现在您必须弄清楚为什么会发生这种情况。

假设您遇到了网络拥塞,并且facebook.com不在缓存中。

  • named将尝试循环遍历转发器列表,直到找到一个名称服务器,该名称服务器将响应除REFUSED该记录之外的任何内容。NXDOMAIN以及SERVFAIL它将接受的响应。即使其他服务器会以不同的方式回答,您的服务器所关心的只是记录是否在缓存中,第一个有效的得到的响应。
  • 一旦找到答案,就会被缓存。无论好坏。
  • 如果未能从任何一个人那里得到答复,SERVFAIL也将被视为失败。

对于您的特定测试,查询和响应会很小。UDP 没有与 TCP 相关的会话开销。要获得响应SERVFAIL...

  • 您收到的第一个有效回复是SERVFAIL针对该域名的。
  • 所有转发器均无法联系。您无法从所有转发器获得响应。

唯一能确定发生了什么的方法是开始数据包捕获,然后重启名称服务器并分析数据包。您的某个转发器可能出现故障并SERVFAIL频繁返回,或者您的拥塞非常严重,以至于针对整个转发器列表的八个小型 DNS 查找都失败了。

相关内容