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. ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd