Linux

Linux 上的 Racoon - 初始封包遺失

  • February 29, 2012

我已經配置了兩個 Linux 機器,以便它們在需要通信時自動使用傳輸級 IPSec 連接。該配置基於具有 X509 身份驗證和bundle_complex選項設置為的 Racoon on,以及需要在兩個框之間同時使用 ESP 和 AH 的策略。

雖然配置有效,但一般來說,前幾個數據包總是失去,例如:

$ ping -c 3 A.B.C.D
PING A.B.C.D (A.B.C.D) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
64 bytes from A.B.C.D: icmp_req=3 ttl=64 time=0.497 ms

有什麼方法可以防止這種情況發生,例如通過“延遲”數據包直到 IPSec 傳輸被協商?

第一個數據包(以及在協商完成之前的所有其他數據包)總是被丟棄。

我處理過的每個 ISAKMP 實現都是如此。我不相信它一定有任何理由不能緩衝被丟棄的數據包。相反,它不應該

這是整個網際網路路由基礎設施中使用的有意識設計決策的延伸:不要持有數據包

當網際網路上的路由系統不能(幾乎)立即路由它時,它們總是會丟棄一個數據包而不是延遲它。通過簡單地保持數據包緩衝直到有空間,可以很容易地將整個網際網路上的封包遺失降低到低得多的水平。但是,問題就在這裡;在先進先出隊列上執行 200 毫秒的過載路由器會將每個數據包延遲 200 毫秒。

回到 ISAKMP 的情況;保持幾個 ping 直到路徑準備好承載它們是很好的,但如果它是數十萬個 UDP 數據包的恆定流怎麼辦?如果遠端系統無法訪問,那麼 ISAKMP 會坐在那裡等待 ISAKMP 協商消息 2 60 秒怎麼辦?

雖然這些不是不可克服的工程問題,但網際網路工程社區的傳統觀點是,讓客戶端系統自己處理丟包問題要簡單得多,主要是通過使用 TCP 等容錯協議。

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