Não é possível descobrir como rotear um pacote através de uma placa de rede multi-homed

Não é possível descobrir como rotear um pacote através de uma placa de rede multi-homed

O ambiente é FreeBSD em sua maior parte e se parece com isto:

HOST_A <-> ROUTER <-> LOKI <-> HOST_B

No mínimo, eu gostaria de poder executar ping no ROUTER do HOST_B.

  • O ROUTER recebeu o IP 10.0.0.1
  • LOKI é uma máquina multi-homed que recebe os IPs 10.0.0.2 e 192.168.200.1
  • HOST_B recebe o IP 192.168.200.3
  • HOST_A recebe o IP 10.0.0.3

Eu configurei a rede como acima e adicionei gateway_enable="YES" ao rc.conf do loki

netstat -r no LOKI produz:

Routing tables
Internet:
Destination        Gateway            Flags      Netif Expire
default            10.0.0.1           UGS         em0
10.0.0.0           link#1             U           em0
10.0.0.2           link#1             UHS         lo0
loki               link#2             UH          lo0
192.168.200.0      link#3             U           ue0
192.168.200.1      link#3             UHS         lo0

que parece uma boa tabela de roteamento e parece funcionar em todas as direções.

netstat -r em HOST_B produz:

Routing tables
Internet:
Destination        Gateway            Flags      Netif Expire
default            192.168.200.1      UGS         em0
hostb              link#2             UH          lo0
192.168.200.0      link#1             U           em0
192.168.200.3      link#1             UHS         lo0

que se parece com outra boa tabela de roteamento, mas só consegue ver LOKI.

Resumindo:

  • LOKI é capaz de executar ping em HOST_A, HOST_B e ROUTER
  • HOST_B é capaz de executar ping em LOKI, mas não em ROUTER ou HOST_A

Algumas notas adicionais: de HOST_B

ping 10.0.0.1 100% packet loss

No wireshark no LOKI, ao executar ping em 10.0.0.1 de HOST_B:

120 40.549564000    192.168.200.3   10.0.0.1    ICMP    98  Echo (ping) request  id=0x5a0e, seq=92/23552, ttl=63 (no response found!)

Parece-me que nada está sendo roteado do LOKI para o ROUTER. o que estou perdendo?

Confirmei que o encaminhamento de IP estava ocorrendo comentando gateway_enable="YES" em /etc/rc.conf e reiniciando.

Então, executei os seguintes comandos no loki:

sudo tcpdump -i em0 -nS
sudo tcpdump -i ue0 -nS

para monitorar a atividade nas duas placas de rede.

do hostb, executei:

ping 10.0.0.1

a interface ue0 em 192.168.200.1 relatou:

14:44:21.870865 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 21509, seq 0, length 64

nada foi relatado na interface em0 em 10.0.0.2.

Eu então corri:

sudo sysctl -w net.inet.ip.forwarding=1

e com certeza, em0 relatou:

14:58:14.745369 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 25861, seq 0, length 64

Mas não, responda como o que recebo com um ping loki do hostb:

14:44:15.724200 IP 192.168.200.3 > 192.168.200.1: ICMP echo request, id 21253, seq 4, length 64
14:44:15.724207 IP 192.168.200.1 > 192.168.200.3: ICMP echo reply, id 21253, seq 4, length 64

Se eu fizer ping no roteador do loki, está tudo bem:

15:04:55.637839 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 46852, seq 3, length 64
15:04:55.638324 IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 46852, seq 3, length 64

Alguma idéia de como encontrar a resposta?

Responder1

Por que LOKI e HOST_A estão conectados por um roteador quando estão na mesma sub-rede? É realmente um roteador ou é apenas um switch? (Pelos seus comentários posteriores, embora o dispositivo seja um roteador, ele atua apenas como uma chave entre LOKI e HOST_A).

Qual é a tabela de roteamento em HOST_A e ROUTER? Se fosse tentar chegar a 192.168.200.1, por que deveria usar LOKI como destino?

A menos que a tabela de roteamento desses dispositivos saiba usar LOKI para a sub-rede 192, eles apenas encaminharão para o gateway padrão.

Como alternativa, você pode querer investigar a instalação do NAT no LOKI. Para muitos serviços, ele pode encapsular o tráfego do HOST_B como tráfego do LOKI. Como outras máquinas podem chegar lá, ela pode receber o tráfego e encaminhá-lo de volta para HOST_B.

Responder2

Parece-me que LOKI está fazendo exatamente o que você espera. Ele recebeu um pingpacote de solicitação ue0e o retransmitiu para em0. Se recebesse uma pingresposta em em0, ele a retransmitiria para ue0.

O problema é o ROTEADOR. Ele recebe uma pingsolicitação 192.168.200.3do lado da LAN (mas isso não importa). Quando envia uma pingresposta para 192.168.200.3, ele analisa sua tabela de roteamento. O lado da LAN é 10.0.0.0/24(ou similar), então o pacote de resposta é enviado para o gateway padrão do ROUTER, que é o lado da WAN na Internet pública.

O ROUTER usa tradução de endereço de rede (NAT) para falsificar uma 10.0.0.0/24rede atrás do seu único endereço IP público verdadeiro (atribuído ao lado WAN do ROUTER, pelo seu ISP). Os endereços RFC1918 são privados e não podem ser expostos à Internet pública, e sempre viverão atrás do NAT.

Você poderia colocar uma rota estática em ROUTER para fazer seu pingexperimento funcionar, mas isso ainda estará isolado da Internet pública. Você pode ativar o NAT no LOKI; nesse caso, você terá NAT duplo para a Internet (o que funciona bem, mas é bastante inútil). Se você precisar apenas de um firewall de segundo nível, considere tornar o LOKI um firewall de ponte e executá-lo 10.0.0.0/24em ambas as NICs. Se você deseja hospedar serviços voltados para a Internet e possui apenas um endereço IP público, será forçado a usar regras de encaminhamento de porta no ROUTER.

Responder3

Algo precisa ser configurado para encaminhar pacotes da Rede A para a Rede B. Loki, sendo dual homed, poderia fazer isso, mas não é automático. Ao fazer isso, você configurará o Loki como um roteador e deverá usar o Loki como gateway padrão para o Host B. Outra opção é definir uma rota permanente na tabela de roteamento do Host B especificando Loki como destino para o tráfego 10.xxx .

informação relacionada