[FUG-BR] Balanceamento de carga de saida (Usando programa especial).
Jorge Aldo
jorgealdojr em bol.com.br
Domingo Fevereiro 4 13:53:51 BRST 2007
Estou tentando resolver meu problema de balanceamento de carga de saida
usando um sistema servidor/discador. O sistema funciona da seguinte forma :
No servidor FreeBSD roda um daemon que aguarda por conecoes vindas de
clientes.
Nos clientes (windows) existem dois aplicativos no desktop "FreeGate
Connect" e "FreeGate Disconnect".
Quando um usuário executa freegate.connect, este programa se comunica
com o daemon no FreeBSD e envia-lhe o comando para conectar. Quando um
usuário executa freegate.disconnect, este programa se comunica com o
daemon no FreeBSD e envia-lhe o comando para desconectar.
Conectar e Disconectar significa ligar o ip do cliente windows à uma das
saidas disponiveis (uma das wans).
Meu problema é o seguinte :
Apesar de já ter lido várias documentacoes sobre IPFW/IPFW2 não consigo
determinar quais serão os comandos necessários para fazer essa ligação
desligação. O daemon servidor lida com quatro scripts, a saber :
/etc/freegate/startup.sh <- é executado quando o daemon é ativado
/etc/freegate/shutdown.sh <- é executado quando o daemon é desativado
/etc/freegate/login.sh <- é executado quando um usuario loga com o
aplicativo, recebe o ip do mesmo como parametro
/etc/freegate/logout.sh <- é executado quando um usuario desloga com o
aplicativo, recebe o ip do mesmo como parametro.
Existem vários arquivos/tabelas que mostram o estado atual do sistema :
/etc/freegate/links.conf <- contem a lista de todos os links WAN
disponíveis nesse gateway, com informações de banda passante total.
O formato desta tabela é bem simples :
<linkname>,<downlink>,<uplink>,<modemip>,<ifname>,<ifip>,<weight>
onde : <linkname> é o nome generico do link (por exemplo "velox1")
<downlink>, <uplink> são as taxas de descida e subida (ex : 100000000,
600000)
<modemip> é o ip do modem que esta conectado a esta interface (os modens
devem estar como routers) (ex : 10.1.1.1)
<ifname> o nome da interface como dada pelo freebsd (ex : rl0)
<ifip> o ip da interface dado pelo modem (deve-se configurar o dhcp do
modem para travar um ip a esta interface) (ex : 10.1.1.2)
<weight> é o "peso" deste link, representado por um numero entre 0 e 100
que determina a probabilidade (%) de um cliente ser ligado a este link.
(ex : 33)
/etc/freegate/activeips.tab <- contem uma lista de todos os ips logados
atualmente, esta lista é atualizada com o comando freegate.addip <ip> ou
freegate.removeip <ip>
O formato desta tabela é simples tambem :
<ipativo>, <link>
onde <ipativo> é o ip do cliente da LAN que esta ativo (ex : 192.168.0.10)
<link> é o numero do link (na lista de links.conf) a que este link esta
ligado
toda vez que um usuario loga, o daemon/servidor automaticamente chama
login.sh <ipdocliente>
e este script deve criar pipes e regras de nat para rotear a partir
dali, todos os pacotes do cliente por um dado link. Por default os
pacotes de todas as maquinas devem ser bloqueados, o cliente so navega
se rodar freegate.connect. Para ligar um cliente à um link, alem de
acrescentar uma rota <ipdocliente> via <ifname> é preciso tambem criar
um pipe limitando a banda do cliente à <downlink> / <numero de clientes
no link>.
A maior parte do sistema já está desenvolvida/pronta. Estou tendo
dificuldades apenas nesta parte do sistema.
Acho que um sistema assim solucionaria a dor de cabeca de muitas
pessoas. Por favor ajude !
Desde já agradeço.
Mais detalhes sobre a lista de discussão freebsd