Linux

在 Linux NAT 主機上,延遲的重複段會導致連接重置

  • June 24, 2015

https://www.cloudshark.org/captures/6f185eb12e97

  • 172.30.5.1 具有橋接網路的 Linux 虛擬機,在另一台伺服器上執行,虛擬機只有 RFC1918 地址
  • 144.76.103.194 Linux 主機,一個介面,連接到網際網路和 RFC1918 廣播域,充當虛擬機的 NAT 網關
  • 86.59.21.20 Linux HTTP 伺服器

TCP 流在埠 29909 上遇到來自 144.76.103.194 的 RST 在延遲的、已經重新傳輸的段從 86.59.21.20 到達之後。

  • 幀 #581 - 啟動序列 522729 的重傳
  • 幀 #615 - 序列 522729 已重新傳輸
  • 幀 #1727 - 原始序列 522729 到達,延遲約 600 毫秒
  • 幀 #1728 - NAT 主機將 RST 發送回 HTTP 伺服器

直接從 NAT 主機發起的連接工作正常。

這似乎與 Linux conntrack 程式碼對“長”延遲段不滿意有關,由於意外數據而中止連接。

該行為可以通過設置netfilter/nf_conntrack_tcp_be_liberal為 1 來緩解。

核心文件:https ://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt

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