man ping
, negrito meu:
-I interface
interface is either an address, or an interface name. If interface is an address, it sets source address to specified interface address. If interface in an interface name, it sets source interface to specified interface.
O problema é forçar a interface com ping -I vmbr0
em vez de deixar o sistema escolher no final a interface certa com ping -I 10.1.1.1
.
Além disso, mesmo que isso não faça diferença com nat/POSTROUTING
(veja adiante), você deve entender que você está não roteando ao executar um comando no host, então algumas cadeias (por exemplo: filter/FORWARD
) pode não se aplicar (mas nat/POSTROUTING
ainda faz, veja mais adiante). Tenha em mente que isso pode dar resultados diferentes ao executar comandos no host em vez de uma VM roteada dependendo de suas regras, mesmo que não seja o caso aqui com o comando ping correto.
este Fluxo de Pacotes no Netfilter e na Rede Geral mostra esquematicamente que depois que as diferentes cadeias OUTPUT
são percorridas por um pacote vindo de um processo local, nat/POSTROUTING
ainda é percorrido depois, então sim, se o seu pacote estivesse saindo por eth0
ele ainda teria SNATed: usando ping -I 10.1.1.1 8.8.8.8
Em vez disso, ao forçar a interface com ping -I vmbr0 8.8.8.8
, se você executar tcpdump
em vmbr0
, provavelmente verá solicitações ARP de 10.1.1.1 a 8.8.8.8, que não obterão respostas.
E para a pergunta final: sim, forçar a rota não pode deixar o pacote ir para o destino certo. Você nunca pode ter vmbr0
masqueraded, porque SNAT / MASQUERADE é feito em pacotes 'IP , não em uma interface, e seu aplicativo depende de sua rota para o destino.