检查由iptables标记的数据包


2

我正在标记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挣扎但没有成功。

感谢你们。


ip route并且iptables -S -t mangle会更好。另外,你是如何使用tcpdump的?
grawity 2015年

好吧,我确实使用tcpdump来监控eth0 / wlan0流量,以便查看TCP和UDP是否在预期的接口上运行。
Giancarlo 2015年

请不要使用route -n来显示路由表,它是一个过时的命令。使用ip route show table name1 *或者调用路由表。如果未指定名称,则将显示默认路由表。
MariusMatutiae 2015年

添加了ip route show output ...
Giancarlo 2015年

通过eth0显示的UDP数据包是直接发送到您的局域网还是整个互联网?
MariusMatutiae 2015年

Answers:


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

嗯...你差不多完成了我的一天...我看到wlan上没有TCP数据包但我仍然可以在eth上看到一些UDP数据包。添加网关不会改变这种情况:pastebin.com/pyRXRFmX
Giancarlo

@Giancarlo传入或传出?请阅读我的编辑
MariusMatutiae 2015年

Ops,我忘了说外向......重启后我会再次测试;)
Giancarlo 2015年

无所事事...... eth0:大量的UDP(NOK),所有TCP(OK)wlan0只是一些UDP(NOK,只有五个数据包)而没有TCP(OK)
Giancarlo 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.