O script tem a função de realizar o balanceamento e redundância através de 2 Links Speedy
(ip fixo). A idéia é deixar agendado a execução do script, por exemplo, a cada 30 minutos,
verificando se os links estão ativos.
Quando os dois links estiverem funcionando será realizado o balanceamento do acesso a
internet. Em caso de queda dos links será desativado o balanceamento, passando o acesso ao
link ativo.
# Criado em 11/07/2008 por Marcelo Ferreira(Ten Ferreira)-marceferreira@hotmail.com
# Alterado em 24/06/2009 por Marcelo Ferreira(Ten Ferreira)-marceferreira@hotmail.com
#
#!/bin/bash
###################
# Balanceamento e Redundancia com 2 Links de internet SPEEDY
######################
echo "Carregando modulos"
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_mark
modprobe ipt_MARK
#
echo "Habilitar FORWARD"
echo "1" > /proc/sys/net/ipv4/ip_forward
#
echo "Habilitar roteamento com 2 links"
echo "0" > /proc/sys/net/ipv4/conf/default/rp_filter
#
echo "Protecao Contra IP Spoofing"
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done
###################
echo "Definicao de variaveis"
GWSPEEDY1="200.204.157.1"
GWSPEEDY2="200.171.248.1"
GWLOCAL="192.168.10.2"
#
IPSPEEDY1="200.204.157.192"
IPSPEEDY2="200.171.248.36"
#
REDESPEEDY1="200.204.157.0/24"
REDESPEEDY2="200.171.248.0/24"
#
PLACASPEEDY1="eth2"
PLACASPEEDY2="eth1"
#
ROTADEL="route del default gw"
ROTAADD="ip route add"
TABLEFLUSH="ip route flush table"
#
APAGAROTAS=`
# GWSPEEDY2
route del -net 200.171.248.0 netmask 255.255.255.0 dev eth1
route add -net 200.171.248.0 netmask 255.255.255.0 gw 200.171.248.36 dev eth1
# GWSPEEDY1
route del -net 200.204.157.0 netmask 255.255.255.0 dev eth2
route add -net 200.204.157.0 netmask 255.255.255.0 gw 200.204.157.192 dev eth2
# REDELOCAL
route del -net 192.168.10.0 netmask 255.255.255.0 dev eth5
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.10.1 dev eth5
`
#
ROTAS2LINKS=`
# Removendo_rotas
$ROTADEL $GWSPEEDY1
$ROTADEL $GWSPEEDY2
# Limpando Rotas das tabelas definidas em /etc/iproute2/rt_tables
$TABLEFLUSH speedy1
$TABLEFLUSH speedy2
# Adicionando Rotas
$ROTAADD $REDESPEEDY1 dev $PLACASPEEDY1 src $IPSPEEDY1 table speedy1
$ROTAADD default via $GWSPEEDY1 dev $PLACASPEEDY1 table speedy1
$ROTAADD $REDESPEEDY2 dev $PLACASPEEDY2 src $IPSPEEDY2 table speedy2
$ROTAADD default via $GWSPEEDY2 dev $PLACASPEEDY2 table speedy2
# Limpando e adicionando rules as tabelas definidas em /etc/iproute2/rt_tables
ip rule del lookup speedy1
ip rule del lookup speedy2
ip rule add from $IPSPEEDY1 table speedy1
ip rule add from $IPSPEEDY2 table speedy2`
###################
echo "substituindo rotas"
$APAGAROTAS
###################
#A regra abaixo é responsável pelo balanceamento com os 2 links (GWSPEEDY1 e GWSPEEDY2)
$ROTAS2LINKS
echo "Adicionando Rota Default para balanceamento entre os links $GWSPEEDY1 e $GWSPEEDY2 ($PLACASPEEDY1+$PLACASPEEDY2)" > /tmp/rotas.log
$ROTAADD default scope global nexthop via $GWSPEEDY1 dev $PLACASPEEDY1 nexthop via $GWSPEEDY2 dev $PLACASPEEDY2
ip route flush cache #Limpa as rotas no cache
###################
# $?=0 link estah up ou $?=1 link estah down
echo "Teste de conexao aos links de internet"
ping 4.2.2.2 -c 2 -I $PLACASPEEDY1 ; TESTESPEEDY1=$?
ping 4.2.2.2 -c 2 -I $PLACASPEEDY2 ; TESTESPEEDY2=$?
###################
#A regra abaixo informa que nao ha conexao ou link
if [[ $TESTESPEEDY1 -eq 1 && $TESTESPEEDY2 -eq 1 ]]; then
echo "!!!!!!!!!Atencao nao ha conexao com a internet!!!!!!!!!" > /tmp/rotas.log
###################
#A regra abaixo é responsável pelo balanceamento soh com o link GWSPEEDY1
elif [[ $TESTESPEEDY1 -eq 0 && $TESTESPEEDY2 -eq 1 ]]; then
echo "Adicionando Rota Default para balanceamento soh com o link $GWSPEEDY1 ($PLACASPEEDY1)" > /tmp/rotas.log
$ROTADEL $GWSPEEDY1
$ROTADEL $GWSPEEDY2
$TABLEFLUSH speedy2
$ROTAADD default scope global via $GWSPEEDY1 dev $PLACASPEEDY1
ip route flush cache #Limpa as rotas no cache
###################
#A regra abaixo é responsável pelo balanceamento soh com o link GWSPEEDY2
elif [[ $TESTESPEEDY1 -eq 1 && $TESTESPEEDY2 -eq 0 ]]; then
echo "Adicionando Rota Default para balanceamento soh com o link $GWSPEEDY2 ($PLACASPEEDY2)" > /tmp/rotas.log
$ROTADEL $GWSPEEDY1
$ROTADEL $GWSPEEDY2
$TABLEFLUSH speedy1
$ROTAADD default scope global via $GWSPEEDY2 dev $PLACASPEEDY2
ip route flush cache #Limpa as rotas no cache
fi
[1] Comentário enviado por nox6000 em 30/08/2009 - 17:19h
Ola Marcelo Ferreira,
Eu sou um usuário de nivel basico para intermetiario do linux
já faço algumas coisas leguais no linux, mas não to conseguindo realizar o balanceamento entre dois links de internet
Minha situação:
Tenho um modem do velox 1MB de IP: 192.168.254.254
Tenho outro modem do velox 1MB de IP: 192.168.1.1
onde:
O primeiro modem é ligado na placa eth0 de ip: 192.168.254.1
O segundo modem é ligado na placa eth1 de ip: 192.168.254.2
e a terceira placa eth2 deve liberar o sinal de internet para a rede ela tm o ip 192.168.254.3
Bem o que eu desejo e receber os dois linkes em suas repectivas placas de rede e libera-lo pela eth2 de ip 192.168.254.3
Só Lembrando:
Não tenho ip fixos, tipo doda hora que estabelece a conecxão o modem ganha um ip diferente.
Utilizo o ubuntu desktop 9.04 tem como me passar o que devo fazer ou um artigo que me informe como fazer isso?
[4] Comentário enviado por ahdeerre em 28/10/2010 - 14:55h
Boa tarde amigo, obrigado pela dica, consegui fazer funcionar estou tento apenas um problema: não consigo distribuir para a rede interna.
Minhas configurações estão da seguinte maneira:
eth0= rede local
eth1= link 1
eth2= link 2
Tenho no arquivo de firewall.sh uma regra de cadeia de reenvio, porém essa regra me permite transmitir para a rede interna apenas um dos links (eth1 ou eth2). Se deixar configurado a eth1 nessa regra quando o link da eth2 assumir a rede interna não terá mais acesso a internet.
Poderia me dar uma ajuda de como fazer com que meu firewall passe para a rede interna tanto a eth1 quanto a eth2?
[5] Comentário enviado por juvaraide em 09/05/2012 - 13:30h
Boa tarde, marceferreira.
Possuo 3 interfaces:
- eth0 - link 1
- eth1 - link 2
- eth2 - Rede interna.
Tenho 2 adsl(bridge), quero fazer redundância da seguinte forma:
- Link 1 = principal
- Link 2 = secundário
Onde, se o link 1 cair, o link 2 irá assumir sem que os usuários percebam, e quando o link 1 voltar, ele assuma automaticamente deixando o link 2 de backup novamente.
Não quero fazer balanceamento dos links, apenas redundância.
Estou tentando usar seu script mas, da erro.
Carregando modulos
Habilitar roteamento com 2 links
Protecao Contra IP Spoofing
Definicao de variaveis
/etc/init.d/redundancia: line 23: eth0: command not found - coloquei GWSPEEDY1=ifconfig eth0 | grep end.: | awk '{print $3}'
/etc/init.d/redundancia: line 24: eth1: command not found - coloquei GWSPEEDY2=ifconfig eth1 | grep end.: | awk '{print $3}'
SIOCDELRT: No such process
SIOCADDRT: No such process
Usage: inet_route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
inet_route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]
[netmask N] [mss Mss] [window W] [irtt I]
[mod] [dyn] [reinstate] [[dev] If]
inet_route [-vF] add {-host|-net} Target[/prefix] [metric M] reject
inet_route [-FC] flush NOT supported
Usage: inet_route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
inet_route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]
[netmask N] [mss Mss] [window W] [irtt I]
[mod] [dyn] [reinstate] [[dev] If]
inet_route [-vF] add {-host|-net} Target[/prefix] [metric M] reject
inet_route [-FC] flush NOT supported
Error: an inet address is expected rather than "dev".
RTNETLINK answers: Invalid argument
Error: an inet address is expected rather than "dev".
substituindo rotas
Error: an IP address is expected rather than "dev"
Teste de conexao aos links de internet
PING 4.2.2.2 (4.2.2.2) from 192.168.1.2 eth0: 56(84) bytes of data.
From 192.168.1.2 icmp_seq=1 Destination Host Unreachable
From 192.168.1.2 icmp_seq=2 Destination Host Unreachable
--- 4.2.2.2 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1007ms
pipe 2
PING 4.2.2.2 (4.2.2.2) from 192.168.0.254 eth1: 56(84) bytes of data.
From 192.168.0.254 icmp_seq=1 Destination Host Unreachable
From 192.168.0.254 icmp_seq=2 Destination Host Unreachable
[6] Comentário enviado por pauloh_lopes em 17/12/2012 - 21:01h
cara, tenho 1 speedy de 4mb e 1 speedy de 8mb, fazendo esse script, quando um terminal meu fazer um download, ele vai fazer download mais rapido? vai unir os 2 speedys? obrigado