Openvpn

ping 失敗,MTU >= 298

  • January 29, 2021

就上下文而言,我最初的問題是expecting SSH2_MSG_KEX_ECDH_REPLY當我通過 VPN 連接到伺服器時,我與伺服器的 ssh 連接掛起(在這種情況下,是在 pfsense 中執行的 OpenVPN)。

網際網路表明這可能與 MTU 問題有關。

在嘗試調試時,發生了這種情況:

ping -s 297 -M do $HOST

工作正常,但是

ping -s 298 -M do $HOST

只是掛起。

在我的機器、主機和 pfsense 界面上,MTU 都設置為 1500(儘管該界面在 pfsense 的 UI 中被禁用,但我不確定它是否應該這樣)。

為什麼會這樣?阻塞數據包的東西是否太大?我什至可以在哪裡探勘更多線索?

mtr $HOST表示兩跳:到 pfsense,然後到伺服器本身

您在您控制的主機上設置了 MTU 這一事實沒有任何意義,因為它們之間的數據包(理論上)可能會通過任何具有任何 MTU 的媒體。

為了解決這個問題(除了IP分片機制),存在所謂的“路徑MTU發現”機制。

請注意,它依賴於 ICMP 協議才能正常工作。除此之外,這意味著如果你有嚴格的防火牆設置,你必須有類似的東西

iptables -t nat -A $CHAIN -m state --state RELATED -j ACCEPT

在您的INPUT鏈規則中(FORWARD如果您的防火牆也為其客戶端執行 SNAT,則在鏈中)。

“相關”狀態意味著當接收到類型 3、程式碼 4(目標不可達/需要分段)的 ICMP 數據包時,conntrack 子系統決定它與哪個連接相關,然後將其向下傳遞到 netfilter 堆棧。眾所周知,此類數據包的狀態是“相關的”,iptables因此如果您拒絕傳遞此類數據包——就像人們禁用所有東西然後打出最小的漏洞時經常發生的那樣——P-MTU 發現將無法正常工作。

另請注意,即使您“解除”對 P-MTU 的適當支持,它也可能在兩者之間的某個地方被破壞。

為了處理它,至少存在兩個旋鈕:

請注意,這些設置確實會影響性能,因此請作為最後的手段使用。


¹ 因為雖然不是 IP 交換的一部分,但它顯然與之相關。

引用自:https://serverfault.com/questions/881165