检查被 iptables 标记的数据包

检查被 iptables 标记的数据包

我正在标记 TCP 和 UDP 数据包,以便将它们发送到两个不同的接口(例如 wlan0 和 eth0),我按照以下步骤进行操作这个答案

假设此配置:

eth0 address:  192.168.0.84 

wlan0 address: 192.168.1.22 

我正在设置以下规则/路线:

#!/bin/bash
iptables -A PREROUTING -t mangle -p tcp -j MARK --set-mark 1
echo 201 routeTcp >> /etc/iproute2/rt_tables
ip rule add fwmark 1 table routeTcp
ip route add default via 192.168.0.0 dev eth0 table routeTcp

iptables -A PREROUTING -t mangle -p udp -j MARK --set-mark 2
echo 202 routeUdp >> /etc/iproute2/rt_tables
ip rule add fwmark 2 table routeUdp
ip route add default via 192.168.1.0 dev wlan0 table routeUdp

route -n输出:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0

ip route show输出:

default via 192.168.0.1 dev eth0  proto static 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.84  metric 1 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.22  metric 9 

ip route show table routeUdp

default via 192.168.1.1 dev wlan0 

ip route show table routeTcp

default via 192.168.0.1 dev eth0 

iptables -nL -v --line-numbers -t mangle输出:

Chain PREROUTING (policy ACCEPT 388K packets, 474M bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     360K  464M MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            MARK set 0x1
2    27269   11M MARK       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            MARK set 0x2

Chain INPUT (policy ACCEPT 385K packets, 474M bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 290K packets, 33M bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 290K packets, 33M bytes)
num   pkts bytes target     prot opt in     out     source               destination  

我如何检查数据包是否确实通过正确的接口发送?

我一直在努力使用 tcpdump,但没有成功。

感谢你们。

答案1

可能不是:你的路由命令是错误的:你使用

   ip route add default via 192.168.0.0 dev eth0 table routeTcp
   ip route add default via 192.168.1.0 dev wlan0 table routeUdp

虽然他们应该

   ip route add default via 192.168.0.1 dev eth0 table routeTcp
   ip route add default via 192.168.1.1 dev wlan0 table routeUdp

如果您的网关分别是192.168.0.1和192.168.1.1;如果不是,请进行相应调整。

至于检查,

     tcpdump -i eth0 -n udp

在一个终端中,

     tcpdump -i wlan0 -n tcp

在另一个航站楼;他们应该两个都返回过境包。

编辑:

抱歉,我忘了我们需要区分传入和传出的数据包,只有传出的数据包是分开的。请使用

       tcpdump -i wlan0 -n tcp and src host The_IP_ADDRESS_of_Wlan0
       tcpdump -i eth0 -n udp and src host The_IP_ADDRESS_of_eth00

相关内容