Dataplane XDP/eBPF#
O dataplane roda dentro do driver da placa de rede (XDP), antes da pilha de rede do Linux. Isso elimina a maior parte do custo por pacote e permite tradução em velocidade de linha com poucas CPUs. É carregado e gerenciado automaticamente pelo cgnatd, nas interfaces definidas em CGNAT_NIC_INTERFACES, em modo nativo (ou genérico, para testes, quando o driver não suporta).
Recursos#
- NAT44 de TCP, UDP e ICMP com timeouts por estado de conexão.
- Blocos de portas por assinante, com escolha de porta embaralhada.
- UDP EIM e full cone opcionais (RFC 4787).
- Hairpin: assinantes se acessam pelo IP público.
- Fragmentos IP traduzidos corretamente.
- NAT estático e port-forward.
- UPnP IGD, PCP e NAT-PMP para jogos, câmeras e aplicações P2P.
- Proteções: pacotes inválidos, limite de fluxos novos por segundo, limite de sessões por assinante, proteção do servidor e lista de bloqueio.
- Observabilidade: contadores por CPU, motivos de descarte e observação de um IP específico (watch).
- Fast-forward (opcional, desligado por padrão).
Fast-forward#
Normalmente o pacote traduzido é devolvido ao sistema, que escolhe a rota. Com fast-forward enable, o Portgrid decide a saída por conta própria e transmite o pacote direto pela placa, reduzindo ainda mais a latência e o uso de CPU.
Requisitos e efeitos
Exige XDP nativo nas duas placas. O firewall forward e o tcpdump na placa de saída deixam de enxergar o tráfego traduzido. Os indicadores de tráfego continuam corretos.
- Pode ser ligado para um assinante (
set cgnat policy X fast-forward subscriber 100.64.1.5) antes de generalizar. - Um watchdog suspende o fast-forward sozinho se o tráfego cair de forma anormal logo após ligar (
CGNAT_FAST_WATCHDOG_DROP_PERCENT, padrão 50%). Retome pela tela Visão geral ou pela API. - Se faltar vizinho ou rota para o destino, o pacote cai automaticamente no caminho normal.
Continuidade de serviço#
As sessões ficam em memória do kernel e sobrevivem ao reinício do cgnatd. Opcionalmente o próprio XDP permanece ativo com o daemon parado. Para encerrar o NAT de fato: request cgnat detach.
Contadores#
Veja Contadores do dataplane.