[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [postfix-es] problema con servidor de correo y 2 líneas ADSL



ESGLinux escribió:


El 12 de noviembre de 2009 13:30, Federico Alberto Sayd <fsayd@uncu.edu.ar <mailto:fsayd@uncu.edu.ar>> escribió:

    ESGLinux escribió:

        Buenos días,
        A raiz de un post que hice en esta lista sobre como tener el
        servidor de correo respondiendo con 2 ips distintas (por
        cierto, ya configuré el DNS como me indicaste y funciona like
        a charm como dirian los ingleses) me ha surgido el siguiente
        problema:

        Yo tengo un servidor linux que hace de gateway de la LAN
        conectados a las 2 líneas de ADSL. Mediante NAT envío todo el
        tráfico que me llega por cada uno de los interfaces al
        servidor de correo que está dentro de la red.

        Esto lo hago de la siguiente manera:

        iptables -A PREROUTING -i eth1 -p tcp -m tcp --dport 25 -j
        DNAT --to-destination 192.168.1.200:25
        <http://192.168.1.200:25> <http://192.168.1.200:25>
        iptables -A PREROUTING -i eth2 -p tcp -m tcp --dport 25 -j
        DNAT --to-destination 192.168.1.200:25
        <http://192.168.1.200:25> <http://192.168.1.200:25>


        La cuestión es que cuando el tráfico entra por la ip de eth1
        (correspondiente al proveedor 1 que siempre ha funcionado)
        todo funciona correctamente. El problema es que cuando entro
        por la ip de eth2 (correspondiente al proveedor 2) veo, con
        tcpdump, que el tráfico llega al servidor de correo pero luego
        la respuesta se pierde.
        Yo creo que el problema está en que el default gw del servidor
        es eth1:
        Kernel IP routing table
        Destination     Gateway         Genmask         Flags Metric
        Ref    Use Iface
        .....
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth1

        Si el problema es ese, que no estoy seguro al 100%, como puedo
        hacer para que el tráfico que entra por una interfaz, la
        respuesta salga por ese mismo interfaz?

        Un saludo y gracias por vuestra ayuda,
        ESG
        ------------------------------------------------------------------------



        _______________________________________________
        List de correo postfix-es para tratar temas del MTA postfix en
        español
        postfix-es@lists.wl0.org <mailto:postfix-es@lists.wl0.org>
        http://lists.wl0.org/mailman/listinfo/postfix-es

    Por lo que veo (puedo estar equivocado)

    El DNAT de iptables solo reescribe la dirección de destino y no la
    de origen, por lo tanto la ip de origen debe seguir siendo una ip
    pública de algún server smtp afurea en Internet. Cuando el paquete
    llega luego de la reescritura NAT tiene que volver y como debe
    volver a Internet utiliza por defecto el default gateway que está
    fijado a 192.168.2.1 (eth1). Pero si la conexión se realizó a la
    ip pública que natea a eth2 la conexión se corta porque es
    inconsistente. Deberías lograr que cuando entre un paquete por
    eth1 devuelva la respuesta por eth1 y que cuando entre por eth2 lo
    devuelva por eth2. Para ello me imagino que deberías utilizar
    marcado de paquetes con conecction tracking e iproute2.


Hola estoy de acuerdo contigo. Tras varias pruebas estoy seguro de que el problema es exactamente el que has descrito y que la solución es la que apuntas. El problema es que no consigo dar con ello.
He probado lo siguiente:

# marco el tráfico que entra por la interfaz 2 con la marca 3
iptables -t mangle -A PREROUTING -i eth2  -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -m mark --mark 3 -j ACCEPT

Creo una tabla de regla de enrutado para la marca 3:
# ip rule list
0:      from all lookup 255
32762:  from all fwmark 0x3 lookup trafico2
32766:  from all lookup main
32767:  from all lookup default

y creo el enrutado para la tabla trafico2:

#ip route list table trafico2
default via 192.168.3.1 dev eth2

Yo creo que conceptualmente esto es lo que hay que hacer pero, tras hacer eso dejo de poder salir por el interfaz eth2. No hago ni ping al gateway de esa subred.. :-(

No se si veis donde puedo estar cometiendo el error.

Un saludo y gracias por vuestra ayuda,
Un saludo





    Saludos
    _______________________________________________
    List de correo postfix-es para tratar temas del MTA postfix en español
    postfix-es@lists.wl0.org <mailto:postfix-es@lists.wl0.org>
    http://lists.wl0.org/mailman/listinfo/postfix-es


------------------------------------------------------------------------

_______________________________________________
List de correo postfix-es para tratar temas del MTA postfix en español
postfix-es@lists.wl0.org
http://lists.wl0.org/mailman/listinfo/postfix-es
Por lo que veo con iptables estarías marcando el tráfico que *entra* a tu interfaz, el problema es que lo que tu quiéres es que el tráfico de respuesta *que sale* de tu equipo sea ruteado hacia otra tabla (y de allí a otro gateway). Pierdes conectividad porque al llegar un paquete por eth2 lo ruteas de vuelta hacia eth2 y de ahí al segundo gateway en vez de dejarlo pasar al proceso local. O sea, lo que debes rutear es la respuesta de tu servidor, no los paquetes entrantes.

Creo que lo que tendrías que hacer (y digo creo porque no estoy del todo seguro) es marcar la conexión. Hay un target de iptables que se llama connmark que marca toda una conexión, quizás puedas mirar allí para ver si te sirve (http://security.maruhn.com/iptables-tutorial/x9125.html)

Saludos


Reply to: