
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 ping
paquete de solicitud ue0
y lo retransmite a em0
. Si recibe una ping
respuesta el em0
, se la transmitirá a ue0
.
El problema es el ENRUTADOR. Recibe una ping
solicitud desde 192.168.200.3
su lado LAN (pero eso no importa). Cuando envía una ping
respuesta 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/24
red 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 ping
experimento 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/24
en 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. .