Sustitución de servidores. Emulando servidor de internet

Sustitución de servidores. Emulando servidor de internet

Tengo dos redes consecutivas, ambas ocultas bajo su propia NAT 192.168.31.0/24-> 192.168.33.0/24-> Internet

Tengo un servidor TCP encendido 192.168.33.35y un cliente encendido192.168.31.32

Un cliente realiza una solicitud TCP al servidor ubicado en Internet en 66.66.66.66, por ejemplo. Quiero que la última puerta de enlace 192.168.33.1envíe la solicitud 192.168.33.35y engañe al cliente.

Lo más factible de lo que probé es:

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

El servidor recibió el paquete Syn y respondió. Pero la IP de origen de la respuesta del servidor parece permanecer 192.168.33.35después de pasar la puerta de enlace. Y el paquete recibido por la puerta de enlace se pierde 192.168.31.1.

Parece que la parte SNAT no funciona.

¿Qué puedo hacer para emular/falsificar el servidor con herramientas estándar openWrt?

Respuesta1

Esto es lo que pasa:

  1. Su 192.168.33.35servidor ve el paquete Syn 192.168.33.Z(no conoce la 192.168.31.0/24red y ve la dirección "WAN" de la 192.168.31.1puerta de enlace, no sé cuál Zes) y responde a esta dirección.
  2. Su tabla de enrutamiento dice que esta dirección pertenece a la red local, por lo que la respuesta está destinada a la dirección MAC de 192.168.33.Z.
  3. Incluso si la respuesta viaja físicamente a través de la 192.168.33.1máquina, la puerta de enlace no la altera porque está destinada a la dirección MAC de otra máquina.
  4. 192.168.33.Zve la respuesta de 192.168.33.35. Espera uno 66.66.66.66y no sabe qué hacer.

Tenga en cuenta que no importa que 192.168.33.Zrealice NAT (estando 192.168.31.1en su lado LAN). El mecanismo de falla es muy similar a aquel en el queEl bucle invertido NAT (NAT en horquilla) está solo parcialmente configurado.

Tienes que hacer que tu 192.168.33.35servidor envíe respuestas a la dirección MAC de tu 192.168.33.1puerta de enlace.

  • Establezca una regla de enrutamiento para 192.168.33.Z(recuerde que no lo sé Z, usted sí; sustituya el número real) o incluso para toda 192.168.33.0/24la red:

    # do this on the 192.168.33.35 machine
    route add -host 192.168.33.Z gw 192.168.33.1
    

    Tenga en cuenta que afectará todas las comunicaciones desde 192.168.33.35hasta 192.168.33.Z. En los casos en los que 192.168.33.35debería actuar, 192.168.33.35los paquetes serán enrutados innecesariamente; Aunque no debería romper cosas.

  • O dejar que la 192.168.33.1puerta de enlace realice no sólo DNAT sino también SNAT. Esta solución es básicamente la misma que la del loopback NAT en la respuesta ya vinculada:

    # do this on the 192.168.33.1 gateway
    # you already have this line
    iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
    # this line is new
    iptables -t nat -I POSTROUTING -d 192.168.33.35 -j SNAT --to-source 192.168.33.1
    

Este fragmento se aplica a su situación:

Tenga en cuenta que la tabla NAT iptablessolo se utiliza para el primer paquete de una conexión. Los paquetes posteriores relacionados con la conexión se procesan utilizando las tablas de mapeo interno establecidas cuando se tradujo el primer paquete.

Esto significa que la segunda de sus líneas ( iptables … -j SNAT --to-source 66.66.66.66) es irrelevante cuando inicia una conexión desde un cliente. Los paquetes posteriores se editarán SNAT y DNAT correctamente como lo fue el primer paquete.


Creo que si tu primera línea

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35

actuó en la 192.168.31.1puerta de enlace, haría lo que usted quisiera para otros clientes sin 192.168.31.0/24ningún truco adicional.


Esta segunda línea tuya

iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

se aplicará si inicia una conexiónde 192.168.33.35. Los servidores de Internet rara vez hacen esto, por lo que es posible que no necesite esta regla en absoluto. En caso de que lo necesites, recuerda que:

  • la regla solo funcionará si los paquetes se enrutan a través de la 192.168.33.1puerta de enlace donde actúa esta regla, por lo que para llegar a sus computadoras locales y presentarles lo que 66.66.66.66necesita, debe ajustar la tabla de enrutamiento en la 192.168.33.35máquina de manera similar a lo anterior;
  • no puede comunicarse como 66.66.66.66con hosts externos (más allá de su red) porque incluso si lograra comunicarse con ellos actuando como 66.66.66.66, su respuesta llegaría al servidor real 66.66.66.66, no a usted.

Respuesta2

Lo hice con enrutamiento. Lamentablemente es menos flexible para acceder al servidor real, pero al menos funciona. Algo como esto:

[email protected]# route add -host 66.66.66.66 gw 192.168.33.35 dev br-lan

y en el servidor:

[email protected]# ip link add name s666 type dummy
[email protected]# ifconfig s666 66.66.66.66
[email protected]# ifconfig s666 up

información relacionada