Conexões redundantes e com balanceamento de carga - Ubuntu 9.04

Como distribuir o tráfego da rede local por várias conexões de internet, dividindo por redes, e deixá-las redundantes (se uma cair, a outra assume todo o tráfego). Configuração feita em um Ubuntu Server 9.04.

[ Hits: 50.251 ]

Por: Reinaldo Borges em 23/10/2009


Personalizar script de conexão e desconexão



No meu caso as três conexões tinham IP fixo. Mesmo assim os scripts foram preparados para funcionar também com conexões com IP dinâmico.

Por isso parte da configuração é feita automaticamente quando a conexão é estabelecida.

3) Personalizar script de conexão

Assim que que uma conexão PPP é estabelecida, os scripts da pasta /etc/ppp/ip-up.d são executados em ordem alfabética. Se você está com uma instalação limpa, não terá problemas com a ordem desse script.

Crie um arquivo nessa pasta, com o nome que desejar:

#!/bin/sh -e
# This script is called with the following arguments:
#    Arg  Name                          Example
#    $1   Interface name                ppp0
#    $2   The tty                       ttyS1
#    $3   The link speed                38400
#    $4   Local IP number               12.34.56.78
#    $5   Peer  IP number               12.34.56.99
#    $6   Optional ``ipparam'' value    foo

# Cada conexão será a roda padrão em apenas uma das tabelas que criamos em /etc/iproute2/rt_tables

# Identificar qual tabela usar

case "$PPP_IFACE" in
  ppp1)
   TABELA="GVT1"
   REDE="1"
   ;;
  ppp2)
   TABELA="GVT2"
   REDE="2"
   ;;
  ppp3)
   TABELA="OI1"
   REDE="3"
   ;;
esac

# Acrescentar a rota para o gateway do provedor na tabela correta
ip route add $PPP_REMOTE dev $PPP_IFACE src $PPP_LOCAL table $TABELA

# Acrescentar a rota padrão na tabela correta
ip route add default via $PPP_REMOTE dev $PPP_IFACE table $TABELA

# Mascarar conexões de saída
# Todas os pacotes saindo por essa conexão terão seu IP de origem modificado, para usar o IP dessa conexão
iptables -t nat -A POSTROUTING -o $PPP_IFACE -s ! $PPP_LOCAL -j SNAT --to-source $PPP_LOCAL

# Desativar filtro de entrada
echo 0 > /proc/sys/net/ipv4/conf/$PPP_IFACE/rp_filter


# Conexões de entrada devem sair pela mesma rota de entrada
# Isso é necessário para evitar que, por exemplo, você tente acessar seu firewall por SSH
# pela conexão da GVT, e receba a resposta pela conexão da OI
iptables -t mangle -A OUTPUT -s $PPP_LOCAL -j MARK --set-mark $REDE


# Atualizar tabela de rotas
ip route flush cache

Esse script define a rota padrão para cada uma das conexões ADSL. Veja que a tabela é escolhida de acordo com o número da conexão ppp (ppp1, ppp2 ou ppp3). Por isso é importante que cada provedor/conexão tenha sempre o mesmo número.

4) Personalizar script de desconexão

Assim que que uma conexão PPP é encerrada, os scripts da pasta /etc/ppp/ip-down.d são executados.

Crie um arquivo nessa pasta, com o nome que desejar:

#!/bin/sh -e
# This script is called with the following arguments:
#    Arg  Name                          Example
#    $1   Interface name                ppp0
#    $2   The tty                       ttyS1
#    $3   The link speed                38400
#    $4   Local IP number               12.34.56.78
#    $5   Peer  IP number               12.34.56.99
#    $6   Optional ``ipparam'' value    foo

# Removendo a regra que mascarava o IP das conexões

iptables -t nat -D POSTROUTING -o $PPP_IFACE -s ! $PPP_LOCAL -j SNAT --to-source $PPP_LOCAL

# Removendo marcação de conexões de entrada
iptables -t mangle -D OUTPUT -s $PPP_LOCAL -j MARK --set-mark $REDE

Não é necessário remover a rota padrão das tabelas. Quando a conexão é encerrada, a rota é eliminada automaticamente.

IMPORTANTE: Lembre-se de dar permissão de execução para todos os scripts que você criar:

# chmod u+x /caminho/para/o/script

Página anterior     Próxima página

Páginas do artigo
   1. Introdução e preparação
   2. Personalizar script de conexão e desconexão
   3. Configurar as rotas e regras
   4. Início automático e conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Utilizando a ferramenta Iptstate

Shorewall, uma excelente opção para firewall Linux

Shorewall - Firewall passo a passo no Linux

Controlando 2 links de internet (roteados) em um gateway Linux com SQUID

Servidor de internet a rádio no Debian

  
Comentários
[1] Comentário enviado por grandmaster em 24/10/2009 - 08:21h

Sempre util.

---
Renato de Castro Henriques
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br

[2] Comentário enviado por xloko em 17/11/2009 - 13:51h

Olá! isso funciona no DEBIAN?

[3] Comentário enviado por zarreff em 29/05/2011 - 12:59h

Muito bom mesmo!

Mas se eu quisesse utilizar uma conexão para toda a rede, e manter uma outra apenas para conexão do servidor para internet.
Como eu faria?
Preciso utilizar DMZ no modem da outra conexão, mas não está funcionando.
O servidor não está se comunicando.

A solução seria mesmo o iproute2.

[4] Comentário enviado por reinaldoborges em 21/01/2013 - 09:53h

ERRATA!!!

No passo (3), antes das linhas:

# Atualizar tabela de rotas
ip route flush cache


Acrescente a seguinte linha:

ip rule add from $PPP_LOCAL/32 lookup $TABELA prio 10


E no passo (4), acrescente no final do arquivo as linhas:

ip rule del from $PPP_LOCAL/32 lookup $TABELA prio 10
ip route flush cache


Contribuir com comentário