redireccionamientod e puertos con iptables

Aldrin Martoq amartoq en dcc.uchile.cl
Vie Nov 6 00:55:58 CLST 2009


2009/11/5  <rvr en vtr.net>:
> El cuento es el siguiente, tengo un proveedor (Telmex) el cual vamos a dar
> de baja a fin de mes. Todo me funciona bien, mi red interna (usuarios y
> servidores) sales por mi linux con iptables, cuento corto, ningún problema.
> El proveedor nuevo instalo el cablerio nuevo y su aparato (obviamnete hay IP
> nueva GTD ) y ahí viene el problema.
> Acá alojamos varios sitios y mientras no se haga el cambio de todos los
> sitios a la IP nueva no podemos llegar y cambiar el enlace, por lo que monté
> otro equipo con Linux + iptables, y lo que quería hacer era redireccionar
> todas las peticiones al puerto 80 en la IP nueva hacia mi servidor apache.

> La ip interna del servidor web es 192.168.0.1, y el Linux + iptables nuevo
> tiene la 192.168.0.3., por lo que entre ellos se ven sin problemas. El
> problema viene cuando llega la petición a la IP nueva y la reenvía bien
> hacia adentro con una regla PREROUTING,

No no no: la _tabla_ es PREROUTING, probablemente estás usando DNAT
para redirigir a tu servidor en su IP interna.

> pero el server viejo 192.168.0.1 ve
> que le llego una peticion desde la IP nueva, puerto 80 y por ende trata de
> contestar usando el GW del proveedor viejo (gateway por defecto) , por lo
> que la conexión se queda esperando eternamente.

No no no: en realidad ve que la petición llega desde una IP de
internet (y el puerto origen no es 80). Si la IP de origen dice
internet, la respuesta se irá por TELMEX en vez de volver por la IP
interna, y por eso el DNAT no funciona como una espera... Una solución
para tu configuración es cambiar la IP de origen... algo como esto:

iptables -N MITABLA
iptables -A PREROUTING -p tcp --dport 80 -j MITABLA
iptables -A PREROUTING -p tcp --dport 25 -j MITABLA
[... etc con el resto de los servicios ...]

iptables -A MITABLA -j DNAT --to-destination 192.168.0.1
iptables -A MITABLA -j SNAT --to-source 192.168.0.3


El problema de esta configuración es que todo el tráfico parecerá
venir desde el linux con IP 192.168.0.3 en GTD, para efecto de los
logs y tal vez de tu aplicación; pero la conectividad funcionará.



> Cuál es el mejor enfoque para tratar este problema? Creo que no me enrede
> mucho

Yo sacaría el linux extra y agregaría las IP's a tu conexión nueva con
un switch. Algo como esto:

GTD -> switch
TELMEX -> switch
switch -> SERVIDOR

y en el servidor,
eth0 -> IP de GTD
eth0:1 -> IP de TELMEX
ruta default -> la de GTD.

Cuando se muera TELMEX, le quitas las IP correspondientes.

-- 
Aldrin Martoq
http://aldrin.martoq.cl/



Más información sobre la lista de distribución Linux