Estou tentando entender um comportamento peculiar em nossa configuração de roteamento / firewall há algum tempo, mas realmente não entendo o que está acontecendo.
Temos um dispositivo de firewall / roteador com duas interfaces externas e várias VLANs internas.
O comportamento específico é observado quando um cliente (MAC f4:f5:d8:d2:f2:4c
, IP 10.99.154.254 neste exemplo) em nossa rede Wi-Fi convidada VLAN 99 envia uma solicitação de ping echo para algum host 8.8.8.8, que proibimos.
O roteador envia de volta um pacote de host ICMP inacessível de sua interface vlan99
(MAC 00:08:a2:0d:00:70
, IP 10.99.0.2) para o cliente e, ao mesmo tempo, vemos um pacote marciano na interface externa eth-ext1
:
tcpdump
mostra isso:
$ tcpdump -i vlan99 -vvvvn 'icmp and host 10.99.154.254'
11:59:21.555564 f4:f5:d8:d2:f2:4c > 00:08:a2:0d:00:70, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
10.99.154.254 > 8.8.8.8: ICMP echo request, id 2303, seq 1, length 64
11:59:21.555651 00:08:a2:0d:00:70 > f4:f5:d8:d2:f2:4c, ethertype IPv4 (0x0800), length 126: (tos 0xc0, ttl 64, id 8585, offset 0, flags [none], proto ICMP (1), length 112)
10.99.0.2 > 10.99.154.254: ICMP host 8.8.8.8 unreachable, length 92
(tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
10.99.154.254 > 8.8.8.8: ICMP echo request, id 2303, seq 1, length 64
Nada de surpreendente aqui, este é o ping original do cliente e o pacote ICMP resultante voltando para o cliente guest informando que o host está inacessível.
Ao mesmo tempo, uma entrada aparece no log do kernel:
Feb 21 11:59:21 ganymede kernel: IPv4: martian source 10.99.154.254 from 8.8.8.8, on dev eth-ext1
Feb 21 11:59:21 ganymede kernel: ll header: 00000000: 00 08 a2 0d 00 70 f4 f5 d8 d2 f2 4c 08 00 .....p.....L..
As informações da camada de enlace mostram que esse quadro ethernet veio do dispositivo cliente para a interface vlan99
do roteador, o que me faz pensar por que ele aparece como um pacote marciano em eth-ext1
com um endereço de origem de 8.8.8.8.
Eu falhei até agora para obter um traço do pacote com a fonte marciana, o que me deixa imaginando se o log da fonte marciana também acontece em uma interface de saída, antes de tcpdump
ter a chance de vê-lo?
Tenho prazer em fornecer mais informações a pedido (tabelas de encaminhamento ou semelhantes) e gostaria de agradecer quaisquer sugestões sobre o que está a acontecer aqui.