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í ...
REDIRECT
sí 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.REDIRECT
no es solo para redirigir paquetes locales. Realmente esDNAT
en 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
REDIRECT
es perfectamente adecuado.Como
REDIRECT
no necesita especificar la dirección IP, solo tomará la correcta, tiene algunas ventajas sobreDNAT
: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.
fuente