無法從某一特定係統傳輸資料(MTU 問題?)

無法從某一特定係統傳輸資料(MTU 問題?)

概括

預設 MTU 值會阻止一個系統的資料傳輸。手動減少它可以再次實現資料傳輸,但在相鄰系統上不需要這種手動調整。

背景

我有一個備份伺服器。我在偏遠地區有兩套 Raspberry Pi 系統:一套在英國,一套在阿爾巴尼亞。與 Albanian Pi 一起的是 QNAP(源自 Linux 的檔案伺服器)。我有一個從阿爾巴尼亞到備份伺服器網路的 IPSec VPN,以及另一個從英國到備份伺服器網路的 IPSec VPN。一切都在使用 IPv4。此圖可能有幫助:

                                           |--Albania Pi
                    |<--IPSec-->|--Router--|--Albania QNAP
Central  |          |                      |--Other systems
Backups--|--Router--|
Server   |          |                      |
                    |<--IPSec-->|--Router--|--UK Pi
                                           |--Other systems

Pi 系統和備份伺服器都有 nftables,沒有任何規則,預設策略為 ACCEPT。

如預期的那樣,兩個 RPi 系統、QNAP 和備份伺服器的預設有線乙太網路 MTU 均為 1500。

阿爾巴尼亞的路由器 WAN 側 MTU 為 1442,英國的路由器 WAN 側 MTU 為 1500。對於管理包含備份伺服器的網路的防火牆來說,它是 1500,這也是正確的。

問題

  • 如果我將一塊資料從英國的 Pi 傳輸到備份伺服器,效果很好
  • 如果我將一塊資料從阿爾巴尼亞的 QNAP 傳輸到備份伺服器,效果很好
  • 如果我嘗試將資料塊從阿爾巴尼亞的 Pi 傳輸到備份伺服器,則會失敗
  • 如果我將 Pi 的 MTU 減少到 1374,傳輸就會成功

更多資訊

這是一個正在運行/失敗的例子

# On the Albanian Pi
dd bs=1M count=100 if=/dev/urandom >100M.dat

# On the Backups Server
ssh albanian_pi cat 100M.dat | pv >100M.dat

# MTU adjustments on Albanian Pi
ifconfig eth0 mtu 1500    # Default before I started fiddling
ifconfig eth0 mtu 1374    # Highest value that permits data flow

轉移曾經有效,但那是在從 Stretch 升級到 Buster 之前。我沒有看到我擁有的大多數其他 Pi 系統有問題,特別是我在開頭提到的現在也運行 Buster 的英國 Pi 系統。

阿爾巴尼亞辦事處沒有人抱怨網路問題。

我無意中為阿爾巴尼亞 Pi 和備份伺服器之間的資料包設定了「不分段」位元。我沒有故意讓任何東西阻礙 PMTU Discovery。

總結一下:

  • 阿爾巴尼亞 QNAP -> 備份伺服器:一切都很好
  • 阿爾巴尼亞 Pi -> 備份伺服器:在未減少 MTU 的情況下失敗
  • UK Pi -> 備份伺服器:一切都好

我有一個解決方法,但我不必減少單一系統上的 MTU。

問題

究竟出了什麼問題,又該如何進一步診斷並解決問題的原因?

非常感謝建議。謝謝

答案1

看起來像路徑 MTU 發現“Albania Pi”和“中央備援伺服器”系統之間發生故障。這通常是由於在路由器、防火牆或iptables相關係統的設定中錯誤地封鎖 ICMP 封包而導致的。

就您而言,由於“Albania QNAP”系統似乎工作正常,因此主要嫌疑人是“Albania Pi”系統。檢查該系統的配置,特別是任何iptables設定以及 ICMP 和 PMTUD 相關的網路設定。

相關內容