
O que acontece se um host na rede receber um pacote IP com um endereço MAC de origem diferente do endereço MAC na tabela ARP local para esse IP de origem?
A entrada da tabela ARP para esse IP foi e será preenchida por meio de uma resposta ARP válida.
Agora notei que o host receptor (Ubuntu 18.04) não envia um pacote de resposta (resposta de eco ICMP ou TCP SYN/ACK ... etc). Nenhum pacote de resposta está saindo da interface.
A questão agora é por que motivos o anfitrião se comporta dessa maneira. Que verificações estão sendo feitas com os endereços MAC e IP dos pacotes, a tabela arp local e a tabela de roteamento, etc.?
Editar:
Para esclarecer o cenário:
Se o host Hb enviar uma solicitação de ping para 10.2.0.5 (host Ha), Ha receberá um pacote ICMP com IP de origem 10.1.0.3 e o endereço MAC de origem será o endereço MAC do roteador. Mas a tabela ARP do host Ha possui uma entrada: 10.1.0.3 -> Endereço MAC Hb. Assim, os endereços MAC são diferentes!
Responder1
Este comportamento é totalmente esperado e está relacionado com a configuração de roteamento do Hb
host, que provavelmente possui apenas a rota padrão através do roteador. Portanto, caso você não tenha configurado a rota adicional, os pacotes para a N2
rede ( 10.2.0.0/24
) serão enviados pela rota padrão.
Portanto, o problema é causado pela ativação do filtro de caminho reverso no Ha
host, que descarta os pacotes recebidos por restrições no endereço de origem.
Para solucionar esse problema, você deve verificar a saída dos próximos comandos no Ha
host:
ip netconf show dev <iface-N2>
- verifique orp_filter
valor. Provavelmente éstrict
.ip route get 10.2.0.5 from 10.1.0.3 iif <iface-N2>
- provavelmente mostrará algo comoinvalid cross-device link
.nstat -az TcpExtIPReversePathFilter
- provavelmente terá um valor diferente de zero.
Existem três maneiras inconscientes de resolver o problema:
Basta desabilitar o
rp_filter
noHa
host com o sysctl (sysctl -w net.ipv4.conf.all.rp_filter=0
esysctl -w net.ipv4.conf.<iface-N2>.rp_filter=0
). Além disso, você deve editar o/etc/sysctl.conf
arquivo para tornar essas alterações permanentes.Basta adicionar a rota no
Hb
host ao endereço10.2.0.5
direto10.1.0.5
(comando para linuxip route add 10.2.0.5 via 10.1.0.5
, para windowsroute add 10.2.0.5 mask 255.255.255.255 10.1.0.5
)Configure a tradução de endereço de origem (NAT) no roteador para reescrever o endereço
Hb
no endereço do roteador. A regra do iptables para fazer isso:
iptables -t nat -A POSTROUTING -o <iface-N2> --src 10.1.0.3 --dst 10.2.0.5 -j MASQUERADE