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.
0sem comentários ainda