No se puede descubrir cómo enrutar un paquete a través de una NIC de múltiples servidores

No se puede descubrir cómo enrutar un paquete a través de una NIC de múltiples servidores

El entorno es FreeBSD en su mayor parte y tiene este aspecto:

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

Como mínimo, me gustaría poder hacer ping al ROUTER desde HOST_B.

  • Al ROUTER se le asigna la IP 10.0.0.1
  • LOKI es una máquina multitarjeta a la que se le asignan las IP 10.0.0.2 y 192.168.200.1
  • A HOST_B se le asigna la IP 192.168.200.3
  • A HOST_A se le asigna la IP 10.0.0.3

Configuré la red como se indica arriba y agregué gateway_enable="YES" al rc.conf de loki

netstat -r en LOKI produce:

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 una fina tabla de enrutamiento y parece funcionar en todas las direcciones.

netstat -r en HOST_B produce:

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 parece otra buena tabla de enrutamiento, pero solo puede ver LOKI.

En resumen:

  • LOKI puede hacer ping a HOST_A, HOST_B y ROUTER
  • HOST_B puede hacer ping a LOKI, pero no a ROUTER o HOST_A

Algunas notas adicionales: de HOST_B

ping 10.0.0.1 100% packet loss

En Wireshark en LOKI, mientras se hace ping a 10.0.0.1 desde 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!)

Me parece que no se está enrutando nada de LOKI al ROUTER. ¿Qué me estoy perdiendo?

Confirmé que se estaba realizando el reenvío de IP comentando gateway_enable="YES" en /etc/rc.conf y reiniciando.

Luego, ejecuté los siguientes comandos en loki:

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

para monitorear la actividad en las dos NIC.

desde hostb, ejecuté:

ping 10.0.0.1

la interfaz ue0 en 192.168.200.1 informó:

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

no se informó nada sobre la interfaz em0 en 10.0.0.2.

Luego corrí:

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

y efectivamente, em0 informó:

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

Pero no, contesta como lo que me sale con un ping loki de 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

Si hago ping al enrutador desde loki, todo está bien:

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

¿Alguna idea de cómo encontrar la respuesta?

Respuesta1

¿Por qué LOKI y HOST_A están conectados mediante un enrutador cuando están en la misma subred? ¿Es realmente un enrutador o es solo un conmutador? (Según sus comentarios posteriores, aunque el dispositivo es un enrutador, solo actúa como un interruptor entre LOKI y HOST_A).

¿Cuál es la tabla de enrutamiento en HOST_A y ROUTER? Si intentara llegar a 192.168.200.1, ¿por qué debería utilizar LOKI como destino?

A menos que la tabla de enrutamiento de estos dispositivos sepa usar LOKI para la subred 192, simplemente reenviarán a la puerta de enlace predeterminada.

Como alternativa, es posible que desees investigar la instalación de NAT en LOKI. Para muchos servicios, puede encapsular el tráfico de HOST_B como tráfico de LOKI. Dado que otras máquinas pueden llegar allí, puede recibir el tráfico y reenviarlo a HOST_B.

Respuesta2

Me parece que LOKI está haciendo exactamente lo que esperas. Recibió un pingpaquete de solicitud ue0y lo retransmite a em0. Si recibe una pingrespuesta el em0, se la transmitirá a ue0.

El problema es el ENRUTADOR. Recibe una pingsolicitud desde 192.168.200.3su lado LAN (pero eso no importa). Cuando envía una pingrespuesta a 192.168.200.3, mira su tabla de enrutamiento. El lado LAN es 10.0.0.0/24(o similar), por lo que el paquete de respuesta se envía a la puerta de enlace predeterminada del ROUTER, que es el lado WAN en la Internet pública.

El ROUTER utiliza traducción de direcciones de red (NAT) para falsificar una 10.0.0.0/24red detrás de su única dirección IP pública verdadera (asignada al lado WAN del ROUTER por su ISP). Las direcciones RFC1918 son privadas y no pueden exponerse a la Internet pública y siempre estarán detrás de NAT.

Podrías colocar una ruta estática en el ROUTER para que tu pingexperimento funcione, pero aún así estará aislada de la Internet pública. Puede habilitar NAT en LOKI, en cuyo caso tiene doble NAT a Internet (que funciona bien, pero es bastante inútil). Si solo necesita un firewall de segundo nivel, podría considerar hacer de LOKI un firewall puente y ejecutarlo 10.0.0.0/24en ambas NIC. Si desea alojar servicios de Internet y solo tiene una dirección IP pública, se verá obligado a utilizar reglas de reenvío de puertos en el ROUTER.

Respuesta3

Se debe configurar algo para reenviar paquetes de la Red A a la Red B. Loki, al tener doble conexión, podría hacer esto, pero no es automático. Al hacerlo, configurará Loki como enrutador y deberá usar Loki como puerta de enlace predeterminada para el Host B. Otra opción es establecer una ruta permanente en la tabla de enrutamiento del Host B especificando Loki como destino para el tráfico 10.xxx. .

información relacionada