Mikrotik

PPPoE server no Mikrotik RouterOS v7: configuração completa

Túnel PPPoE estilizado em laranja sobre fundo grafite ligando o laptop do cliente ao concentrador e ao RADIUS

Quase todo provedor pequeno começa com um PPPoE server no Mikrotik. É o ponto em que o login do cliente vira um IP, um plano de velocidade e uma linha no registro de conexão. Ele é simples de subir, mas deixa armadilhas para depois: MTU errado que trava site de banco, cliente com duas sessões, plano que limita o lado contrário e RADIUS que ninguém sabe se está respondendo.

Este guia monta um PPPoE server no Mikrotik RouterOS v7 do zero, já pensando em operação de provedor: VLAN vinda da OLT, pool de endereços, profile com limite de banda, usuário local para teste, RADIUS para a base de clientes e os comandos para descobrir por que um cliente não conecta. Os comandos foram conferidos na documentação oficial da MikroTik e o cenário usa endereços de documentação, então ajuste nomes, VLAN e faixas para a sua rede.

Resposta rápida: PPPoE server no Mikrotik em 7 passos

  1. Crie a interface VLAN por onde os clientes chegam da OLT.
  2. Crie o pool de IPs que os clientes vão receber.
  3. Crie um profile por plano, com gateway, DNS, rate-limit e ajuste de MSS.
  4. Crie um secret local para testar antes de ligar o RADIUS.
  5. Suba o servidor PPPoE na VLAN, com MTU e MRU 1492.
  6. Aponte o /radius para o seu servidor e ligue use-radius no /ppp aaa.
  7. Confira com /ppp active print e acompanhe o log de pppoe e radius no primeiro teste.

Cenário do laboratório

O cliente tem um roteador Wi-Fi ou uma ONU em modo roteador que disca PPPoE. A ONU entrega o quadro para a OLT, que coloca tudo numa VLAN de serviço e manda para o concentrador. O Mikrotik recebe essa VLAN, autentica o login no RADIUS, entrega o IP e aplica o plano. Se a sua OLT é Huawei, o post sobre como provisionar ONU na OLT Huawei mostra onde essa VLAN entra no service-port.

ItemValor no laboratórioObservação
VLAN dos clientes100, chegando da OLT pela sfp-sfpplus1Uma VLAN por OLT ou por PON
Pool100.64.0.2 a 100.64.3.254Faixa de CGNAT; use público se tiver
Gateway (local-address)100.64.0.1Fora do pool
DNS entregue192.0.2.53 e 192.0.2.54Seus recursivos
RADIUS192.0.2.10FreeRADIUS, sistema de gestão ou outro
Origem do RADIUS198.51.100.1 (loopback)O RADIUS cadastra este IP como cliente
Diagrama: roteador do cliente, ONU, OLT na VLAN 100, concentrador PPPoE Mikrotik e servidor RADIUS
O roteador do cliente abre a sessão PPPoE, a ONU e a OLT levam o quadro na VLAN 100 até o concentrador, que pergunta ao RADIUS se o login vale e qual plano aplicar.

O pool usa 100.64.0.0/22 porque a maioria dos provedores novos entrega CGNAT. A tradução para IP público fica em outro post, sobre CGNAT no Mikrotik com netmap. Aqui o foco é a sessão PPPoE em si.

Interface VLAN e pool de endereços

O primeiro passo do PPPoE server no Mikrotik é ter uma interface que receba os clientes. Em provedor com OLT, eles chegam marcados numa VLAN. Crie a interface VLAN em cima da porta que liga na OLT:

/interface vlan
add name=vlan100-pppoe vlan-id=100 interface=sfp-sfpplus1

O nome da interface carrega a VLAN e a função. Quando o concentrador tiver dez servidores PPPoE, esse nome evita confusão no print. Não coloque IP nessa interface: o PPPoE trabalha na camada 2 e o endereço do cliente vem do profile.

Depois, o pool que entrega IP aos clientes:

/ip pool
add name=pool-pppoe ranges=100.64.0.2-100.64.3.254

