2013-03-31 75 views
1

假设我是服务器,并且我想要观察下载和上传特定MAC地址的带宽。随着上传监控链。我使用这个:
iptables -N clientA_upload然后iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55:66它工作得很好。
- 但是当涉及到下载链。我使用iptables -A FORWARD -m mac --mac-destination 00:11:22:33:44:55:66,iptables不支持mac目的地。请帮助我使用IPTABLES MAC地址的字节计数器

P/s:我只是想通过MAC地址进行监控。不是IP地址。因为在android操作系统。它不支持使用IP地址的字节计数。所以请帮助!

回答

-2

您在混淆下载和上传规则。

规则1:iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55:66

附加到ipchain并检查在转发链中给定的MAC。

现在,您需要检查在输入链中的MAC地址,所以不是在FORWARD链将第二条规则,将其应用于INPUT链:

规则2:iptables -I INPUT -m mac --mac-destination 00:11:22:33:44:55:66

+0

是不是INPUT链是我们的设备。我的意思是当我是服务器时(我的MAC是AA:BB:CC:DD:EE),我想观看客户端的带宽(他的MAC为00:11:22:33:44:55:66) )。有2种流。通过我之间的下载流和上传流(互联网,我,客户端)。 – TrisNguyen

0

失踪--mac-destination,关键是要结合iptables的--mac-sourceCONNMARK

  • 首先使用--mac-source以匹配您感兴趣的MAC地址来的数据包
  • 使用CONNMARK,以纪念全连接,即两个方向(!)和
  • 现在检查数据包与连接标记在另一个方向。


# lan interface 
if_lan=eth0 

# packets going to mac address will pass through this: 
iptables -t mangle -N clientA_download  

# mark connections involving mac address: 
iptables -t mangle -A PREROUTING -i $if_lan -m state --state NEW -m mac --mac-source 00:11:22:33:44:55 -j CONNMARK --set-mark 1234 

# match packets going to mac address: 
iptables -t mangle -A POSTROUTING -o $if_lan -m connmark --mark 1234 -j clientA_download 


起初我以为这只能从LAN发起TCP连接的工作,但鉴于--state NEW的定义,它应该在两个方向上的TCP和UDP(工作! )

对于计数器也见ipset这是非常好的。

Policy Routing on Linux based on Sender MAC Address是这个答案的灵感。