tcpdump 未看到 Iptables FORWARD 鏈流量

tcpdump 未看到 Iptables FORWARD 鏈流量

我有一個運行 Ubuntu 伺服器 16.04 的裸機,帶有 KVM 和 3 個 NIC,它們透過橋 br1、br2 和 br3 連接到也運行 Ubuntu 伺服器 16.04 的來賓 VM。

第一個 NIC - br1 - 連接到互聯網,其路由器位址被定義為訪客的預設網關。

我有一個代碼在我的來賓上運行,需要偵聽 br2 和 br3 收到的資料包,該程式碼應該只偵聽 1 個網卡,

我嘗試將流量從 en2 (透過 br2 橋接的來賓網卡的名稱)轉送到 en3 (與 br3 相同)按照此:

sudo nano /etc/sysctl.conf
uncomment net.ipv4.ip_forward = 1

sudo sysctl -p
sudo iptables -t nat -A POSTROUTING --out-interface en3 -j MASQUERADE  
sudo iptables -A FORWARD --in-interface en2 --out-interfac en3 -j ACCEPT

sudo tpcdump -i en3然而,在使用並向 NIC2 發送 ping 訊息時沒有記錄任何內容(而如果我運行,sudo tpcdump -i en2我可以看到 ping 訊息)

我在這裡缺少什麼?有沒有更好的方法讓我得到我想要的結果(我的程式碼將監聽 1 個 NIC 並獲得兩個 NIC 的流量)?

答案1

要專門監聽轉送的流量,最好建立一個nflog規則/介面。

在 Linux 上進行流量轉儲

所以你將創建一個nflog介面:

sudo iptables -t filter -I FORWARD -j NFLOG --nflog-group 6

然後聽聽看:

sudo tcpdump -s 0 -n -i nflog:6

解決這個問題的方法是使用iptables框架中的nflog接口,來準確地取得我們感興趣的資料包。

nflog 規則記錄到內核內部多播組,該組由 0 - 2^16-1 範圍內的整數標識。僅捕獲框架看到的資料報部分。對於 iptables 來說,這是一個 IPv4 封包。

使用 nflog 轉儲封包會強制您對 tcpdump 和wireshark 使用特殊的介面語法。您必須使用 nflog:groupnumber 作為介面。

由於 nflog 規則是普通的 iptables 規則,因此規則需要正確的配對和目標部分,以便您可以準確地獲得所需的流量。您還必須將規則放入正確的位置,以便它可以取得您感興趣的資料包。

相關內容