Há algum tempo coloquei 2 links ADSL aqui em casa e criei o script abaixo para fazer o balanceamento entre eles. Hoje dei um geral no script e lembrei que nunca havia publicado ele por aqui. Então, lá vai:
#!/bin/bash
#
# Script para fazer o balanceamento de links ADSL
# Para adicionar mais um link é so adicionar um item
# às variaveis IFACES, IPS, GATEWAYS, NETWORKS,
# WEIGHTS e NAMES
#
# É extremamente importante manter a ordem dentro das
# variáveis. O primeiro campo da variável "IFACES"
# corresponde ao primeiro campo da variável "IPS"
# e por aí vai.
#
# Ultima modificacao: 22/11/2009
# Hugo Doria
# Interfaces de rede
IFACES=("eth1" "eth2" "eth3")
# IP das interfaces de rede. Isto NÂO é o ip do modem.
# É extremamente importante que siga a mesma ordem das interfaces
# listadas na variável IFACES
IPS=("192.168.254.2" "192.168.254.10" "192.168.254.18")
# IP dos Gateways. Geralmente esse é o ip do Roteador ou do modem ADSL
GATEWAYS=("192.168.254.1" "192.168.254.9" "192.168.254.17")
# IP das redes que o modem e as interfaces pertencem
NETWORKS=("192.168.254.0/29" "192.168.254.8/29" "192.168.254.16/29")
# Peso de cada link. Se os links tiverem a mesma banda, entao deve-se
# colocar 1 para todos. Se um link for maior que outro, entao coloque
# os pesos correspondentes
WEIGHTS=("1" "1" "1")
# Nome dos links. Usado para criar um alias da conexão
NAMES=("velox1" "velox2" "velox3")
#-----------------------------------------------
# NÂO ALTERE A PARTIR DAQUI
#-----------------------------------------------
# Comando padrão de adicionar rota
ROUTEADD="ip route add default scope global"
# Comando para deletar uma roda
ROUTEDEL="`which route` del default gw"
####################################################
# Deletando as rotas
####################################################
for (( X=0; X < ${#IPS[@]}; X++ )); do
echo "Deletando as rotas para ${IPS[$X]}"
${ROUTEDEL} ${IPS[$X]}
done
#######################################################
# Limpando as rotas
#######################################################
for (( X=0; X < ${#IPS[@]}; X++ )); do
echo "Limpando as rotas da tabela ${NAMES[$X]}"
ip route flush tables ${NAMES[$X]}
done
#######################################################
# Aplicando as regras das redes
#######################################################
for (( X=0; X < ${#IPS[@]}; X++ )); do
echo "Aplicando a regra da rede ${NETWORKS[$X]}"
ip route add ${NETWORKS[$X]} dev ${IFACES[$X]} src ${IPS[$X]} tables ${NAMES[$X]}
done
#######################################################
# Adicionando as regras
######################################################
for (( X=0; X < ${#IPS[@]}; X++ )); do
echo "Adicionando a regra do ${IPS[$X]} na tabela ${NAMES[$X]}"
ip rule add from ${IPS[$X]} table ${NAMES[$X]}
done
##########################################################
# Regra padrão e limpeza do cache
##########################################################
for (( X=0;X < ${#IPS[@]}; X++ )); do
ROUTEADD="${ROUTEADD} nexthop via ${GATEWAYS[$X]} dev ${IFACES[$X]} weight ${WEIGHTS[$X]}"
done
echo "Adicionando a regra padrao"
${ROUTEADD}
echo "Limpando o cache"
ip route flush cache
# Fim do script
O script serve para mais de dois links ADSL. Para adicionar mais um link é so adicionar um item às variaveis IFACES, IPS, GATEWAYS, NETWORKS, WEIGHTS e NAMES. Lembre-se sempre de manter a ordem dos itens dentro das variáveis.
Recent Comments