A faixa começa em .2 porque o .1 fica para o gateway, que vai no profile. Um /22 dá 1021 endereços para clientes. Quando o pool esgota, o cliente autentica e não recebe IP, e o log mostra a falha de alocação. Acompanhe o uso do pool no /ip pool used print e emende uma segunda faixa antes de chegar no limite.

Profile: gateway, DNS e limite de banda

O profile é o plano. Ele diz qual IP o concentrador usa do lado dele, de onde sai o IP do cliente, qual DNS entregar e qual velocidade aplicar. Um profile por plano facilita a vida de quem atende o telefone:

/ppp profile
add name=plano-100m local-address=100.64.0.1 remote-address=pool-pppoe \
    dns-server=192.0.2.53,192.0.2.54 rate-limit=50M/100M \
    change-tcp-mss=yes only-one=yes use-encryption=no

O que cada opção do profile faz:

  • local-address: o IP do lado do concentrador em cada túnel. Pode ser o mesmo para todos os clientes, porque cada sessão é ponto a ponto.
  • remote-address=pool-pppoe: o cliente recebe um IP do pool criado antes.
  • dns-server: até dois servidores, entregues na negociação do IPCP.
  • rate-limit=50M/100M: o primeiro número é o rx e o segundo é o tx, do ponto de vista do roteador. O rx é o upload do cliente e o tx é o download. Este plano é 100 mega de download e 50 de upload. Inverter os dois entrega ao cliente o plano de cabeça para baixo.
  • change-tcp-mss=yes: o roteador reescreve o MSS das conexões TCP para caber no MTU do túnel. Sem isso, alguns sites abrem pela metade.
  • only-one=yes: o mesmo login não pode ter duas sessões ao mesmo tempo.
  • use-encryption=no: PPPoE de provedor não usa criptografia MPPE. Ligar só gasta CPU do concentrador sem proteger nada além do enlace até a OLT.

O rate-limit cria uma fila simples dinâmica para cada cliente conectado. Ela aparece em /queue simple print com o nome da interface do cliente. O formato aceita também burst (rajada), com taxa, limiar e tempo de rajada depois do valor básico. Comece sem burst e só acrescente quando souber o que quer vender.

Secret local para o primeiro teste

Antes de ligar o RADIUS, crie um usuário local. Ele prova que o PPPoE server no Mikrotik funciona sozinho. Se algo falhar depois, você sabe que o problema está no RADIUS e não na sessão:

/ppp secret
add name=cliente0001 password=TroqueEstaSenha profile=plano-100m \
    service=pppoe

O service=pppoe impede que esse login seja usado em L2TP ou SSTP no mesmo roteador. Com o RADIUS ligado, o RouterOS consulta primeiro os secrets locais e só pergunta ao RADIUS se o usuário não existir na base local. Isso permite manter um login de teste local mesmo depois da migração, mas também cria confusão: um secret local esquecido com o mesmo nome de um cliente do RADIUS ganha a disputa e aplica o plano errado.

Subindo o PPPoE server no Mikrotik na VLAN

/interface pppoe-server server
add service-name=provedor interface=vlan100-pppoe \
    default-profile=plano-100m authentication=pap,chap,mschap2 \
    max-mtu=1492 max-mru=1492 one-session-per-host=yes \
    keepalive-timeout=10 disabled=no

O que cada parâmetro faz:

  • service-name: nome do serviço anunciado. O cliente que não manda nome conecta em qualquer servidor; o que manda nome só conecta no servidor com nome igual. Deixe o roteador do cliente sem nome de serviço.
  • interface: a VLAN criada antes. É nela que o servidor escuta o PADI do cliente.
  • default-profile: o profile usado quando o secret ou o RADIUS não indicam outro.
  • authentication: PAP, CHAP e MS-CHAPv2. O padrão também traz MS-CHAPv1, que pode sair. Se o seu RADIUS guarda senha com hash, confira quais métodos ele aceita.
  • max-mtu e max-mru 1492: o cabeçalho PPPoE ocupa 8 bytes, então numa Ethernet de 1500 sobram 1492. Mais sobre isso na próxima seção.
  • one-session-per-host=yes: se o mesmo MAC tentar abrir uma sessão nova, a antiga cai. Resolve o roteador que reinicia e fica com sessão fantasma até o keepalive expirar.
  • keepalive-timeout=10: depois de 10 segundos sem tráfego, o servidor manda eco LCP a cada segundo. Sem resposta por 20 segundos, a sessão cai.

