更改傳入資料包來源 IP

更改傳入資料包來源 IP

如何在傳入資料包到達正在運行的服務之前更改其來源 IP

我有兩台設備,一台管理器和一台伺服器,透過 VPN 連接,而且它們之間有 NAT。

管理器介面 IP:A 伺服器介面 IP:B

管理器使用 NAT IP Y 連接到伺服器,並且當管理器連接時伺服器會看到 IP X

當封包到達來源 IP X 時,如何在伺服器上設定 iptables,將其變更為 IP。

我知道在設計良好的網路和產品中這應該不是問題,但我們暫時需要一個解決方法,直到它在軟體方面得到修復。

到目前為止,以下 iptables 規則沒有幫助:

iptables -t nat -A POSTROUTING -s <X> -o eth0 -j SNAT --to <A>

任何幫助表示讚賞。

答案1

NAT 取決於「請求」的服務iptables並由提供連線子系統。 SNAT 在做出路由決策之前不可用,但在選擇將資料包路由到主機後仍然可用:在很少使用的情況下自然/輸入鏈,如記錄在手冊頁

SNAT

這個target只在nat表中有效,在POSTROUTINGINPUT鏈,以及僅從這些鏈中呼叫的使用者定義鏈。 [...]

因此,只要伺服器正在接收流量(不進一步路由),當透過介面在伺服器的 IP 目標位址 <B> 上接收來自 IP 來源位址 <X> 的封包時乙太網路0,可以對其進行 SNAT 處理,使其顯示為來源位址 <A>(這是原始 IP 來源位址,但此資訊遺失),如下所示:

iptables -t nat -A INPUT -s <X> -d <B> -i eth0 -j SNAT --to <A>

或使用更簡單的版本:

iptables -t nat -A INPUT -s <X> -j SNAT --to <A>

您可以新增更多限制,例如-p tcp --dport XXXX(XXXX 表示實際達到的服務),您可能應該這樣做:如果您遇到下面描述的問題,您可能會阻止自己透過 VPN 存取系統。擁有備用存取方法,或除非確定,否則不要遠端執行。

由於路由的原因,上述規則可能還不夠。如果 IP 位址 <A> 不在到伺服器的已知路由中(僅當伺服器沒有預設路線)。雖然系統永遠不會將封包(IP 甚至 ARP)傳回此目的地(回覆未經過 SNAT),但仍需要到該目的地的路由,以便路由堆疊(不知道發生了 SNAT)進行正確處理。

所以如果iptables上面的規則還不夠(可能如果伺服器沒有預設路由),您可以新增:

  ip route add <A>/32 dev eth0

相關內容