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

我還假設可以調整該值以獲得更好的性能。

相關內容