Várias VLANs no mesmo servidor

Quando cada OLT ou cada PON usa uma VLAN própria, criar dezenas de interfaces VLAN dá trabalho. O RouterOS v7 tem a opção pppoe-over-vlan-range, que faz o servidor aceitar quadros marcados numa faixa de VLANs direto na porta física:

/interface pppoe-server server
add service-name=provedor interface=sfp-sfpplus1 \
    pppoe-over-vlan-range=101-110 accept-untagged=no \
    default-profile=plano-100m max-mtu=1492 max-mru=1492 disabled=no

O accept-untagged=no recusa clientes sem VLAN nessa porta. A documentação avisa: não crie interface VLAN com um ID que esteja dentro da faixa no mesmo servidor. Por isso a faixa do exemplo começa em 101 e deixa a VLAN 100 com o servidor próprio.

MTU 1492 e ajuste de MSS

A maior parte dos chamados de site que não abre depois de subir um PPPoE server no Mikrotik é MTU. O pacote IP do cliente viaja dentro do PPPoE, que acrescenta 8 bytes. Se o cliente manda um pacote de 1500, ele não cabe no quadro e precisa ser fragmentado ou descartado. Com o bit DF ligado, que é o comum em TCP, ele é descartado e o site fica carregando para sempre.

CamadaTamanhoDe onde vem
Ethernet entre OLT e concentrador1500Padrão
Cabeçalho PPPoE + PPP8 bytesRFC 2516
MTU do túnel PPPoE1492max-mtu e max-mru
MSS TCP dentro do túnel14521492 menos 40 de cabeçalho IP e TCP

O padrão do RouterOS para max-mtu e max-mru no servidor é 1480, um valor conservador. 1492 é o máximo que a RFC 2516 permite numa Ethernet de 1500 e é o que a maioria dos roteadores de cliente usa. Qualquer um dos dois funciona se o MSS for ajustado. É o que faz o change-tcp-mss=yes do profile: o concentrador reescreve o MSS do SYN para caber no túnel, e o TCP nem tenta mandar segmentos grandes demais.

Quer MTU 1500 dentro do túnel? A RFC 4638 permite, desde que todo o caminho entre cliente e concentrador aceite quadros de 1508 bytes, incluindo OLT e switches. Só mude depois de testar o caminho inteiro; uma porta no meio com MTU 1500 derruba tudo que for grande.

RADIUS no PPPoE server no Mikrotik

Com mais de algumas dezenas de clientes, cadastrar secret no roteador vira problema: senha espalhada, plano sem histórico e nenhum registro de conexão centralizado. O RADIUS resolve as três coisas. O concentrador só pergunta, e o servidor responde se o login vale, qual IP ou pool usar e qual velocidade aplicar:

/radius
add service=ppp address=192.0.2.10 secret=SegredoRadius \
    src-address=198.51.100.1 timeout=2s
/ppp aaa
set use-radius=yes accounting=yes interim-update=5m
/radius incoming
set accept=yes
  • service=ppp: este servidor RADIUS atende o PPP. O mesmo servidor pode atender login de administrador ou hotspot, cada um com a sua linha.
  • src-address: o IP de origem das consultas. Use a loopback do concentrador e cadastre esse IP como cliente no RADIUS. Sem isso, o roteador sai pelo IP da interface, que muda quando o caminho muda, e o RADIUS passa a ignorar as consultas.
  • timeout=2s: o padrão é 1100 ms. Se o RADIUS está longe ou sobrecarregado, o cliente cai em reautenticação. Ajuste olhando o /radius monitor.
  • use-radius=yes e accounting=yes: autentica e registra início e fim de cada sessão no RADIUS.
  • interim-update=5m: o concentrador manda a contagem de bytes a cada 5 minutos. Sem isso, o sistema só fica sabendo do consumo quando a sessão cai.
  • /radius incoming accept=yes: aceita pedidos de desconexão e mudança de plano vindos do RADIUS. A porta padrão no RouterOS é 1700; confira a que o seu sistema usa.

