(SOLUCIONADO) Re: redireccionamientod e puertos con iptables
Rodrigo Valenzuela
rvr en vtr.net
Mar Nov 10 23:29:58 CLST 2009
On Mon, 09 Nov 2009 22:00:50 +0100
"Miguel Oyarzo O." <admin at aim.cl> wrote:
>
> Rodrigo Valenzuela escribió:
> > On Sun, 08 Nov 2009 16:16:48 +0100
> > "Miguel Oyarzo O." <admin at aim.cl> wrote:
> >
> >> rvr at vtr.net escribió:
> >>> Estimados:
> >>>
> >>> 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, 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.
> >>>
> >>> Cuál es el mejor enfoque para tratar este problema? Creo que no me
> >>> enrede mucho
> >>>
> >>> Gracias!!!
> >>
> >> Es mas facil de lo que piensas (no requieres redirigir puertos)
> >>
> >> 1) Agrega una nueva interfaz de red a tu maquina y ponle la IP de tu
> >> nuevo proveedor (tendras 2 IP, pero un solo GW, el de tu antiguo ISP)
> >> entonces,
> >> 2) mediante el comando "ip" crea una segunda tabla de rutas (TABLAX) que
> >> tenga el gateway nuevo o el que tu quieras
> >>
> >> usa esto si quieres:
> >> #ip route flush table TABLAX
> >> #ip route show table main | grep -Ev ^default | while read ROUTE ; do
> >> $RUTA table TABLAX $ROUTE ; done
> >> #ip route add default dev eth1 via $GW_GDT table TABLAX
> >>
> >> Esto te creara una nueva tabla de rutas llamada TABLAX.
> >>
> >> 3) usando iptables --set-mark y la tabla "mangle" marca cada paquete que
> >> entre por esa nueva intefaz, con un numero X
> >>
> >> 4) Asocia todos los paquetes marcados con X a la nueva tabla TABLAX
> >> Algo como #ip rule add fwmark X table TABLAX
> >>
> >> Es todo, el kernel hara lo demas, peticiones por la interfaz vieja se
> >> iran por la tabla de rutas default "main" (TELMEX) y peticiones que
> >> entren por la nueva interfaz se iran por la tabla de rutas TABLAX (GTD).
> >
> >
> > Exactamente esa es la solución que me interesó en una primera instancia pero me surgieron muchas dudas, por lo que empecé a leer más, espero tener más tiempo en la semana para centrarme en esto.
> >
> > La duda que tenía es que según este enfoque mi servidor tendría que estar expuesto directamente a inet, y lo que tengo en la oficina es un tarro que hace de FW delante de mi red. De hecho por acá estoy partiendo http://linux-ip.net/html/adv-multi-internet.html
> >
> >> Suerte!
> >
> > y mucha lectura, gracias!!
>
>
> En realidad el tema de si las IPs son publicas o privadas es irrelevante
> en esta solucion. El trafico entrará por una u otra interfaz y eso es lo
> que mangle marcara y el kernel re-enrutará al gw deseado.
Lo probé y así fue, excelente solución pero no es lo que implementaré ya que al final lo hice primero con iptables, además que es una solución temporal no más. Eso lo voy a tratar después cuando veamos el tema de la conexión redundante ;)
Al final quedó así
# HTTP 10.0.0.1
$IPT -t nat -A PREROUTING -d $GTD_IP -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1
$IPT -t nat -A POSTROUTING -o eth3 -p tcp -j SNAT --to-source 10.0.0.3
#MAIL
$IPT -t nat -A PREROUTING -d $GTD_IP -p tcp --dport 25 -j DNAT --to-destination 10.0.0.2
$IPT -t nat -A PREROUTING -d $GTD_IP -p tcp --dport 993 -j DNAT --to-destination 10.0.0.2
Por su puesto que hay que habilita el bit de reenvío en el kernel
Como se comentó anteriormente esta solución llena los logs del apache con peticiones "locales" obviamente, así que ojo para el que implemente algo parecido.
Gracias a todos!!!
saludos
>
>
> =====================================
> Miguel A. Oyarzo O.
> Ingeniería en Redes y Telecomunicaciones
> Austro Internet S.A. & INALAMBRICA S.A.
> Teléfono: [+05661] 710030
> Punta Arenas - Chile
> Linux User: # 483188 - counter.li.org
> =====================================
>
>
>
>
--
Rodrigo Valenzuela <rvr at vtr.net>
Más información sobre la lista de distribución Linux