Bom dia pessoal, Eu estou com um pequeno e importante problema com relacao ao uso de load balance com PF. Atualmente uso o PF com funcionabilidade de Load Balance em substituto a Switchs de load balance Layer 3, sendo alguns cenarios com aplicacoes que compartilham as sessoes e outras que nao compartilham. Vamos ao problema:
AMBIENTE: Basicamente o ambiente de exemplo e' 1 servidor com PF e 3 servidores com Web Server que nao compartilham sessao. table <lb> { 10.0.0.1, 10.0.0.2, 10.0.0.3 } rdr on xl0 inet proto tcp from any to IP_PUBLICO port 80 -> { <lb> } round-robin sticky-address pass in quick log on xl0 proto tcp from any to <lb> port 80 flags S/SA modulate state (src.track 1800) A opcao "sticky-address" faz com que o PF sempre que redirecione a conexao para um servidor, crie uma entrada no "Source" (source-track "pfctl -vs Source"), e que durante a permanencia desta source ele encaminhe outras requisicoes vindas do mesmo IP para o mesmo servidor web. A permanencia no "Source", por padrao e' ate' a ultima state existir. Para que nos incrementamos este valor, devemos alterar o limit "src.track" (set timeout src.track), eu fiz isso atraves da regra que libera a conexao. Resumindo: O servidor vai fazer load balance entre os servidores na tabela <lb>, e manter o mesmo servidor para o mesmo cliente em ate 1800 segundos (30 min) depois da ultima state excluida. PROBLEMA: Tudo isso descrito acima funciona perfeitamente, o problema comeca quando temos que eliminar um IP do load balance. O servidor 10.0.0.2, esta down e precisamos tira-lo do load balance, neste caso executamos: pfctl -t lb -T del 10.0.0.2 Neste caso tecnicamente o load balance ficara apenas entre os IPs 10.0.0.1 e 10.0.0.3, porem o problema e' que mesmo nao estando na tabela <lb>, as requisicoes de clientes que ja estavam na tabela Source apontando para o IP 10.0.0.2 vao continuar sendo redirecionadas para ele 10.0.0.2 ate expirar os timeout do src.track (no meu caso 30 min), ou rodando o comando "pfctl -F Source", porem neste ultimo caso perdendo TODAS as referencias de "sessoes" deste e de outros load balance e source-tracks, neste firewall. POSSIVEIS SOLUCOES: Infelizmente as unicas solucoes que consegui visualizar, e' alterando o codigo do PF, vamos as sugestoes: 1) Criar algo similar a "pfctl -k" de states para Source. Neste caso na hora de tirar um servidor do load balance, executariamos: pfctl -t lb -T del 10.0.0.2 pfctl -PARAMETRO_NOVO 10.0.0.2 2) Fazendo o sticky-address, checar antes de redirecionar se o IP esta ainda nas opcoes de load balance (no meu caso se esta na tabela <lb>). Alguem conhece outra alternativa ? Algum hacker de PF se habilita ? hehehe Abraços -- Diego Linke Public Key: http://www.gamk.com.br/gamk.asc ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd