Como configurar CGNAT no MikroTik: passo a passo para provedores
Como configurar CGNAT no MikroTik: decida antes a proporção de clientes por IP público e as portas de cada um; depois configure, nesta ordem, a faixa 100.64.0.0/10 e o perfil PPPoE, as regras de NAT geradas por script, as exceções e os tempos de conexão, o relógio e o registro das sessões. Só então migre um grupo pequeno e confira os contadores antes de levar a base inteira.
Resumo
- O lado interno usa a faixa 100.64.0.0/10, reservada para o CGNAT, entregue ao assinante pelo pool do perfil PPPoE.
- As regras de src-nat saem de um script, com uma faixa fixa de portas por cliente, e nunca digitadas uma a uma.
- Exceções para o tráfego interno, tempos de conexão mais curtos e bloqueio da faixa vinda de fora fecham a configuração.
- Sem NTP e sem o registro de quem recebeu cada endereço interno, o CGNAT funciona, mas não responde a um ofício.
Como configurar CGNAT no MikroTik: o que decidir antes
Antes de qualquer comando, defina quantos clientes dividem cada IP público, quantas portas cada um recebe e como o provedor vai achar o assinante depois. Essas três decisões mudam as regras inteiras, por isso trocar no meio do caminho dá retrabalho.
No RouterOS, o CGNAT não é um pacote à parte: é o firewall de NAT do próprio roteador, usado com o espaço de endereços compartilhado e com regras que prendem cada cliente a uma faixa de portas. Isso deixa o MikroTik acessível para provedores regionais, mas também faz cada detalhe depender de quem configura.
Este passo a passo cobre a montagem no equipamento. O desenho geral do projeto, com dimensionamento, logs e IPv6 entrando junto, está na página de IPv6 e CGNAT para provedores, e o serviço específico da marca está em configuração de CGNAT em MikroTik.
| Decisão | Opções comuns | O que muda na configuração |
|---|---|---|
| Clientes por IP público | 16, 32 ou 64 | Tamanho da faixa de portas de cada cliente e número de IPs públicos usados |
| Forma de alocar portas | Faixa fixa por cliente ou alocação dinâmica | Regras por cliente geradas por script ou uma regra só, com registro pesado |
| Onde roda o NAT | No concentrador PPPoE ou num roteador separado | Interface de saída nas regras e CPU disponível no pico |
| Como achar o assinante | Registro do PPPoE ou contabilidade do RADIUS | Destino do syslog e o que precisa ser guardado |
| Quem fica fora do CGNAT | Clientes com IP público fixo | Lista de exceção antes das regras de tradução |
Quantas portas cada cliente recebe?
As portas de 1024 a 65535 somam 64.512 por IP público, e a conta é dividir esse total pelo número de clientes do IP. Com 32 clientes, cada um fica com 2.016 portas; com 64, com 1.008.
O número certo sai do consumo medido no seu pico, não de tabela pronta. Casas com muitos aparelhos e jogos online gastam mais, e a falta de porta aparece como lentidão ou partida caindo, como mostra o guia de CGNAT travando jogos.
Faixa fixa ou alocação dinâmica no RouterOS
Uma regra única de src-nat com vários IPs públicos funciona, mas cada conexão pode sair por uma porta qualquer, e aí só um registro de cada conexão acha o assinante. Com faixa fixa, a própria regra diz quem usou qual porta, e o volume de log cai muito.
A fórmula da faixa fixa e o cuidado com o primeiro e o último endereço do bloco estão no guia de NAT determinístico. Aqui o foco é montar tudo no RouterOS, do pool ao teste.
Passo 1: faixa 100.64.0.0/10 e perfil PPPoE
O primeiro passo é criar o pool de endereços internos dentro da faixa 100.64.0.0/10 e ligá-lo a um perfil PPPoE. Todo assinante que entrar com esse perfil já recebe um endereço que as regras de NAT vão reconhecer.
A faixa 100.64.0.0/10 foi reservada pela RFC 6598 para o lado interno do CGNAT. Ela não conflita com as redes privadas que o roteador do cliente usa em casa, como 192.168.0.0/16, o que evita rota duplicada dentro da casa.
/ip pool
add name=pool-cgnat ranges=100.64.0.0/22
/ppp profile
add name=perfil-cgnat local-address=100.127.255.1 \
remote-address=pool-cgnat dns-server=192.0.2.53
/interface list
add name=WAN
/interface list member
add list=WAN interface=sfp-sfpplus1O local-address fica fora do pool para não ser entregue a nenhum cliente. A lista WAN reúne as interfaces de saída para a internet e será usada nas regras seguintes; troque sfp-sfpplus1 pela porta do seu uplink.
Com RADIUS, o pool continua no MikroTik?
Pode continuar: o RADIUS autentica e aponta o nome do pool, e o MikroTik entrega o endereço. Outra opção é o RADIUS mandar o endereço pronto, o que facilita amarrar um assinante a um endereço interno fixo.
Endereço interno fixo por assinante simplifica muito a consulta depois, porque o login passa a ter sempre a mesma faixa de portas. Se o pool for dinâmico, o registro de quem pegou cada endereço vira obrigatório.
Passo 2: regras de NAT geradas por script
As regras de tradução prendem cada endereço interno a um IP público e a uma faixa de portas, e um script do próprio RouterOS gera todas elas. Digitar uma a uma, numa base de milhares de clientes, garante erro.
O exemplo abaixo cobre um bloco de 32 clientes, de 100.64.0.0 a 100.64.0.31, saindo pelo IP público 203.0.113.10 com 2.016 portas cada. Para o próximo bloco, troque a cadeia, o endereço inicial e o IP público.
/ip firewall nat
add chain=srcnat src-address=100.64.0.0/27 \
out-interface-list=WAN action=jump jump-target=cgnat-0
:local pub 203.0.113.10
:local tam 2016
:for i from=0 to=31 do={
:local cli (100.64.0.0 + $i)
:local p1 (1024 + ($i * $tam))
:local p2 ($p1 + $tam - 1)
/ip firewall nat add chain=cgnat-0 src-address=$cli \
protocol=tcp action=src-nat to-addresses=$pub to-ports="$p1-$p2"
/ip firewall nat add chain=cgnat-0 src-address=$cli \
protocol=udp action=src-nat to-addresses=$pub to-ports="$p1-$p2"
}
/ip firewall nat add chain=cgnat-0 src-address=100.64.0.0/27 \
action=src-nat to-addresses=203.0.113.10A regra de salto manda só o tráfego daquele bloco para a cadeia cgnat-0, então cada pacote percorre 65 regras, e não a lista inteira da base. A última regra traduz o que não é TCP nem UDP, como o ICMP do ping, sem prender porta.
CGNAT no MikroTik com regra digitada à mão?
No projeto de IPv6 e CGNAT, um Especialista mede o consumo de portas, gera as regras por script e deixa a fórmula de consulta documentada para a sua equipe.
Como repetir o script para a base toda
Guarde o script com os três valores variáveis no topo e rode uma vez por bloco, anotando numa planilha qual IP público atende qual faixa interna. Essa planilha é parte do registro, junto com a fórmula.
Antes de rodar em produção, exporte a configuração com /export file=antes-cgnat. Se algo der errado, o guia sobre recuperar a configuração do MikroTik mostra como voltar.
Passo 3: exceções, tempos de conexão e proteção da faixa
Três ajustes completam as regras: o tráfego interno passa sem tradução, as conexões paradas liberam a porta mais cedo e a faixa 100.64.0.0/10 não aceita pacote vindo da internet. Sem eles, o CGNAT gasta porta e CPU à toa.
/ip firewall address-list
add list=sem-nat address=100.64.0.0/10
add list=sem-nat address=192.0.2.0/24 comment="servidores do provedor"
/ip firewall nat
add chain=srcnat dst-address-list=sem-nat action=accept \
place-before=0 comment="trafego interno sem traducao"
/ip firewall connection tracking
set tcp-established-timeout=1h udp-timeout=30s
/ip firewall raw
add chain=prerouting in-interface-list=WAN \
dst-address=100.64.0.0/10 action=drop
add chain=prerouting in-interface-list=WAN \
src-address=100.64.0.0/10 action=dropA regra de aceitar fica no topo da lista de NAT para que o acesso ao DNS, ao sistema de cobrança e ao servidor de testes do provedor não consuma porta de ninguém.
Por que encurtar os tempos de conexão
Uma conexão TCP estabelecida segura a porta até expirar, mesmo sem tráfego, e o padrão do RouterOS é longo [CONFIRMAR na versão do RouterOS]. Encurtar o tempo devolve portas ao cliente sem que ele perceba.
Não exagere para baixo: tempo curto demais derruba conexões que ficam paradas por natureza, como sessões de acesso remoto e alguns aplicativos de mensagem.
FastTrack ajuda ou atrapalha?
O FastTrack alivia a CPU porque os pacotes de uma conexão já conhecida pulam parte do processamento. A tradução continua valendo, mas as filas e regras de mangle deixam de ver esses pacotes [CONFIRMAR na versão do RouterOS].
Se o mesmo equipamento aplica os planos de velocidade por fila, teste o FastTrack num grupo pequeno antes. O guia de concentrador PPPoE com CPU em 100% ajuda a ler a CPU no pico.
Passo 4: relógio e registro das sessões
Com faixa fixa de portas, o que precisa ser guardado é quem recebeu cada endereço interno e em que horário, e isso só vale com o relógio certo. O MikroTik manda essas linhas para um servidor de syslog fora do roteador.
/system ntp client
set enabled=yes
/system ntp client servers
add address=a.st1.ntp.br
add address=b.st1.ntp.br
/system logging action
add name=syslog-cgnat target=remote remote=192.0.2.50 remote-port=514
/system logging
add topics=ppp,info action=syslog-cgnatO servidor de syslog guarda a linha de entrada e saída de cada sessão com o login e o endereço interno. Com RADIUS, a contabilidade das sessões cumpre o mesmo papel e costuma ser mais fácil de consultar.
O Marco Civil da Internet fala na guarda dos registros de conexão por um ano [CONFIRMAR na norma]. Como o IP público é dividido, a consulta parte do IP, da porta e do horário do ofício e chega ao login pela fórmula e pelo registro da sessão; a guarda de logs de CGNAT organiza isso de forma consultável.
Como testar depois de configurar CGNAT no MikroTik?
Teste com um grupo pequeno de clientes, confira os contadores das regras e simule uma consulta de ofício antes de migrar o resto. O problema que aparece com dez clientes é muito mais simples de corrigir do que com dez mil.
- Piloto: coloque de 10 a 20 clientes no perfil-cgnat, de preferência gente da equipe e um jogador conhecido.
- Contadores: rode /ip firewall nat print stats where chain=cgnat-0 e veja se os bytes sobem nas regras dos clientes certos.
- Conexões: use /ip firewall connection print count-only where src-address~"100.64.0.5" para ver quantas conexões um cliente abre no pico.
- Saída: peça ao cliente para abrir um site que mostra o IP e confira se aparece 203.0.113.10, e não outro endereço.
- Consulta: pegue uma conexão real, anote IP público, porta e horário e refaça o caminho até o login sem olhar a sessão ativa.
Antes de migrar a base, confira no seu MikroTik
- O pool interno cobre exatamente as faixas que os scripts trataram, sem sobra nem falta.
- A regra de aceitar o tráfego interno está acima de todos os saltos de NAT.
- O relógio está sincronizado por NTP e o syslog recebe as linhas de sessão.
- A planilha liga cada IP público à sua faixa interna e à proporção usada.
- O tipo de NAT foi conferido num console, não só num teste de velocidade.
- Existe uma exportação da configuração anterior guardada fora do roteador.
Qualquer item sem marca é motivo para segurar a migração. O piloto existe justamente para achar isso com poucos clientes.
Erros comuns no CGNAT do MikroTik
Os erros abaixo aparecem em configurações que funcionam no primeiro dia e falham semanas depois, quando a base cresce ou chega o primeiro pedido judicial.
- Pool maior que o script: clientes novos caem fora das regras e saem sem tradução ou pela regra genérica.
- Regra genérica no topo: uma src-nat sem faixa de portas acima dos saltos faz todo mundo sair por ela.
- Sem out-interface-list: o tráfego entre clientes ou para o provedor também é traduzido e gasta porta.
- Relógio solto: sem NTP, o horário do registro não bate com o do ofício e aponta outro assinante.
- Proporção chutada: 64 clientes por IP numa base com muitos gamers vira reclamação de NAT estrito à noite.
Quando vale sair do MikroTik para outra plataforma?
O MikroTik atende bem muitos provedores regionais, mas o limite chega quando a CPU passa do confortável no pico ou quando o número de regras deixa as mudanças arriscadas. Nesse ponto, o dimensionamento de CGNAT compara a troca de modelo com uma plataforma dedicada.
A Táquion Tech configura CGNAT em MikroTik com regras geradas por script, piloto antes da base e registro conferido com uma consulta simulada. Ligar o IPv6 junto também ajuda, porque cada conexão que sai em IPv6 deixa de ocupar porta no CGNAT.
Perguntas frequentes
Dá para fazer CGNAT no MikroTik com uma regra só?
Dá, usando src-nat com vários IPs públicos numa regra única, e o tráfego sai normalmente. O problema é a identificação: sem faixa fixa de portas, só um registro de cada conexão acha o assinante, e esse volume pesa no armazenamento.
Qual modelo de MikroTik aguenta CGNAT de provedor?
Depende do número de clientes, das conexões simultâneas no pico e de quantas outras funções o mesmo roteador faz. A linha CCR costuma ser a escolhida para concentrador com CGNAT, mas o modelo certo sai da medição da sua base [CONFIRMAR modelo e capacidade com o fabricante].
O CGNAT no MikroTik funciona com IPoE em vez de PPPoE?
Funciona, porque as regras de NAT olham o endereço interno, não o tipo de acesso. Com IPoE, o endereço vem do servidor DHCP, e o registro passa a ser o das concessões do DHCP com a opção que identifica o cliente.
Como saber se um cliente está ficando sem portas?
Conte as conexões dele no pico pelo connection tracking e compare com o tamanho da faixa que ele recebeu. Se o número chega perto do limite, o cliente sente lentidão e falha em jogos antes de reclamar de queda.
Posso deixar alguns clientes com IP público no mesmo roteador?
Pode, com um perfil PPPoE próprio que entrega endereço público e fica fora das faixas tratadas pelos scripts. Vale conferir que nenhuma regra genérica de src-nat pega esses clientes por engano.
Fontes
- RFC 6598, IANA-Reserved IPv4 Prefix for Shared Address Space: define a faixa 100.64.0.0/10 para o lado interno do CGNAT
- NAT, documentação do RouterOS (MikroTik): ações src-nat e jump, cadeias próprias e to-ports
- RFC 6888, Common Requirements for Carrier-Grade NATs (CGNs): requisitos de comportamento e de portas por assinante num CGNAT