Considere a seguinte topologia:
Estou enviando pacotes ICMP (ping) de host B
para 10.0.1.1
. Eles atingem o alvo e o alvo responde com um reply
. A conectividade funciona bem.
Ao correr, emhost A
tcpdump -i eth1 icmp
: não vejo nenhum pacotetcpdump -i eth2 icmp
: eu vejo os pacotes
Existe uma maneira de verificar se um pacote destinado a interface eth1
chegou a essa interface?
Lembro-me vagamente de ler um dia que o kernel estava entregando a resposta no eth2
nível (que é a primeira interface que o pacote atinge) para explicar por que o monitoramento eth1
não produz nenhum resultado.
Por que eu precisaria verificar esse caso específico: tenho casos em que um pacote chega em uma interface de um host (o primeiro a caminho), mas parece não atingir a interface pretendida (o aplicativo real não é ativado ). Esse teste garantiria que o firewall/encaminhamento está OK e que o problema está em outro lugar (na configuração do aplicativo, um bug no aplicativo etc.)
No Linux, um pacote de entrada é roteado verificando se um pacote deve ser tratado pela máquina local ou não. Se for o caso, ele é processado diretamente sem antes roteá-lo pela "interface correta". O endereço IP é apenas um alias para a máquina e não importa em qual interface o pacote chegou.
O mesmo acontece se você fizer isso localmente
telnet 10.0.1.1
- ele não aparece,eth1
mas sim emlo
que lida com todos os pacotes que vão da máquina local para ela mesma.No entanto, para pacotes de saída, faz diferença a qual interface um endereço pertence. O kernel primeiro decide como rotear um pacote e, em seguida, escolhe o melhor IP de origem para os pacotes com base nisso.
Se você precisar ver "todos os pacotes" com
tcpdump
, você pode fazertcpdump -i any icmp
. Ele não mostrará a(s) interface(s), mas você verá todos os pacotes indo para, por exemplo,10.0.1.1
.O assunto que você está falando é o modelo de host fraco/forte e o Linux usa um modelo fraco por padrão.
Eu diria que o firewall permitiria colocar essa restrição.
Você mencionou ICMP em seu exemplo anterior. O que há de errado em usá-lo exatamente para verificar se há conectividade real?
Além disso, neste ponto, você está bem perto da prática de usar interfaces de loopback para serviços — é usado principalmente junto com roteamento dinâmico, mas a ideia principal é bem simples: não importa de qual interface veio a solicitação, apenas assuntos que encontrou seu caminho e a resposta também pode ser enviada. As interfaces de loopback nunca estão inativas, a menos que sejam informadas manualmente - interfaces "reais" OTOH podem alterar seu estado devido à perda de link e assim por diante.