Linux

將純 LAN 通信重定向到不同的介面和埠 (Linux)

  • September 16, 2018

我有以下情況:

一個由 IP 地址 192.168.1.x (I1) 標識的介面(設備)通過任何服務連接到另一個 IP 為 192.168.1.y (I2) 的介面到埠 (P2)同一個區域網路。現在我想將從 I1 發送到 I2:P2 的所有幀/數據包(一般數據)重定向到同一 LAN 上 IP 地址為 192.168.1.z (I3) 和埠 (P3) 的另一台設備上。

我嘗試了什麼:

我調查了iptables但最終發現它們(特別是 nat 表)僅適用於進入外部網路(WAN)的數據包。一個例外是在連接設備 (I1) 上設置規則時,這些 shell 命令完成了這項工作:

iptables -t nat -A OUTPUT -p tcp -d I2 --dport P2 -j DNAT --to I3:P3
iptables -t nat -A INPUT -p tcp -s I3 --sport P3 -j SNAT --to I2:P2

由於我想在本地路由器上應用規則,然後我嘗試查看 I1 和 I2 之間的通信是否甚至通過它:

iptables -t raw -I PREROUTING -s I1 -d I2 -j LOG

而且可能不是,因為我找不到具有這兩個 IP 的任何日誌(日誌文件位於*/var/log/messages*)。

我開始意識到 LAN 通信是通過使用 MAC 地址的交換機進行的,並且無法在那裡擷取,這是真的嗎?我想“交換機”在物理上(在)與路由器相同的盒子。

最後,我想我什至可能不需要重定向,只需在 I2 (這是一個虛擬介面)上執行所需的服務,但這不是問題所在。

所以我的主要問題是:是否可以在它通過的交換機/路由器
中 重定向從I1I2:P2的流量(修改數據包) ,以便目的地是I3:P3和 I3 然後可以響應以同樣的方式(偽裝成 I2:P2)而 I1 沒有註意到?

我想這可能是不可能的,並且此級別的重定向與(虛擬)網橋有關。如果是這樣,否則是否可以達到相同的結果?我只能修改交換機和 I2、I3 介面(不能修改 I1)。

你顯然在同一個網段上,正如你猜到的那樣——在這種情況下,流量沒有通過路由器。

有兩個地方可以進行必要的調整:

  1. 您只需對傳出數據包進行 DNAT 處理的始發設備 (I1):
iptables -t nat -A OUTPUT -p tcp -d I2 --dport P2 -j DNAT --to I3:P3
  1. 您需要同時進行 DNAT 和 SNAT 並且必須啟用數據包轉發的第二個設備 (I2):
iptables -t nat -A PREROUTING -p tcp -s I1 -d I2 --dport P2 -j DNAT --to-destination I3:P3
iptables -t nat -A POSTROUTING -p tcp -s I1 -d I3 --dport P3 -m conntrack --ctstate DNAT -j SNAT --to-source I2

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