Visão geral #
nftlb é um anagrama para Balanceador de carga nftables. Ele aproveita nftables, o firewall Linux de próxima geração que substituirá o iptables e está adaptado para funcionar como um balanceador de carga e distribuidor de tráfego completo.
nftlb atua como um gerenciador de regras nftables, projetado para criar serviços virtuais para balanceamento de carga nas Camadas 2, 3 e 4. Ele minimiza o número de regras necessárias usando estruturas de dados eficientes para corresponder pacotes. Além disso, ele inclui uma API JSON amigável, permitindo interação programática e automação contínuas. Essa flexibilidade facilita a integração do nftlb com suas ferramentas de verificação de integridade preferidas.
A filosofia central do nftlb é manter o caminho de dados dentro do kernel Linux, maximizando o desempenho, enquanto mantém o plano de controle e as verificações de saúde no espaço do usuário. Essa separação permite fácil personalização, compatibilidade aprimorada com a pilha Linux e a capacidade de ajustar o comportamento dinamicamente.
At RELIANOID, temos ampla experiência usando iptables e o framework Netfilter para construir balanceadores de carga ricos em recursos. Por meio dessa experiência, entendemos as limitações dessas abordagens — limitações que o nftlb supera por design.
Por que é nftlb necessário? #
O kernel Linux inclui um balanceador de carga interno chamado IPVS (comumente conhecido como LVS – Linux Virtual Server). Embora o IPVS seja uma solução de software estável e madura usada há anos, ele tem certas limitações:
- Tarefas mais adequadas ao espaço do usuário são tratadas no kernel, reduzindo a flexibilidade.
- Ele duplica a infraestrutura já fornecida pelo Netfilter.
- Ele depende de ferramentas suplementares, como o iptables, para recursos avançados como proxy transparente, multiporta ou suporte multiprotocolo.
- Ele suporta topologias SNAT (Source NAT) e DSR (Direct Server Return), mas não possui DNAT (Destination NAT).
O iptables-baseada em, por outro lado, tem suas próprias restrições:
- Cada serviço virtual requer várias regras, com pelo menos duas regras por backend, o que aumenta a complexidade linearmente à medida que os backends são adicionados.
- O processamento de regras sequenciais degrada o desempenho quando muitas regras estão envolvidas, o que é agravado pelo clássico problema de bloqueio do iptables.
- O suporte a IPv6 requer o uso de um comando separado, ip6tables, tornando a configuração complicada.
- Embora o iptables suporte balanceamento de carga DNAT e SNAT, ele não pode operar em topologias DSR.
nftlb, construído em nftables, aborda todas essas limitações com uma abordagem mais eficiente e moderna:
Suporta todas as topologias (SNAT, DNAT, DSR) e permite comutação perfeita entre elas.
Lida nativamente com tráfego multiporta e multiprotocolo.
Gerencia perfeitamente o tráfego IPv4 e IPv6 por meio de uma única interface.
Fornece todos os recursos de balanceamento de carga necessários por meio de uma interface unificada.
Usa a linguagem expressiva do nftables para construir um balanceador de carga completo com apenas duas regras, garantindo complexidade constante, independentemente do número de backends.
As correspondências são indexadas por serviço virtual, eliminando a necessidade de processamento de regras sequenciais.
Aproveita o subsistema RCU (Leitura-Cópia-Atualização), evitando problemas de bloqueio durante atualizações de regras.
Mantém o caminho de dados no espaço do kernel para desempenho ideal, mantendo a flexibilidade do espaço do usuário para o plano de controle.
Comprovadamente oferece desempenho 10x mais rápido que o LVS.
nftlb características #
O balanceador de carga nftlb atualmente oferece os seguintes recursos:
Topologias Suportadas:
- NAT de destino (DNAT), NAT de origem (SNAT), Retorno direto do servidor (DSR) e DNAT sem estado.
- Essas topologias permitem que o nftlb funcione em arquiteturas de rede de um e dois braços.
Suporte IPv4 e IPv6: Totalmente compatível com ambas as famílias de IP para ambientes de rede modernos.
Balanceamento de carga multicamadas:
- Camada 2: balanceamento de carga baseado em DSR.
- Camada 3: Balanceamento de carga baseado em IP e independente de protocolo.
- Camada 4: Suporte aos protocolos UDP, TCP e SCTP.
Suporte multiporta: Manipula intervalos de portas e listas para gerenciamento de tráfego flexível.
Vários serviços virtuais (fazendas): Suporta o gerenciamento de vários serviços virtuais simultaneamente.
Agendadores: Inclui agendamento baseado em peso, round robin, hash configurável (com base em IP, porta, MAC ou combinações) e hash simétrico.
Persistência Configurável (Afinidade): Oferece afinidade cliente-backend com um tempo limite baseado em IP, porta, MAC ou suas combinações.
Políticas de segurança:
- Listas brancas e negras específicas de serviço para filtragem de entrada.
- Filtragem de espaço do usuário, enfileiramento e detecção de quadros TCP falsos.
- Limites de conexões máximas estabelecidas, pacotes TCP RST por segundo e novas conexões por segundo.
Suporte Prioritário de Backend: Permite atribuir prioridades aos backends para distribuição otimizada do tráfego.
Gestão ao vivo: Gerenciamento programático de serviços virtuais e backends por meio de uma API JSON.
Segurança de serviços da Web: Autenticação por meio de uma chave segura para proteger o acesso à API.
Banco de testes automatizado: Inclui um ambiente de teste integrado para testes e validação simplificados.
Repositório git oficial: https://github.com/relianoid/nftlb
Changelog: https://www.relianoid.com/knowledge-base/nftlb/nftlb-changelog/