服务器拒绝转发连接:管理禁止

服务器拒绝转发连接:管理禁止

我有时使用 PuTTY 作为 SOCKS 代理,我注意到,有时当我尝试连接的网页(从网络浏览器)不存在,并且需要长时间超时时,shell 会话停止(在超时之前无法在终端中交互输入),并且所有其他网页请求也停滞

我最近注意到这似乎是与 DNS 相关:现在,似乎侧面指定的服务器sshd出现/etc/resolv.conf了一些问题,因此,几乎不可能通过 PuTTY SOCKS 代理浏览互联网,并且当尝试任何网页浏览失败时,PuTTY 终端几乎一直处于停滞状态。

PuTTY 日志中经常出现以下错误,此后停滞似乎会暂时停止:

2014-01-11 17:12:03 Forwarded connection refused by server: Administratively prohibited [open failed]

通常情况下,我在日志中看到的是这样的,这让我觉得我的支持 SOCKS 的浏览器甚至不知道 SOCKS 代理会将它连接到哪个 IP 地址:

2014-01-11 17:18:11 Opening forwarded connection to superuser.com:80

更改 ssh 守护程序周围的 DNS 服务器只是一个临时解决方案,它无法解决 OpenSSH / PuTTY 在这些情况下停滞的根本问题。(不通过 SOCKS 使用主机名似乎也是错误的。)

有没有什么办法可以永久缓解 ssh 停滞?

(至少,sshd 似乎应该在 DNS 超时和使用另一台服务器重试方面更积极。我在 /etc/resolv.conf 中指定了多个服务器,并且dig似乎在 1 秒后向下一个服务器重新发出请求,这似乎比 sshd 所做的更合适。)

答案1

根据官方邮件列表中的 OpenSSH 开发人员的说法,http://lists.mindrot.org/pipermail/openssh-unix-dev/2014-January/031974.html,这是因为 OpenSSH 使用标准 libc 解析器,它是同步和阻塞的,因此在解析过程中不会处理其他流量。

修复此问题需要修复ssh/channels.c#connect_to在 OpenSSH 中(错误 #1357确认它位于 Mozilla 使用的 SOCKS5 代码路径中),使用与默认解析器不同的解析器函数获取地址信息来自 libc。

相关内容