SCP 可重复地破坏 SSH 管道

SCP 可重复地破坏 SSH 管道

我正在尝试使用将一些证书复制到我的服务器上scp

$ scp ./cert.* [email protected]:/tmp/

cert.crt     100% 2386     0.1KB/s   00:18
packet_write_wait: Connection to 192.168.0.42 port 22: Broken pipe
lost connection

第一个文件被写入服务器,但不完整,因为哈希和与原始文件不匹配。

每次我尝试使用scp这些文件(crtkeyp12)时都会发生这种情况。

使用 Ubuntu 16.10 ( OpenSSH_7.3p1 Ubuntu-1, OpenSSL 1.0.2g 1 Mar 2016) 和 Windows 10 ( WinSCP 5.9.4) 进行测试。两者都无法复制文件。

可能值得一提的是,我已连接到 OpenVPN 服务器,以便到达目标服务器 (192.168.0.42) - 但这不应该是问题。

为什么管道会破裂以及如何成功将文件 scp 到服务器上?

编辑:正如评论中所建议的,这很可能与 MTU 有关 - 但是,我不太确定如何解决这个问题。

答案1

降低 OpenVPN 连接的 MTU 对我有用。

来自 OpenVPN 手册:

--mssfix max 向在隧道上运行的 TCP 会话宣告它们应该限制其发送数据包大小,以便 OpenVPN 封装它们后,OpenVPN 发送到其对等方的结果 UDP 数据包大小不会超过最大字节。默认值为 1450。

max参数的解释方式与--link-mtu参数相同,即添加封装开销后的UDP数据包大小,但不包括UDP标头本身。生成的数据包对于 IPv4 最多增加 28 字节,对于 IPv6 最多增加 48 字节(IP 标头最多增加 20/40 字节,UDP 标头最多增加 8 字节)。默认值 1450 允许 IPv4 数据包通过 MTU 1473 或更高的链路传输,而不会出现 IP 级别分段。

仅当您使用 UDP 协议进行 OpenVPN 对等通信(即 --proto udp)时,--mssfix 选项才有意义。

--mssfix 和 --fragment 可以理想地一起使用,其中 --mssfix 将首先尝试阻止 TCP 需要数据包分段,并且如果大数据包无论如何通过(来自 TCP 以外的协议), --fragment 将他们内部分裂。

--fragment 和 --mssfix 都旨在解决 OpenVPN 对等点之间的网络路径上的路径 MTU 发现中断的情况。

此类故障的常见症状是 OpenVPN 连接成功启动,但在活跃使用期间停止。

如果 --fragment 和 --mssfix 一起使用,--mssfix 将从 --fragment max 选项中获取默认 max 参数。

因此,可以使用以下选项将最大 UDP 数据包大小降低到 1300(这是解决 MTU 相关连接问题的良好第一次尝试):

--tun-mtu 1500 --fragment 1300 --mssfix

我将以下内容添加到 OpenVPN 配置中:

mssfix 1200

我还假设可以调整该值以获得更好的性能。

相关内容