在 Enterprise Linux 6 上使用 iptables NAT 導致連接埠損壞

在 Enterprise Linux 6 上使用 iptables NAT 導致連接埠損壞

我正在嘗試使用以下配置在 CentOS 上設定強制 Web 入口網站重定向:

此配置適用於前幾個資料包,但隨後伺服器回應中的目標連接埠突然損壞。數據包追蹤如下所示:

客戶端:發出原始 Web 要求的主機。伺服器:請求的原始目的地 入口網站:強制門戶伺服器

此資料包追蹤是從可以看到客戶端和入口網站流量的位置取得的。以 c: 開頭的行來自客戶端,以 p: 開頭的行來自門戶端。

c: client:57877 -> server:80 [SYN]
p: client:1092 -> portal:80 [SYN]  NAT adjusted SYN
p: portal:80 -> client:1092 [SYN, ACK]
c: server:80 -> client:57877 [SYN, ACL] NAT reversed on the SYN/ACK
c: client:57877 -> server:80 [ACK]
c: client:57877 -> server:80 HTTP GET
p: client:1092 -> portal:80 [ACK]
p: client:1092 -> portal:80 HTTP GET
p: portal:80 -> client:1092 [ACK]
c: server:68 -> client:57877 [ACK]
          ^^ WTF?!?

此時連線已完成。客戶端不期望該連接埠上有資料包並發送 RST。每次嘗試此連接時,損壞的連接埠號碼都會增加 1(大概從現在起 12 次嘗試後它會工作一次)。所有重傳的回應上都有相同的損壞連接埠號碼。我不知道是什麼原因造成的。

這是一個錯誤,還是我做錯了什麼?這台機器的配置確實有點不尋常。它被配置為網橋。為了僅將 NAT 規則應用於單向傳輸的資料包,請先使用 ebtables NAT 規則標記資料包,並在套用 iptables NAT 時檢查該標記。

這是在具有核心 2.6.32-279.5.2.el6.x86_64 的 Enterprise Linux 6 上

NAT規則為:

target     prot opt in     out     source               destination         
DNAT       tcp  --  ilb    any     anywhere             anywhere            multiport dports http,https mark match 0x8 to:<portal IP>

ilb 是橋樑。

相關內容