Exemplo no lado do FreeRADIUS

Se o RADIUS for um FreeRADIUS puro, o mínimo é cadastrar o concentrador como cliente e o usuário com os atributos de resposta:

# /etc/freeradius/3.0/clients.conf
client concentrador {
    ipaddr = 198.51.100.1
    secret = SegredoRadius
}

# /etc/freeradius/3.0/users
cliente0002 Cleartext-Password := "OutraSenha"
    Framed-Pool = "pool-pppoe",
    Mikrotik-Rate-Limit = "100M/200M"

Framed-Pool manda o roteador tirar o IP do pool com aquele nome, que precisa existir no Mikrotik. Mikrotik-Rate-Limit sobrescreve o rate-limit do profile e segue o mesmo formato: upload do cliente primeiro, download depois. O atributo vem do dicionário da MikroTik, que já faz parte da instalação padrão do FreeRADIUS 3. Sistemas de gestão de provedor fazem essa parte por uma tela, mas os atributos enviados são os mesmos.

Verificando as sessões

/interface pppoe-server server print
/ppp active print
/ppp active print detail where name=cliente0001
/queue simple print
/radius monitor 0

Com o PPPoE server no Mikrotik no ar, o primeiro comando mostra os servidores e as interfaces. O segundo lista quem está conectado, e o terceiro abre os detalhes de um login: IP, MAC (caller-id), tempo de sessão e encoding. O /queue simple print confirma se a fila do plano foi criada com os valores certos. O último mostra contadores do RADIUS: pedidos, aceites, rejeições e timeouts. Uma saída de exemplo do /ppp active print:

Flags: R - RADIUS
Columns: NAME, SERVICE, CALLER-ID, ADDRESS, UPTIME
#   NAME         SERVICE  CALLER-ID          ADDRESS      UPTIME
0   cliente0001  pppoe    02:00:00:00:00:01  100.64.0.10  3h12m40s
1 R cliente0002  pppoe    02:00:00:00:00:02  100.64.0.11  41m5s

A flag R indica que a sessão foi autenticada pelo RADIUS. No exemplo, cliente0001 é o secret local do teste e cliente0002 veio do FreeRADIUS. Para derrubar uma sessão e forçar o cliente a discar de novo, por exemplo depois de trocar o plano:

/ppp active remove [find name=cliente0001]

Troubleshooting do PPPoE server no Mikrotik

Quando um cliente não conecta no PPPoE server no Mikrotik, ligue o log de depuração dos tópicos pppoe e radius. O debug mostra a troca PADI, PADO, PADR e PADS, a negociação LCP e a resposta do RADIUS:

/system logging add topics=pppoe,debug action=memory
/system logging add topics=radius,debug action=memory
/log print where topics~"pppoe|radius"

Leia na ordem. Se não aparece PADI, o quadro do cliente não chega ao concentrador e o problema está na VLAN, na OLT ou na ONU. Se aparece PADI e não sai PADO, o servidor não está naquela interface ou o nome de serviço não bate. Se a sessão chega até a autenticação e cai, o problema é login, senha ou RADIUS. Desligue o debug quando terminar, porque num concentrador cheio ele gera muitas linhas por segundo.

