Me gustaría hacer algo NATen iptables. De modo que, todos los paquetes que lleguen al 192.168.12.87puerto 80se enviarán al 192.168.12.77puerto 80.
¿Cómo hacer esto con iptables?
O
¿Alguna otra forma de lograr lo mismo?
Me gustaría hacer algo NATen iptables. De modo que, todos los paquetes que lleguen al 192.168.12.87puerto 80se enviarán al 192.168.12.77puerto 80.
¿Cómo hacer esto con iptables?
O
¿Alguna otra forma de lograr lo mismo?
192.168.12.87. Entonces, necesito reenviar toda la solicitud192.168.12.77.iptables. Y, vi algunos ejemplos. Pero, parece que se requieren dos ethernet. Enlace: revsys.com/writings/quicktips/nat.htmlRespuestas:
Estas reglas deberían funcionar, suponiendo que se
iptablesesté ejecutando en el servidor192.168.12.87:Tiene que DNAT el tráfico entrante en el puerto 80, pero también necesitará SNAT el tráfico de regreso.
Alternativa (y mejor enfoque en mi humilde opinión):
Dependiendo de cuál sea su servidor web (Apache, NGinx), debe considerar un proxy HTTP en su servidor front-end (192.168.12.87):
mod_proxy (Apache)
proxy_pass (NGinx)
fuente
La razón por la que aparentemente
iptables -t nat -A PREROUTING -d 192.168.12.87 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77no funcionará es cómo se enrutarán los paquetes de retorno.Puede configurar reglas que provoquen que los paquetes enviados a 192.168.12.87 sean simplemente NATizados a 192.168.12.77, pero 192.168.12.77 luego enviará respuestas directamente al cliente. Esas respuestas no pasarán por el host donde su regla de iptables está haciendo NAT, por lo tanto, los paquetes en una dirección se traducen, pero los paquetes en la otra dirección no.
Hay tres enfoques para resolver este problema.
iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87Cada una de esas tres soluciones tiene inconvenientes, por lo que debe considerar detenidamente si realmente necesita hacer este reenvío particular.
De los tres enfoques, creo que el primero es el que es más probable que funcione. Entonces, si no necesita conocer las direcciones IP del cliente, esa es la que recomendaría.
También puede optar por olvidarse de NAT por completo y no intentar resolver el problema en la capa MAC o IP. Puede ir hasta la capa HTTP y buscar una solución allí. En ese caso, la solución que encontrará es un proxy HTTP. Si instala un proxy HTTP en 192.168.12.87 y lo configura adecuadamente, puede hacer que reenvíe las solicitudes a 192.168.12.77 y reenvíe las respuestas. Además, puede insertar un encabezado X-Fordered-For conservando la IP del cliente original. El servidor en 192.168.12.77 debe configurarse para confiar en el encabezado X-Fordered-For de 192.168.12.87.
fuente
-j MASQUERADEque no se mencione aquí; ¿No es el enfoque habitual con DNAT?SNATlugar deMASQUERADE, porque eso es lo que dice la documentación. La redacción exacta en la documentación es:It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.