
Bien, 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 algo así. Tiene dos interfaces, ETH0 y ETH1, y el siguiente esquema de direcciones:
ETH0 = DHCP ETH1 = 192.168.5.1/24 ofreciendo DHCP para la red 192.168.5.0/24 a los clientes detrás de ella en la LAN
Tengo privoxy instalado y escuchando 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 del cliente de origen en los archivos de registro de 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 REDIRECT, y estoy tratando de comprender el beneficio real de una sobre la otra. 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 brinda todo lo que necesito desde una perspectiva de registro...
¿Cuál es la correcta, o quizás MÁS correcta, que la otra?
Gracias por tomarse el tiempo de leer hasta aquí...
Respuesta1
REDIRECT
altera la dirección IP de destino para enviarla a la propia máquina. En otras palabras, los paquetes generados localmente se asignan a la dirección 127.0.0.1. Es para redirigir paquetes locales. Si sólo desea redirigir el tráfico entre servicios en la máquina local, será una buena opción.
DNAT
es realTraducción de Direcciones de Red. Si desea que se modifique el destino de los paquetes destinados fuera del sistema local, es la mejor opción de las dos, ya que REDIRECT
no funcionará.
Respuesta2
REDIRECT
altera la dirección IP de destino para enviarla a la máquina como responde Warner@. Pero yo diría que la respuesta no es del todo correcta o es un poco engañosa.
REDIRECT
no es sólo para redirigir paquetes locales. Es realmente DNAT
en el que está implícita la dirección IP de destino a utilizar, 127.0.0.1 si es un paquete local o la dirección IP de la interfaz de la máquina en caso contrario, 192.168.5.1 en el caso del OP.
Entonces, en esta pregunta, no importa cuál sea el destino final, los paquetes deben llegar primero al proxy, por lo que REDIRECT
es perfecto.
Como REDIRECT
no es necesario especificar la dirección IP, simplemente 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 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.
Respuesta3
DNAT y REDIRECT son exactamente iguales, si desea enviar tráfico a la máquina local.
La documentación lo dice así: "[Redirección] es un caso especializado de NAT de destino llamado redirección: es una conveniencia simple que es exactamente equivalente a hacer DNAT a la dirección de la interfaz entrante".
https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.2