
我正在嘗試使用將一些憑證複製到我的伺服器上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
這些文件(crt
、key
和p12
)時都會發生這種情況。
使用 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
我還假設可以調整該值以獲得更好的性能。