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 规则,因此规则需要正确的匹配和目标部分,以便您准确获得所需的流量。您还必须将规则放入正确的位置,以便它获取您感兴趣的数据包。

相关内容