[Resolvido] Load Balancing vs Multiplas VLAN's



  • Olá pessoal,

    Antes de mais nada peço desculpas se o tópico for repetido, confesso que pesquisei bastante e perdi muitos fios de cabelo e algumas horas de sono antes de criar este tópico :D

    Tenho um servidor com pfSense 2.1-RELEASE (amd64).

    A máquina tem 4 NICS físicas, sendo:

    WAN1 - link dedicado com ip fixo
    WAN2 - link dedicado com ip fixo
    LAN
    VLANS - sem ip atribuído, apenas uma interface para as VLAN's.

    Criei interfaces para cada uma das VLAN's que preciso de acesso, sendo 6 no total (3, 4, 5, 6, 7 e 9), que basicamente consistem em redes MPLS de clientes onde NÃO existe saída para a internet e que precisamos de acesso pela LAN apenas para gerência e monitoramentos diversos.

    Algumas VLAN's tem redes adicionais e as rotas foram todas criadas em System/Routing/Routes. Os gateways estão todos configurados e acessíveis  por qualquer máquina da LAN sem problemas e tudo isso funciona às mil maravilhas com o pfSense rodando em modo "default", isto é, com a saída pela internet pela WAN (gateway default) por dias e sem problemas, os meus problemas surgem quando tento ativar o LOAD BALANCE.

    Segui um dos tutoriais de ativação de Load Balance que consiste em criar o grupo em System/Routing/Groups, e adicionando os membros que quero (WAN e WAN2). Feito isto, ambos ficam online na respectiva página (Status/Gateway/Gateway Groups).

    Quando vou em Firewall/Rules/LAN, troco o gateway de saída para "LoadBalance" e aplico, minhas rotas para a internet funcionam às mil maravilhas, tudo funciona exatamente como deveria a carga é distribuida corretamente entre os links da WAN, mas perco totalmente o acesso às VLAN's. No traceroute vejo que as rotas para qualquer endereço/redes das minhas VLAN's tenta sair por um dos gateways das WAN's, obviamente sem sucesso.

    O que consegui entender é que ao ativar o Load Balance todas as minhas rotas estáticas são "ignoradas". Uma forma que encontrei de resolver paliativamente isso foi simplesmente duplicar as regras de rotas estáticas em Firewall/Rules/LAN de modo a chegar em cada rede VLAN através de seu respectivo gateway antes de sair para a internet, isso faz com que tudo funcione bem por um tempo (minutos/horas), até algumas conexões ou rotas começarem a "dropar": Chat do Gmail fica intermitente, cliente de servidor Jabber que necessita reconexão, delay para carregar uma página da internet e por aí vai, um freeze geral e que dura cerca de 1 segundo, por assim dizer.

    Nos logs não consigo encontrar absolutamente nada de anormal e por isso não consigo identificar qual é o problema, a única confirmação que tenho são as quedas na conexão durante o uso e por conseqüência o reflexo disso nos gráficos (RRD Graphs/System/States indo lá pra baixo e voltando), a indisponibilidade realmente dura menos de 1 segundo, mas é suficiente pra incomodar e perceber que não pode ser algo normal, inclusive a interface do pfSense chega a ficar indisponível momentaneamente e não (re)carrega.

    No cenário acima também tenho uma VPN IPSec (Lan2Lan) que fica funcional (com ou sem load balance ativo) e a ponta remota tem um link com IP Dinâmico. Em consultas ao log (Status: System logs: IPsec VPN) imediatamente após uma dessas "micro quedas" vejo o registro de uma queda de conexão por mudança de IP (que não ocorreu naquele momento), mas indicando que (em virtude ou como causa disso) a conexão tinha sido restabelecida. Isso poderia ter alguma ligação?…. Efetivamente naquele momento cheguei a notar perdas de pacotes no tunnel IPSec, da mesma forma como para outros destinos da internet ou em alguma das VLAN's então não sei se o problema poderia estar por aqui ou não...

    O servidor tem boa capacidade de processamento e boa quantidade de memória e tenho certeza que este não seria problema... nos gráficos a única coisa que consigo perceber durante esse comportamento anormal são os processos indo lá pra cima de forma abrupta, e nada além disso.

    Alguém passou por algo parecido? Essa necessidade de (re)criação de rotas estáticas no firewall com o Load Balance ativado é normal? Existe outra forma mais simples de resolver isso?

    Qualquer ajuda ou idéia é muito bem vinda, e peço desculpas se tiver sido muito confuso :)

    []'s



  • Oi neobr,

    Pelo que li e testei você não deve adicionar rotas estáticas para redes atribuídas a qualquer interface do firewall(que
    seria o teu caso) pode te trazer problemas, então acredito que vc está fazendo certo criando em firewall > rules mas deve
    apagar as que criou em System > Static Routes.

    A questão de estar dando problema após ativar o loade balance pode estar relacionada a posição das tuas regas, o que você
    está tentando acessar pode estar caindo em um outra regra que não a correta e está roteado para a internet.



  • @FabianVitali:

    Oi neobr,

    Pelo que li e testei você não deve adicionar rotas estáticas para redes atribuídas a qualquer interface do firewall(que
    seria o teu caso) pode te trazer problemas, então acredito que vc está fazendo certo criando em firewall > rules mas deve
    apagar as que criou em System > Static Routes.

    A questão de estar dando problema após ativar o loade balance pode estar relacionada a posição das tuas regas, o que você
    está tentando acessar pode estar caindo em um outra regra que não a correta e está roteado para a internet.

    Olá Fabian,

    Agradeço a ajuda, há poucos instantes segui a recomendação recriando todas as minhas regras em firewall > rules e removendo as que estavam em System > Static Rules e ativando o Load Balance novamente, por hora está tudo ok.

    Outra duvida que tive: Na parte de  System > Gateways antes eu havia deixado monitorando um IP aleatório (geralmente um gateway remoto nas MPLS) para monitorar a saúde do link (ou pelo menos ultima milha) mas quando os problemas de instabilidade surgiram deixei monitorando apenas o roteador local em cada um dos links, isso poderia influenciar nas quedas? Faria diferença um "Disable Gateway Monitoring" talvez ?

    No mais, vou ver como fica nas próximas horas e atualizo a thread na seqüência.

    []'s



  • Oi neobr,

    Com certeza vai influenciar, se você colocar como monitor dos links teus roteadores teus links podem estar com problema de alta latência ou perda de pacotes e seu monitor não vai conseguir detectar pois o ip que ele está pingando provavelmente não vai estar com alta latência nem perda de pacotes, isso fará que o link com problemas não seja removido do grupo de roteadores e o pfsense continue encaminhado pelo link down parte do teu tráfego.

    Recomendo que use como monitor ips que tenham latência parecida tipo 8.8.8.8 e 8.8.4.4.

    Monitore pelo seu RRD Graphs > Quality para poder ver como são as latências de seus links e poder ajustar de forma correta as opções avançadas do monitor.

    Se teus links forem de velocidades diferentes também aconselho ajustar o Weight nas opções avançadas do monitor, pois vamos supor que você tenha um link de 5Mb e um de 10Mb não faz sentido balancear de forma igual a carga entre links com velocidades tão diferentes, o correto seria usar mais o de 10Mb!



  • @FabianVitali:

    Oi neobr,

    Com certeza vai influenciar, se você colocar como monitor dos links teus roteadores teus links podem estar com problema de alta latência ou perda de pacotes e seu monitor não vai conseguir detectar pois o ip que ele está pingando provavelmente não vai estar com alta latência nem perda de pacotes, isso fará que o link com problemas não seja removido do grupo de roteadores e o pfsense continue encaminhado pelo link down parte do teu tráfego.

    Recomendo que use como monitor ips que tenham latência parecida tipo 8.8.8.8 e 8.8.4.4.

    Monitore pelo seu RRD Graphs > Quality para poder ver como são as latências de seus links e poder ajustar de forma correta as opções avançadas do monitor.

    Se teus links forem de velocidades diferentes também aconselho ajustar o Weight nas opções avançadas do monitor, pois vamos supor que você tenha um link de 5Mb e um de 10Mb não faz sentido balancear de forma igual a carga entre links com velocidades tão diferentes, o correto seria usar mais o de 10Mb!

    Entendido!

    Em System: Gateways tenho cadastrados 11 gateways no total, desses, apenas 2 tem acesso à internet "normal", que foram os que utilizei para o grupo Load Balance, como ambos os links são do mesmo provedor e de mesma velocidade, então imagino que não precise mexer no Weight delas, certo?

    A pergunta que fiz foi mais sobre os outros 9 gateways restantes: A maioria delas são de MPLS diversas sem conexão à internet, então a necesssidade principal é saber se elas estão "online" apenas. Como tenho servidores específicos para este monitoramento, teoricamente isto seria redundante, e caso isso possa vir a ter alguma influência/culpa nas "pipocadas" quando o Load Balance está ativo, posso deixar o monitoramento de gateways desabilitado para estes links sem problemas.

    No mais, já estou com o Load Balance ativo há cerca de 1h30 sem problemas até o momento, se continuar assim, seu "palpite" inicial estava certo :)

    []'s



  • Correto, se são de mesma velocidade não teria motivo para alterar a prioridade.

    Na minha opinião não acredito que isso seria o motivo das quedas, neste caso eu usaria desabilitado.



  • @neobr:

    Quando vou em Firewall/Rules/LAN, troco o gateway de saída para "LoadBalance" e aplico, minhas rotas para a internet funcionam às mil maravilhas, tudo funciona exatamente como deveria a carga é distribuida corretamente entre os links da WAN, mas perco totalmente o acesso às VLAN's. No traceroute vejo que as rotas para qualquer endereço/redes das minhas VLAN's tenta sair por um dos gateways das WAN's, obviamente sem sucesso.

    Só acrescentando a resposta do FabianVitali.

    Se você criou uma regra forçando um gateway x ou y, o pacote não vai passar pelo roteamento da máquina, o pacote simplesmente é "empurrado" para o gateway.

    Uma dica simples é criar um alias com todas as suas redes locais e na regra onde está o gateway substitua o destination any por (not) alias_redes_internas.

    Desta forma pacotes de e para a rede local usarão a tabela de roteamento criada.



  • @FabianVitali:

    Correto, se são de mesma velocidade não teria motivo para alterar a prioridade.

    Na minha opinião não acredito que isso seria o motivo das quedas, neste caso eu usaria desabilitado.

    Fabian,

    Acredite se quiser, não sei exatamente se o problema era entre a duplicidade de regras estáticas e regras de firewall (Firewall > Rules), mas a priori consegui resolver o problema removendo também o monitoramento de gateways.

    A confirmação disso surgiu após a reinicialização de um switch de minha rede que por coincidência também era o gateway para uma rota, quando o switch parou de responder ping, simultaneamente o pfSense "pipocou", após a remoção do monitoramento do gateway, o switch foi novamente reiniciado e o problema não se repetiu mais. 12h depois e o equipamento está funcionando normalmente.

    @marcelloc:

    @neobr:

    Quando vou em Firewall/Rules/LAN, troco o gateway de saída para "LoadBalance" e aplico, minhas rotas para a internet funcionam às mil maravilhas, tudo funciona exatamente como deveria a carga é distribuida corretamente entre os links da WAN, mas perco totalmente o acesso às VLAN's. No traceroute vejo que as rotas para qualquer endereço/redes das minhas VLAN's tenta sair por um dos gateways das WAN's, obviamente sem sucesso.

    Só acrescentando a resposta do FabianVitali.

    Se você criou uma regra forçando um gateway x ou y, o pacote não vai passar pelo roteamento da máquina, o pacote simplesmente é "empurrado" para o gateway.

    Uma dica simples é criar um alias com todas as suas redes locais e na regra onde está o gateway substitua o destination any por (not) alias_redes_internas.

    Desta forma pacotes de e para a rede local usarão a tabela de roteamento criada.

    Obrigado pela dica Marcello,

    Por hora consegui resolver o problema em definitivo criando as regras em Firewall > Rules > LAN para cada uma das redes que preciso de acesso, caso surjam outros problemas vou tentar uma regra de negação como você sugeriu. Esse esse era um tipo de regra que eu não havia pensado em fazer, excelente.

    Quando fiz o deploy inicial do servidor, coloquei monte pacotes adicionais tais como Squid (transparente), Lightsquid, NTOP, etc e acabei removendo-os um a um imaginando que o problema na realidade fosse (quem sabe) por falta de recursos no servidor, o que aparentemente não era…. Nas próximas horas vou colocá-los novamente e deixar o servidor em "quarentena". Caso surjam problemas (novos ou antigos), recorro aos amigos :D

    Abraços à todos e obrigado pela ajuda!