redireccionamientod e puertos con iptables
Miguel Oyarzo O.
admin en aim.cl
Lun Nov 9 18:00:50 CLST 2009
Rodrigo Valenzuela escribió:
> On Sun, 08 Nov 2009 16:16:48 +0100
> "Miguel Oyarzo O." <admin en aim.cl> wrote:
>
>> rvr en 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.
=====================================
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
=====================================
Más información sobre la lista de distribución Linux