Me gustaría hacer algo NAT
en iptables
. De modo que, todos los paquetes que lleguen al 192.168.12.87
puerto 80
se enviarán al 192.168.12.77
puerto 80
.
¿Cómo hacer esto con iptables?
O
¿Alguna otra forma de lograr lo mismo?
Me gustaría hacer algo NAT
en iptables
. De modo que, todos los paquetes que lleguen al 192.168.12.87
puerto 80
se enviarán al 192.168.12.77
puerto 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
iptables
esté 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.77
no 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.87
iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87
Cada 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 MASQUERADE
que no se mencione aquí; ¿No es el enfoque habitual con DNAT?SNAT
lugar 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.