[GTER] Balanceamento de entrada sem AS

alfredo junior aljr at lbr.com.br
Mon Jan 31 07:42:44 -02 2011


Em 28-01-2011 10:54, spiderslack escreveu:
> Ola pessoal.
>
> Tive a experiência de confrontar uma situação nunca passada. Vou 
> tentar explicar a infraestrutura conforme abaixo:
>
> ISP 1 --------------|  roteador |_________|  Servidor |
> ISP 2 --------------|  pfsense  |             |     web    |
>
> Tenho o rota padrão configurada para o ISP2, porém temos o servidor 
> web publicado nos 2 endereços tanto do ISP 1 como ISP 2. Com isso 
> quando um fluxo entra pelo ISP 1 volta pelo ISP 1 se o fluxo entra 
> pelo ISP2 volta pelo ISP2 e caso uma conexão se origine no servidor 
> web saia pela rota default. Isso e conseguido no FreeBSD com o comando 
> binat, abaixo tem uma descrição de como funciona da documentação oficial.
>
> http://www.openbsd.org/faq/pf/nat.html#binat
>
> A minha pergunta é existe algum outro SO/equipamento que faça isso? Eu 
> testei com um cisco não funciona mesmo eu fazendo nat um para um, a 
> volta sempre sai pela rota default. Linux também mesmo marcando 
> pacotes com iproute. Consigo marcar a entrada mas quando a conexão 
> volta como vou saber por qual conexão ela entrou, talvez via tabela de 
> estados, mas pelo menos por meu conhecimento não ser possivel. Então 
> existe alguma configuração que consiga esse comportamento do comando 
> binat ?
>
> Att.
>
> __________________________________________________
> Fale com seus amigos  de graça com o novo Yahoo! Messenger 
> http://br.messenger.yahoo.com/ --
> gter list    https://eng.registro.br/mailman/listinfo/gter
>

No linux faço com o script abaixo, é só adequar as variáveis:

IP1 = Faixa de ip do link1.
GW1 = Gateway do link1.

IP2= Faixa de ip do link2.
GW2 = Gateway do link2.

-------------------------------------8<---------------------------------------------
#!/bin/sh
#/*
# *  Copyright (C) 2002 - 2011 Alfredo Júnior <aljr at lbr.com.br>
# *
# *  This program is free software; you can redistribute it and/or modify
# *  it under the terms of the GNU General Public License as published by
# *  the Free Software Foundation; either version 2 of the License, or
# *  (at your option) any later version.
# *
# *  This program is distributed in the hope that it will be useful,
# *  but WITHOUT ANY WARRANTY; without even the implied warranty of
# *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# *  GNU General Public License for more details.
# *
# *  You should have received a copy of the GNU General Public License
# *  along with this program; if not, write to the Free Software
# *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# */

newtable()
{
       /sbin/ip route flush table 3$1
       /sbin/ip rule  del   fwmark $1 table 3$1
       /sbin/ip rule  add   fwmark $1 table 3$1 prio 3$1
       /sbin/ip route show  table main | grep -EV '169.254.0.0' \
                   | grep -Ev '^default' | grep -Ev 'nexthop'\
                   | while read ROUTE ; do
                          /sbin/ip route add table 3$1 $ROUTE
                   done
}

IP1="200.200.200.200/29"
GW1="200.200.200.201"

IP2="189.189.189.189/29"
GW2="189.189.189.189"

/sbin/ip route del default

iptables -A PREROUTING  -t mangle -m mark ! --mark 0 -j ACCEPT
iptables -A PREROUTING  -t mangle -j CONNMARK --restore-mark
iptables -A PREROUTING  -t mangle -d $IP1 -j MARK --set-mark 0x1
iptables -A PREROUTING  -t mangle -d $IP2 -j MARK --set-mark 0x2
iptables -A PREROUTING  -t mangle -j CONNMARK --save-mark

# Definindo a rota alternativa 1
newtable 1
/sbin/ip route add default       table 31 via $GW1 proto static
/sbin/ip rule  del from $IP1     table 31 prio 20
/sbin/ip rule  add from $IP1     table 31 prio 20


# Definindo a rota alternativa 2
newtable 2
/sbin/ip route add default       table 32 via $GW2 proto static
/sbin/ip rule  del from $IP2     table 32 prio 20
/sbin/ip rule  add from $IP2     table 32 prio 20

case $1 in

   1)
# Definindo saida pela rota 1
   /sbin/ip route add default via $GW1 proto static;;

   2)
# Definindo saida pela rota 2
   /sbin/ip route add default via $GW2 proto static;;

   *)
# Definindo saida pela rota principal 1 e 2

     /sbin/ip route add default \
     nexthop via $GW1 weight 2 \
     nexthop via $GW2 weight 4;;

esac

# Limpando o cache.
/sbin/ip route flush cache
-------------------------------------8<---------------------------------------------



More information about the gter mailing list