debugging片状SSH隧道

我们有一个专用的SSH隧道服务器,它支持几十个远程主机。 每个主机使用autossh来保持连接持久化,从而创build一个反向隧道,并分配端口号。 这使我们可以通过服务器访问远程主机。 这一切都很好,直到最近…

康卡斯特要求我们从一个连接移动到另一个连接。 旧的和新的调制解调器是相同的型号,但在不同的电缆上,当然新的连接有一个新的IP地址。 我们也借此机会更换了服务器硬件,但新的服务器机箱运行的是与旧版本相同的操作系统(Ubuntu 10.04 LTS)和OpenSSH(5.3p1)。 生成一个新的主机密钥并分发给远程主机。

由于这种变化,所有的隧道连接变得脆弱,通常最多只停留10或15分钟。 Autossh检测并重新连接,但是这使交互式会话相当令人沮丧的使用。 我无法弄清楚问题所在。

看看服务器上的日志,我看到:“收到断开xxxx:11:断开用户”,然后隧道重新build立。 即使在日志级别DEBUG3,我也没有看到任何事情发生在服务器端的断开连接之前,只是预期的keepalive消息。

连接正在死亡,无论是否在使用,它们在使用和数据飞行时都会死亡(就像在一个大的sftp中)。 这些连接并不都是同时死亡 – 它似乎是随机分布的。

在服务器端,我们有ClientAliveInterval = 30,ClientAliveCountMax = 6和TCPKeepAlive = yes。

远程站点正在运行OpenSSH 5.6p1。

我在智慧结束…任何想法,我应该在哪里看?

这里一个有用的工具(用于debuggingnetworking连接)是mtr,它是traceroute和ping的组合。 假设你在你的工作站上,你会做“mtr {remote-server-ip}”。 输出是matrix(行和列),并会显示机器和远程服务器之间每跳的延迟和数据包丢失。 我在另一个星期用这个certificate给ISP,他们在我们的T1上丢掉了大约40%的数据包(这导致无法build立VPN连接)。