SintomaCausa provávelO que conferir
Cliente não aparece no logVLAN errada na OLT ou no Mikrotik; servidor desativadoConferir a VLAN nas duas pontas e o print do servidor
Log mostra autenticação falhouSenha errada, secret com service diferente, RADIUS rejeitandoTestar com o secret local; olhar o motivo no log do RADIUS
RADIUS com timeoutIP de origem não cadastrado, segredo diferente, firewall/radius monitor 0 e captura na porta 1812
Conecta, mas sites não abremMTU e MSSmax-mtu 1492 e change-tcp-mss=yes
Conecta sem IPPool esgotado ou Framed-Pool com nome errado/ip pool used print
Velocidade invertidarx e tx trocados no rate-limitUpload primeiro, download depois
Cliente cai a cada poucos minutosDuas sessões do mesmo login ou keepalive curto demaisonly-one, one-session-per-host e log de LCP

Por fim, o concentrador é a porta de entrada de todos os clientes. Feche o acesso de gerência, desligue serviços que não usa e filtre o que chega na VLAN de clientes. O guia de segurança no Mikrotik RouterOS v7 cobre esses passos para o PPPoE server no Mikrotik e o resto do roteador.

Perguntas frequentes

Quantos clientes um PPPoE server no Mikrotik aguenta?

Depende do modelo, das filas e do firewall, não só do número de sessões. Cada cliente cria uma interface dinâmica e uma fila simples. Acompanhe a CPU em horário de pico e divida a base em mais de um concentrador antes de chegar perto do limite.

Devo usar MTU 1480 ou 1492 no PPPoE?

1492 é o máximo numa Ethernet de 1500 e é o valor mais comum. 1480 é o padrão do RouterOS e também funciona. O que não pode faltar é o ajuste de MSS no profile.

No rate-limit, qual número é o download do cliente?

O segundo. O formato é rx/tx do ponto de vista do roteador, então rx é o upload do cliente e tx é o download. Um plano de 100 mega de download e 50 de upload fica 50M/100M.

Posso usar secret local e RADIUS ao mesmo tempo?

Pode. O RouterOS consulta os secrets locais primeiro e só vai ao RADIUS quando o usuário não existe na base local. Use isso para um login de teste e evite secrets locais com o mesmo nome de clientes do RADIUS.

Preciso de um servidor PPPoE por VLAN?

No RouterOS v7, não necessariamente. A opção pppoe-over-vlan-range deixa um único servidor aceitar uma faixa de VLANs na porta física. Só não crie interface VLAN com ID dentro dessa faixa.

Conclusão

Um PPPoE server no Mikrotik bem montado tem poucas peças: VLAN, pool, profile, servidor e RADIUS. Os problemas aparecem nos detalhes: MTU sem ajuste de MSS, rate-limit invertido, IP de origem do RADIUS que muda e sessões duplicadas. Teste com um secret local, ligue o RADIUS depois e mantenha o log de depuração à mão para o primeiro cliente que reclamar.

Com o PPPoE server no Mikrotik estável, os próximos passos são o CGNAT para os clientes do 100.64 e o acesso remoto da equipe. Para o segundo, veja como criar VPN no Mikrotik.

Compartilhar:

Sobre o autor

Ivan Alves

Especialista em redes de provedores (ISP)

Ivan Alves trabalha há mais de 15 anos com redes de provedores de internet, do NOC ao backbone e à borda BGP. Coordena infraestrutura e tecnologia em um provedor regional e escreve aqui os tutoriais que gostaria de ter encontrado quando começou: comandos testados, cenário explicado e o porquê de cada linha.

2 Comentários

  1. Capturar pacotes no Mikrotik: sniffer, Torch e Wireshark – IA Tecnologia Responder

    […] No Wireshark, o filtro de exibição pppoed mostra a descoberta e pap || chap a autenticação. PADI sem PADO quer dizer que o concentrador não respondeu (serviço, VLAN ou interface errada); PADS seguido de falha no CHAP é usuário ou senha. O passo a passo do servidor está no guia de PPPoE server no Mikrotik RouterOS v7. […]

  2. Static loop no Mikrotik: rota blackhole para pool e CGNAT – IA Tecnologia Responder

    […] que também faz CGNAT. É o desenho mais comum em provedor pequeno, montado como nos posts sobre PPPoE server no Mikrotik RouterOS v7 e CGNAT no Mikrotik com […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *