我有一台 Linux 主機作為來源 NAT (SNAT)。它在 IP 192.168.2.1 的內部介面上接收來自內部網路的預設路由的所有封包。 SNAT 主機有多個出站IP 位址(例如3.3.3.3、3.3.3.4、3.3.3.5,...)。
我想配置 iptables(或 Linux 上的其他一些工具 - 它不一定是 iptables - 但我認為這是正確的工具),以便資料包到達內部私有 IP 的連接埠確定 IP請求發送出去,出站連接埠是固定的(例如80埠)。
例如,以下映射可能是典型的(所有這些都將在 192.168.2.1 上接收,但目標 IP 是映射中首先列出的 IP ... -> 指示 SNAT 設備):
- (源)192.168.xy:z(目標)10.10.10.10:8001 - >(源)3.3.3.3:r(目標)10.10.10.10:80
- (源)192.168.xy:z(目標)11.11.11.11:8002 - >(源)3.3.3.4:r(目標)11.11.11.11:80
- (源)192.168.xy:z(目標)12.12.12.12:8003 - >(源)3.3.3.5:r(目標)12.12.12.12:80
- (源)192.168.xy:z(目標)13.13.13.13:8004 - >(源)4.4.4.3:r(目標)13.13.13.13:80
(192.168.xy 可以是專用網路上的任何主機。連接埠 z 和 r 幾乎肯定是臨時端口,對於每個會話來說明顯不同,但 SNAT 顯然需要管理該狀態才能將回應返回到正確的請求者)
這是一個具體的例子:
封包可能源自專用網路上的介面(例如 192.168.2.5)。因此,來源 IP 將為「192.168.2.5」。目標 IP 可能是“10.10.10.10”,目標連接埠可能是“8001”。路由表告訴本地 IP 路由器將所有發送到「0.0.0.0/0」的封包傳送到 192.168.2.1,並且沒有更具體的路由表條目。因此,封包到達 192.168.2.1(SNAT),目標 IP 為 10.10.10.10,目標連接埠為 8001。 10.10:80(3.3.3.3 顯然必須在映射中定義,並且應基於原始目標連接埠8001)。
我認為如果不是需要更改目標端口,這對於 iptables 來說是相對微不足道的——但這個問題讓我陷入了困境。
我怎樣才能實現這個目標?