Diferencia entre DNAT y REDIRECT en IPTABLES

14

De acuerdo, puede ser porque soy denso o tal vez simplemente no encuentro la fuente correcta, pero no puedo entender por qué una de estas configuraciones de IPTABLES sería mejor que la otra.

He aquí mi arreglo:

Tengo una caja que sirve como proxy transparente y enrutador o más. Tiene dos interfaces, ETH0 y ETH1, y el siguiente esquema de direcciones:

ETH0 = DHCP ETH1 = 192.168.5.1/24 sirviendo DHCP para la red 192.168.5.0/24 a clientes detrás de ella en la LAN

Tengo instalado Privoxy y escucho en el puerto 8080 como proxy transparente. Lo que estoy logrando con esta configuración es poder colocar este cuadro en una red existente con una configuración mínima y clientes conectados al proxy.

Aquí está mi archivo IPTABLES original

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Esta configuración funciona bien y el tráfico fluye de un lado a otro sin problemas. Obtengo la dirección IP de los clientes de origen en los archivos de registro privoxy, y la vida es buena.

Mi confusión surge cuando empiezo a mirar las configuraciones de otras personas y veo que están usando DNAT en lugar de REDIRECTAR, y estoy tratando de entender el beneficio real de uno sobre el otro. Aquí hay una configuración de muestra:

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Nuevamente, esta configuración también funciona y me da todo lo que necesito desde una perspectiva de registro ...

¿Cuál es correcto, o quizás MÁS correcto, que el otro?

Gracias por tomarse el tiempo de leer hasta aquí ...

QWade
fuente

Respuestas:

14

REDIRECTaltera la dirección IP de destino para enviar a la máquina misma. En otras palabras, los paquetes generados localmente se asignan a la dirección 127.0.0.1. Es para redirigir paquetes locales. Si solo desea redirigir el tráfico entre los servicios en la máquina local, será una buena opción.

DNATes la traducción real de direcciones de red . Si desea que los paquetes destinados fuera del sistema local tengan el destino alterado, es la mejor opción de los dos, ya REDIRECTque no funcionará.

Warner
fuente
bien, así que si tengo un cliente sentado detrás del proxy, digamos en 192.168.5.234, y quiero "procesar" sus solicitudes HTTP a través del proxy en 192.168.5.1, está sugiriendo que debería DNAT el tráfico del puerto de salida 80 a 192.168 .5.1: 8080 en el proxy. Puedo comprar eso, pero ¿POR QUÉ ???? ¿Tiene algo que ver con cómo se maneja el tráfico una vez que sale del ETH0 del proxy a través de la puerta de enlace predeterminada a Internet? Necesito asimilar esto o mi cabeza explotará
QWade
2
DNAT cambia la dirección a medida que el paquete pasa a través del firewall para que llegue al host deseado, y en el reverso parece provenir del firewall. DNAT casi nunca se aplica al tráfico saliente, que es manejado por la regla MASQUERADE. Si el privproxy estaba en otro host, entonces DNAT sería apropiado, con una excepción apropiada para ese host.
BillThor
Bill, gracias. Ahí es donde iba mi cerebro reptiliano, pero siempre es bueno tener validación. Entonces, si envío un paquete destinado a google.com desde 192.168.5.234 y tiene su gw predeterminado establecido como 192.168.5.1 (eth1 en el proxy), debería "REDIRECER" ese paquete al puerto 8080 en el proxy y dejar que privoxy haga el resto. La razón de esto es porque Privoxy vive en 192.168.5.1 y no en otro host. ¿Estoy fumando algo que no debería?
QWade
9

REDIRECTsí altera la dirección IP de destino para enviarla a la máquina en sí según lo respondió Warner @. Pero diría que la respuesta no es totalmente correcta o un poco engañosa.

REDIRECTno es solo para redirigir paquetes locales. Realmente es DNATen donde la dirección IP de destino a usar está implícita, 127.0.0.1 si es un paquete local o la dirección IP de la interfaz de la máquina, de lo contrario, 192.168.5.1 en el caso del OP.

Entonces, en esta pregunta, no importa cuál sea el destino final, los paquetes primero deben llegar al proxy, por lo que REDIRECTes perfectamente adecuado.

Como REDIRECTno necesita especificar la dirección IP, solo tomará la correcta, tiene algunas ventajas sobre DNAT:

  • Si la dirección IP de la máquina cambia por algún motivo, no necesita modificar sus reglas y, en particular DNAT, no funcionará para las interfaces controladas por DHCP.

  • Puede escribir y mantener las mismas reglas para varios sistemas (varias instancias de proxy, por ejemplo) sin mantener versiones ligeramente diferentes debido a las direcciones IP específicas.

Julio Diez
fuente
de alguna manera como snat / masquerade.
Jichao
@Hod, escuché que REDIRECT es un caso especial de DNAT, pero uso REDIRECT y TOR conoce el destino real de un paquete, por lo que concluyo que daddr y dport de las estructuras iphdr y tcphdr están intactos, y el paquete acaba de regresar al destino REDIRECT por núcleo. DNAT realmente modificará las estructuras. ¿Me equivoco?
mecha