VPN 上的 SSHFS 在大塊上凍結

VPN 上的 SSHFS 在大塊上凍結

我透過 VPN 連線運行 SSHFS。當嘗試將 1270 位元組的區塊傳送到此遠端檔案系統上的檔案時:

head -c 1270 /dev/urandom > /path/into/the/sshfs/foo

整個檔案系統凍結並讓任何試圖存取它的進程掛起。這只能透過終止 sshfs 進程來解決。

如果我嘗試發送 1269 字節,則不會出現問題。

我對 sshfs 的命令列選項進行了很多嘗試,發現只有一個選項對此有影響:

-o max_write=1240

如果我在這裡傳遞一個小於 1270 的值,則錯誤開始發生的限制將降低到該值 + 1(不過,值 300 將其降低到 1183)。不幸的是,提高該值並沒有幫助,限制仍為 1270 位元組。

不知何故,這是一個有緩衝區的東西。如果我習慣連續寫入,一切正常:

(head -c 1269 /dev/urandom
 head -c 1269 /dev/urandom) > /path/into/the/sshfs/foo

這似乎也不是底層 ssh 的問題,因為

ssh remote_host "bash -c 'head -c 2000 /dev/zero | tr \\\0 0'" | wc -c

工作正常並按2000預期列印。

但是,X轉發似乎也不起作用,所以也許它下面是一個 ssh 問題。

我嘗試將 MTU 大小從 1412 更改為 1500:

ifconfig tun0 mtu 1500

但沒有任何效果。

這是一個已知問題嗎?我可以以某種方式修復/防止/規避這個問題嗎?

編輯:我正在使用 FritzBox(家庭路由器)VPN(顯然是“cisco”風格,但我不是這個主題的專家)和 Ubuntu 16.04 從外部存取它。

我還注意到,當我透過手機線和筆記型電腦進行測試時,沒有出現該問題。只有當我位於位於某些限制性防火牆後面的遠端站點時才會發生這種情況。但請注意,VPN 一般都可以工作,只有 sshfs 方面(和 X 轉送)似乎有問題。

答案1

您很可能會遇到 VPN 開銷所引起的 MTU 問題。像您一樣增加 MTU 不會解決問題,因為它使 MTU 大於媒體可用的最大資料包大小(我假設您沒有在僅限 LAN 的環境中使用巨型幀)。

事實上,解決方案可能是降低隧道設備的 mtu。

您尚未指定 VPN 或路由器。我們解決這個問題的方法是在作業系統層級使用 MTU 箝位。或者/此外,如果您使用 OpenVPN,您可以使用一些指令來分段資料包,例如使用 mssfix - 您可能需要查看https://www.sonassi.com/help/troubleshooting/setting- Correct-mtu-for-openvpn還有片段選項 -https://blog.hambier.lu/post/solving-openvpn-mtu-issues

相關內容