Tráfego da cadeia Iptables FORWARD não visto pelo tcpdump

Tráfego da cadeia Iptables FORWARD não visto pelo tcpdump

Eu tenho um bare metal rodando o servidor Ubuntu 16.04 com KVM e 3 NICs que estão conectados pelas pontes br1, br2 e br3 a uma VM convidada rodando também o servidor Ubuntu 16.04.

A primeira NIC - br1 - está conectada à internet e seu endereço de roteador é definido como gateway padrão para o convidado.

Tenho um código rodando no meu guest que precisa escutar os pacotes recebidos por br2 e br3, o código deve escutar apenas 1 NIC,

Tentei encaminhar o tráfego de en2 (o nome da NIC convidada que faz a ponte via br2) para en3 (o mesmo com br3) porseguindo isto:

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

No entanto, não há nada gravado ao usar sudo tpcdump -i en3e enviar uma mensagem de ping para NIC2 (enquanto se eu executar sudo tpcdump -i en2posso ver as mensagens de ping)

O que estou perdendo aqui? Existe uma maneira melhor de obter o resultado desejado (que meu código escute 1 NIC e obtenha o tráfego de ambas as NIC)?

Responder1

Para ouvir especificamente o tráfego encaminhado, é melhor criar uma nflogregra/interface.

Fazendo despejos de tráfego no Linux

Então você criará uma nfloginterface:

sudo iptables -t filter -I FORWARD -j NFLOG --nflog-group 6

e então ouça:

sudo tcpdump -s 0 -n -i nflog:6

A solução para o problema é usar a interface nflog no framework iptables, para obter exatamente os pacotes nos quais estamos interessados.

As regras do nflog registram em um grupo multicast interno do kernel, que é identificado por um número inteiro no intervalo 0 - 2 ^ 16-1. Somente a parte do datagrama que a estrutura vê será capturada. Para iptables, esse é um pacote IPv4.

Usar o nflog para despejar pacotes força você a usar uma sintaxe de interface especial para tcpdump e wireshark. Você deve usar nflog:groupnumber como interface.

Como as regras do nflog são regras normais do iptables, as regras precisam de uma correspondência adequada e de uma parte de destino para que você obtenha exatamente o tráfego desejado. Você também deve colocar a regra no local correto para que ela receba os pacotes de seu interesse.

informação relacionada