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.252 ]

Por: Reinaldo Borges em 23/10/2009


Configurar as rotas e regras



5) Configurar rotas e regras

Crie o arquivo do script. Uma sugestão para o local e nome do script: /etc/init.d/roteamento

O script:

#!/bin/sh

# Identificar se está ativando ou desativando o roteamento
case "$1" in
  start)
   CMD="A"
   CMD2="add"
   # Iniciar conexões
   /usr/bin/pon gvt1
   /usr/bin/pon gvt2
   /usr/bin/pon oi1
        ;;
  stop)
   CMD="D"
   CMD2="del"
   # Encerrar conexões
   /usr/bin/poff gvt1
   /usr/bin/poff gvt2
   /usr/bin/poff oi1
        ;;
esac

# ### DIRECIONAR PACOTES PARA AS TABELAS

# Para cada rede teremos uma ordem diferente de uso das conexões
# A regra usara a marcação de pacotes para dizer qual tabela usar
# Marca 1: rede 1
# Marca 2: rede 2
# Marca 3: rede 3

# Marca 1 - Ordem das conexões: GVT2 OI1 GVT1
ip rule $CMD2 fwmark 1 table GVT2 prio 31
ip rule $CMD2 fwmark 1 table OI1 prio 32
ip rule $CMD2 fwmark 1 table GVT1 prio 33

# Marca 2 - Ordem das conexões: GVT1 OI1 GVT2
ip rule $CMD2 fwmark 2 table GVT1 prio 51
ip rule $CMD2 fwmark 2 table OI1 prio 52
ip rule $CMD2 fwmark 2 table GVT2 prio 53

# Marca 3 - Ordem das conexões: OI1 GVT2 GVT1
ip rule $CMD2 fwmark 3 table OI1 prio 41
ip rule $CMD2 fwmark 3 table GVT2 prio 42
ip rule $CMD2 fwmark 3 table GVT1 prio 43

# ### MARCAR PACOTES DA REDE LOCAL ###
# Marcaremos apenas os pacotes que não forem direcionados para IPs da rede local (192.168.0.0/16)
# para evitar que o firewall tente entregar os pacotes da rede local pelas conexões de internet

# Pacotes da rede 1
iptables -t mangle -$CMD PREROUTING -i eth0 -s 192.168.251.0/24 -d ! 192.168.0.0/16 -j MARK --set-mark 1
# Pacotes da rede 2
iptables -t mangle -$CMD PREROUTING -i eth0 -s 192.168.252.0/24 -d ! 192.168.0.0/16 -j MARK --set-mark 2
# Pacotes da rede 3
iptables -t mangle -$CMD PREROUTING -i eth0 -s 192.168.253.0/24 -d ! 192.168.0.0/16 -j MARK --set-mark 3

# Demais pacotes (todos os que ainda não foram marcados) - Serão marcados como Rede 1
iptables -t mangle -$CMD PREROUTING -i eth0 -m mark --mark 0 -d ! 192.168.0.0/16 -j MARK --set-mark 1


# ### PACOTES GERADOS LOCALMENTE ###
# Os pacotes gerados no Firewall precisam ser direcionados para uma tabela
# Usaremos a tabela 1
iptables -t mangle -$CMD OUTPUT -s ! 192.168.0.0/16 -j MARK --set-mark 1

# Atualizar tabela de roteamento
ip route flush cache

6) Testar o script

Para iniciar o script, execute:

# /etc/init.d/roteamento start

Para encerrar o script (e as conexões), execute:

# /etc/init.d/roteamento stop

Faça o teste em pelos menos uma máquina de cada rede. Verifique qual a conexão utilizada para acessar a internet.

Após confirmar que cada uma das redes usa uma conexão diferente, derrube uma das conexões e veja se a próxima da lista assume a conexão.

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

Balanceamento de carga entre 2 placas de rede

Port Scan Attack Detector (PSAD) com iptables

Monitorando e bloqueando P2P com IPTABLES e IPP2P

Configurando firewall básico para compartilhar internet

Firewall bridge + iptables + layer7 + ipp2p

  
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