我实际上遇到了一个有点奇怪的问题。我运行的是 Ubuntu Server 12.04,包含一组最少的软件包:基本系统、sshd 和 IRC 服务器。我必须允许其他人配置服务器以连接到他们的 IRC 网络。但是,他们似乎在两行 ls 或 cat 之后就掉线了。
更奇怪的是,这种情况只发生在这台服务器上,我无法使用 PuTTY 或 ssh 客户端重现这种情况。我应该在哪里诊断这个问题?auth.log
显示正常连接和身份验证,但没有提供有关丢弃的任何详细信息。fail2ban 与原始 IP 地址没有任何冲突。
这是一台具有转发端口的虚拟机(它是桥接模式,具有正常的网络连接)。我可以使用 PuTTY 在本地、通过 LAN 以及从远程位置进行连接,没有任何问题。另一个人可以使用ssh
Linux 进行连接,但会遇到连接中断的情况。
服务器端日志没有显示任何异常。
答案1
在开始之前,请确保两端的系统时间同步。这有助于稍后进行比较。
在两端运行tcpdump
,过滤 TCP 端口 22。您提到客户端使用的是 PuTTY,因此我假设是 Windows。您可以获取适用于 Windows 的 wireshark,它具有捕获功能,您可以用它来代替tcpdump
。
使用tcpdump
,您可以这样做:tcpdump -w/tmp/ssh.pcap -s0 -ieth0 port 22
。使用 Windows 上的 wireshark,您可以使用 GUI 设置针对端口 22 进行捕获过滤,然后将捕获保存到磁盘。
现在用 wireshark 打开两个捕获。找到断开点。您应该能够看到哪一端发起了连接关闭(FIN 或 RST 连接首先从哪里到达?)
您还可以检查是否有第三方主机(例如路由器或 ISP)干扰了连接。例如,如果您发现有数据包到达但从未从另一端发送,则可以识别出这一点。如果发生这种情况,则很可能是 RST 数据包。
答案2
我遇到了奇怪的 ssh 超时,并使用以下方法解决了它:
sudo sysctl -w net.ipv4.tcp_keepalive_time=50 \
net.ipv4.tcp_keepalive_intvl=10 \
net.ipv4.tcp_keepalive_probes=5
不确定这是否有帮助,但也许值得尝试一下。
答案3
如果没有更好的问题描述就很难说(“丢弃”是什么意思?TCP 拆除?TCP RST?停滞的连接?),但对您的描述的一个可能的解释是路径 MTU 发现可能存在问题......
答案4
我在从 LTS14.04(之前从 12.04 升级)连接到旧的 12.04 服务器时遇到了同样的问题
我发现问题与 MTU 有关,因为运行
sudo ip li set mtu 1480 dev eth0
问题消失了……当你将其设置回 1500 时,问题又会再次出现
(假设您使用有线 eth0 连接)