[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