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

1

O ambiente é o FreeBSD na maior parte e se parece com isso:

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

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

  • ROUTER recebe 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 é atribuído 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 loki rc.conf

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 tabela de roteamento e parece funcionar em todas as direções.

netstat -r no 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 tabela de roteamento, mas só consegue ver o LOKI.

Em resumo:

  • O LOKI é capaz de efetuar ping de HOST_A, HOST_B e ROUTER
  • HOST_B é capaz de fazer ping no LOKI, mas não no ROUTER ou no HOST_A

Algumas notas adicionais: de HOST_B

ping 10.0.0.1 100% packet loss

Em wireshark no LOKI, enquanto executa ping a 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 reinicializando.

Então, eu corri os seguintes comandos no loki:

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

para monitorar a atividade nas duas nics.

do hostb, eu corri:

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 do em0 em 10.0.0.2.

Eu então corri:

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

e com certeza, em0 relatado:

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 o ping do loki, 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 ideia de como encontrar a resposta?

    
por decuser 06.11.2015 / 19:00

3 respostas

2

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

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

A menos que a tabela de roteamento nesses dispositivos saiba usar o 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á, ele pode receber o tráfego e voltar para o HOST_B.

    
por 06.11.2015 / 23:17
1

Parece-me que LOKI está fazendo exatamente o que você espera. Ele recebeu um pacote de solicitação ping em ue0 e o retransmite para em0 . Se ele recebesse uma resposta ping em em0 , ele seria retransmitido para ue0 .

O problema é o ROUTER. Ele recebe uma solicitação ping de 192.168.200.3 em seu lado da LAN (mas isso não importa). Quando ele envia uma resposta ping para 192.168.200.3 , ele olha para a tabela de roteamento. O lado da LAN é 10.0.0.0/24 (ou similar), portanto, o pacote de resposta é enviado para o gateway padrão do ROUTER, que é o lado da WAN na Internet pública.

O ROUTER usa conversão de endereço de rede (NAT) para falsificar uma rede 10.0.0.0/24 atrás do seu endereço IP público verdadeiro (atribuído ao lado da 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 por trás do NAT.

Você pode colocar uma rota estática no ROUTER para que o experimento de ping funcione, mas isso ainda será isolado da Internet pública. Você pode habilitar o NAT no LOKI, caso em que você tem NAT duplo na Internet (o que funciona bem, mas sem sentido). Se você só precisa de um firewall de segundo nível, considere fazer do LOKI um firewall de ponte e executar 10.0.0.0/24 em ambos os NICs. Se você quiser hospedar serviços voltados para a Internet e tiver apenas um endereço IP público, será forçado a usar as regras de encaminhamento de porta no ROUTER.

    
por 07.11.2015 / 13:04
0

Alguma coisa precisa ser configurada para encaminhar pacotes da Rede A para a Rede B. O 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 o gateway padrão para o Host B. Outra opção é definir uma rota permanente na tabela de roteamento do Host B, especificando o Loki como o destino para o tráfego 10.xxx. .

    
por 06.11.2015 / 19:15