Eu acho que os roteadores openwrt têm um comando iptables completo. Se assim for, então a questão torna-se tão fácil quanto analisar os contadores de tráfego do iptables.
Como exemplo, vamos supor que estou interessado em medir o tráfego para o servidor do GoogleDNS 8.8.8.8 em um servidor baunilha que não tem regras de iptables, como visto abaixo
❯❯❯ sudo iptables -n -L -xv
Chain INPUT (policy ACCEPT 27 packets, 1660 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 21 packets, 2132 bytes)
pkts bytes target prot opt in out source destination
Como você pode ver, temos contadores globais de pacotes por cadeia (Exemplo: a saída viu 21 pacotes de 2132 bytes)
Na próxima etapa, injetamos uma regra para o tráfego em que estamos interessados. Neste exemplo, solicitaremos que o iptables atente a todo o tráfego para 8.8.8.8
❯❯❯ sudo iptables -I OUTPUT 1 -o eth0 -d 8.8.8.8
Vamos ver o que os contadores de contabilidade de pacotes relatam (note que a nova regra para 8.8.8.8 está agora listada)
❯❯❯ sudo iptables -n -L -xv
Chain INPUT (policy ACCEPT 12 packets, 752 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 8 packets, 784 bytes)
pkts bytes target prot opt in out source destination
0 0 all -- * eth0 0.0.0.0/0 8.8.8.8
Vamos gerar 5 pacotes de solicitações ICMP.
❯❯❯ ping -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=128 time=159 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=128 time=159 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=128 time=156 ms
64 bytes from 8.8.8.8: icmp_req=4 ttl=128 time=161 ms
64 bytes from 8.8.8.8: icmp_req=5 ttl=128 time=155 ms
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4010ms
rtt min/avg/max/mdev = 155.294/158.503/161.081/2.092 ms
Observando os contadores do iptables, veremos que registramos a contagem de pacotes e bytes para os pacotes de saída para 8.8.8.8
❯❯❯ sudo iptables -n -L -xv
Chain INPUT (policy ACCEPT 105 packets, 6900 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 67 packets, 6956 bytes)
pkts bytes target prot opt in out source destination
5 420 all -- * eth0 0.0.0.0/0 8.8.8.8
Observe que os bytes foram (solicitação de 64 bytes / ICMP + solicitação de 20 bytes / IP) * 5 solicitações:)
Se você quiser monitorar o tráfego de entrada do servidor, basta adicionar uma regra INPUT para ele (Dica: basta alterar a saída = > entrada).
Agora que você sabe o básico, pode enlouquecer e dividir seu tráfego em
- Protocolo (udp vs tcp vs icmp)
- Sub-redes (você pode usar isso para diferenciar a largura de banda intra-rede (dentro do datacenter) do tráfego externo)
...