MikroTik PPPoE + DHCPv6-PD: Dual-Stack para DIGI España
DIGI España entrega la sesión PPPoE en la VLAN 20 y delega un /56 por DHCPv6-PD — y el MTU del enlace se negocia a la baja hasta 1480 por LCP, pongas lo que pongas en max-mtu.

DIGI España es uno de los pocos ISP en España que ofrece conectividad IPv6 nativa a clientes residenciales. Su red de fibra utiliza autenticación PPPoE con VLAN tagging y proporciona tanto una dirección IPv4 dinámica como un prefijo IPv6 dinámico /56 a través de DHCPv6 Prefix Delegation (DHCPv6-PD).
Esta guía cubre la configuración completa de un router MikroTik para la red de DIGI, incluyendo la gestión automática de cambios de prefijo, un reto habitual cuando tu ISP asigna prefijos dinámicos que pueden cambiar en cada reconexión.
TL;DR — dual-stack de DIGI España en RouterOS
6 puntos clave- DIGI entrega la sesión PPPoE en la VLAN 20. Pon el cliente PPPoE sobre una interfaz VLAN encima del puerto WAN, no sobre el puerto directamente, o la autenticación falla sin ningún error útil: es con diferencia el motivo más habitual de que esto no levante.
- El formato de usuario es
identificador@digi, y el IPv4 llega dinámicamente con la default route y el DNS del ISP desde la propia sesión. - El IPv6 es un
/56delegado, no un/64. Pide el prefijo con DHCPv6-PD y talla un/64por cada LAN; apuntar el/56directamente a un bridge no funciona. - El MTU del enlace se negocia a la baja hasta 1480 por LCP, pase lo que pase.
max-mtu=1500es solo el límite superior del cliente, no el MTU resultante, así que hay que fijar el MSS o media web carga y la otra media se queda colgada. - El prefijo delegado cambia al reconectar, así que hace falta un script DHCPv6 que reescriba las direcciones de la LAN; sin él, el IPv6 muere en silencio tras un corte mientras el IPv4 sigue funcionando.
- Probado en RouterOS 7.23.2 sobre un RB5009, y aplicable a cualquier router MikroTik.
Cómo lo ejecuto en mi propia infraestructura
Esto no es teórico: mi propio RB5009UG+S+ corre exactamente esta configuración de PPPoE + DHCPv6-PD contra DIGI, con la VLAN de WAN etiquetada como vlan-id=20 (VLAN_DIGI) tal y como se describe más arriba. La versión de RouterOS con la que se comprobó por última vez está sellada al principio de esta página.
La gestión del cambio de prefijo del Paso 5 no es programación defensiva para un caso raro — es el caso normal. Cada vez que reinicio la interfaz PPPoE, o el router entero, DIGI me asigna un nuevo prefijo /56. No de forma ocasional: siempre. Por eso el direccionamiento LAN no puede fijar un prefijo a mano y tiene que recalcularlo en cada reconexión; cualquier cosa que asuma un prefijo estático se rompe en el primer reinicio. El coste es que las sesiones abiertas se cortan unos segundos mientras la interfaz renegocia — la misma interrupción breve que verías tras cualquier desconexión externa.
El MTU negociado de 1480 tampoco es una suposición. Lo he confirmado por tres vías independientes: la documentación oficial de DIGI, la configuración que trae de fábrica el router de DIGI, y probando directamente distintos valores de MTU en mi propia conexión. Las tres coinciden en 1480, no en el 1500 que max-mtu solo permite como límite superior.
¿Cómo transporta PPPoE tanto IPv4 como IPv6?
La red de DIGI requiere una configuración específica: ONT en modo bridge → VLAN 20 → autenticación PPPoE → dual-stack IPv4 + IPv6 (DHCPv6-PD) → firewall/NAT → LAN con SLAAC.
Lo que recibes de DIGI
| Parámetro | Valor | Notas |
|---|---|---|
| Tipo de conexión | PPPoE sobre VLAN 20 | Requiere VLAN tagging |
| Dirección IPv4 | Dinámica (CGNAT o pública) | Asignada vía PPPoE |
| Prefix IPv6 | Dinámico /56 | Vía DHCPv6-PD, puede cambiar en reconexiones |
| MTU | 1480 (negociado) | PPPoE estándar, negociado vía LCP |
| MRU | 1492 (negociado) | Maximum Receive Unit, negociado vía LCP |
| Service Name | ftth | Identificador del servicio PPPoE reportado por DIGI |
| DNS | Proporcionado por el ISP o personalizado | Se puede usar el DNS del ISP o configurar uno propio |
Requisitos previos
Paso 1: configurar la interfaz física
Primero, configura el puerto ethernet conectado al ONT de DIGI:
/interface ethernet set [ find default-name=ether1 ] \
comment="DIGI ONT" \
rx-flow-control=auto \
tx-flow-control=autoPaso 2: crear la interfaz VLAN
DIGI requiere VLAN 20 tagging para el tráfico PPPoE. Crea la interfaz VLAN:
/interface vlan add \
name=VLAN_DIGI \
vlan-id=20 \
interface=ether1 \
comment="VLAN for ISP connection"¿Por qué VLAN 20?
DIGI utiliza VLAN tagging 802.1Q para separar diferentes servicios en su red. VLAN 20 es específicamente para el servicio de internet. Si conectas directamente sin VLAN tagging, la autenticación PPPoE fallará.
¿Y si mi ISP no usa VLANs?
Si tu ISP no requiere VLAN tagging, sáltate este paso. En el Paso 3, configura la interfaz del cliente PPPoE directamente sobre el puerto físico:
/interface pppoe-client add \
interface=ether1 \
...Configuraciones VLAN habituales en ISPs españoles:
- DIGI España: VLAN 20
- Movistar España: VLAN 6 (internet) + VLAN 2 (VoIP) + VLAN 3 (IPTV)
- Orange España: VLAN 832
- Sin VLAN: Muchos ISPs (especialmente operadores de cable/DOCSIS)
Paso 3: configurar el cliente PPPoE
Ahora crea el cliente PPPoE que se autenticará con DIGI:
/interface pppoe-client add \
name=PPPoE_DIGI \
interface=VLAN_DIGI \
user="your_number@digi" \
password="your_password" \
add-default-route=yes \
use-peer-dns=yes \
max-mtu=1500 \
profile=default-encryption \
disabled=no \
comment="PPPoE client for ISP DIGI"| Parámetro | Valor | Propósito |
|---|---|---|
interface | VLAN_DIGI | PPPoE se ejecuta sobre la interfaz VLAN, no sobre el puerto físico |
add-default-route | yes | Añade automáticamente la default route al conectarse |
use-peer-dns | yes | Usa los servidores DNS de DIGI (se puede desactivar para DNS personalizado) |
max-mtu | 1500 | MTU máximo que acepta el cliente. DIGI negocia hasta 1480 vía LCP |
profile | default-encryption | Perfil PPP estándar con soporte de cifrado MPPE |
Sobre el perfil PPP
El perfil default-encryption habilita la negociación MPPE (Microsoft Point-to-Point Encryption) durante la autenticación PPP. Es la opción estándar para la mayoría de ISPs.
MikroTik incluye dos perfiles predefinidos:
default— Sin requisito de cifradodefault-encryption— Requiere cifrado (recomendado)
La mayoría de ISPs, incluido DIGI, funcionan con ambos perfiles. Usa default-encryption salvo que tu ISP requiera lo contrario. Puedes consultar los perfiles disponibles con /ppp profile print.
Paso 4: añadir interfaces a la lista WAN
Para que las reglas de firewall funcionen correctamente, añade todas las interfaces WAN a una lista de interfaces. Esto es esencial: sin ello, las reglas de firewall que referencien la lista WAN no coincidirán correctamente con el tráfico.
# Create WAN interface list (skip if it already exists in your config)
/interface list add name=WAN comment="ISP Interfaces Group"
# Add WAN interfaces — all three layers of the ISP connection
/interface list member add \
interface=ether1 \
list=WAN \
comment="ISP Physical port" # ← CUSTOMIZE port
/interface list member add \
interface=VLAN_DIGI \
list=WAN \
comment="ISP VLAN" # Skip if no VLAN
/interface list member add \
interface=PPPoE_DIGI \
list=WAN \
comment="ISP PPPoE Client"Paso 5: configurar el cliente DHCPv6 para prefix delegation
Aquí es donde IPv6 se pone interesante. DIGI proporciona un prefijo /56 vía DHCPv6-PD (Prefix Delegation). Necesitamos:
- Solicitar el prefijo a DIGI
- Almacenarlo en un pool local
- Asignar direcciones a nuestra LAN desde ese pool
- Configurar Router Advertisements para SLAAC
/ipv6 dhcp-client add \
interface=PPPoE_DIGI \
pool-name=pool6 \
request=prefix \
add-default-route=yes \
use-peer-dns=yes \
allow-reconfigure=yes \
rapid-commit=no \
comment="DHCPv6 client for ISP DIGI" \
script=":delay 5s;
/ipv6 address remove [find advertise=yes];
/ipv6 address add interface=bridge address=::1/64 from-pool=pool6 advertise=yes;"El script espera 5 segundos a que el pool se rellene, elimina cualquier dirección IPv6 anunciada anteriormente en el bridge y añade una nueva desde el pool actualizado. Como la dirección usa advertise=yes, RouterOS crea automáticamente un ND prefix dinámico para SLAAC; no es necesario gestionar manualmente los ND prefix.
Paso 6: asignar dirección IPv6 a la LAN
La interfaz LAN del router necesita una dirección IPv6 del pool delegado:
/ipv6 address add \
interface=bridge \
address=::1/64 \
from-pool=pool6 \
advertise=yesEsto crea una dirección como 2a0c:5a84:xxxx:xx00::1/64 donde el prefijo proviene de la delegación de DIGI.
Paso 7: configurar Neighbor Discovery (SLAAC)
Para que los dispositivos LAN configuren automáticamente sus direcciones IPv6 mediante SLAAC (Stateless Address Autoconfiguration), configura Neighbor Discovery:
# Configure ND defaults
/ipv6 nd set [ find default=yes ] \
hop-limit=64 \
mtu=1500 \
other-configuration=yes \
reachable-time=30s \
retransmit-interval=1s
# Configure ND for LAN bridge
/ipv6 nd add \
interface=bridge \
ra-preference=high \
hop-limit=64 \
mtu=1500 \
dns=fe80::1 \
reachable-time=30s \
retransmit-interval=1s| Parámetro | Valor | Propósito |
|---|---|---|
ra-preference | high | Los clientes prefieren este router sobre otros |
hop-limit | 64 | TTL para paquetes salientes (valor estándar) |
dns | fe80::1 | Dirección link-local del router como DNS (RDNSS) |
other-configuration | yes | Indica a los clientes que usen DHCPv6 para otras opciones |
Paso 8: configurar NAT IPv4 (masquerade)
Para la conectividad IPv4 de salida:
/ip firewall nat add \
chain=srcnat \
action=masquerade \
out-interface-list=WAN \
ipsec-policy=out,none \
comment="Masquerade for internet access"Paso 9: verificar la conexión
Comprobar el estado de PPPoE
Comprobar los valores negociados de PPPoE
Comprobar la delegación de prefijo IPv6
Comprobar las direcciones IPv6
Probar la conectividad IPv6
Resumen completo de la configuración
pppoe-digi-complete.rsc
# ═══════════════════════════════════════════════════════════════════════════════
# MIKROTIK PPPoE CONFIGURATION FOR DIGI SPAIN
# ═══════════════════════════════════════════════════════════════════════════════
# Dual-Stack IPv4 + IPv6 with DHCPv6 Prefix Delegation
# ═══════════════════════════════════════════════════════════════════════════════
# ───────────────────────────────────────────────────────────────────────────────
# PHYSICAL INTERFACE
# ───────────────────────────────────────────────────────────────────────────────
/interface ethernet set [ find default-name=ether1 ] \ # ← CUSTOMIZE port
comment="DIGI ONT" \
rx-flow-control=auto \
tx-flow-control=auto
# ───────────────────────────────────────────────────────────────────────────────
# VLAN CONFIGURATION (skip if your ISP doesn't use VLANs)
# ───────────────────────────────────────────────────────────────────────────────
/interface vlan add \
name=VLAN_DIGI \
vlan-id=20 \ # ← CUSTOMIZE VLAN ID
interface=ether1 \ # ← CUSTOMIZE port
comment="VLAN for ISP connection"
# ───────────────────────────────────────────────────────────────────────────────
# PPPoE CLIENT
# ───────────────────────────────────────────────────────────────────────────────
/interface pppoe-client add \
name=PPPoE_DIGI \
interface=VLAN_DIGI \ # ← Use ether port if no VLAN
user="your_number@digi" \ # ← CUSTOMIZE credentials
password="your_password" \ # ← CUSTOMIZE credentials
add-default-route=yes \
use-peer-dns=yes \
max-mtu=1500 \ # Upper limit; server negotiates actual MTU via LCP
profile=default-encryption \
disabled=no \
comment="PPPoE client for ISP DIGI"
# ───────────────────────────────────────────────────────────────────────────────
# INTERFACE LISTS
# ───────────────────────────────────────────────────────────────────────────────
/interface list add name=WAN comment="ISP Interfaces Group" # Skip if it already exists
/interface list member add interface=ether1 list=WAN comment="ISP Physical port" # ← CUSTOMIZE port
/interface list member add interface=VLAN_DIGI list=WAN comment="ISP VLAN" # Skip if no VLAN
/interface list member add interface=PPPoE_DIGI list=WAN comment="ISP PPPoE Client"
# ───────────────────────────────────────────────────────────────────────────────
# DHCPv6 CLIENT (PREFIX DELEGATION)
# ───────────────────────────────────────────────────────────────────────────────
/ipv6 dhcp-client add \
interface=PPPoE_DIGI \
pool-name=pool6 \
request=prefix \
add-default-route=yes \
use-peer-dns=yes \
allow-reconfigure=yes \
rapid-commit=no \
comment="DHCPv6 client for ISP DIGI" \
script=":delay 5s;
/ipv6 address remove [find advertise=yes];
/ipv6 address add interface=bridge address=::1/64 from-pool=pool6 advertise=yes;"
# ───────────────────────────────────────────────────────────────────────────────
# IPv6 ADDRESS FOR LAN
# ───────────────────────────────────────────────────────────────────────────────
/ipv6 address add \
interface=bridge \
address=::1/64 \
from-pool=pool6 \
advertise=yes
# ───────────────────────────────────────────────────────────────────────────────
# NEIGHBOR DISCOVERY (SLAAC)
# ───────────────────────────────────────────────────────────────────────────────
/ipv6 nd set [ find default=yes ] \
hop-limit=64 \
mtu=1500 \
other-configuration=yes \
reachable-time=30s \
retransmit-interval=1s
/ipv6 nd add \
interface=bridge \
ra-preference=high \
hop-limit=64 \
mtu=1500 \
dns=fe80::1 \
reachable-time=30s \
retransmit-interval=1s
# ───────────────────────────────────────────────────────────────────────────────
# IPv4 NAT (MASQUERADE)
# ───────────────────────────────────────────────────────────────────────────────
/ip firewall nat add \
chain=srcnat \
action=masquerade \
out-interface-list=WAN \
ipsec-policy=out,none \
comment="Masquerade for internet access"Mejoras opcionales
La configuración principal de PPPoE + DHCPv6-PD está completa. Las siguientes secciones cubren funcionalidades adicionales que puedes añadir según tus necesidades.
Port forwarding IPv6 con actualización automática de NAT
Crear una regla de reenvío de puertos
Necesitas al menos una regla dstnat IPv6. Este ejemplo redirige tráfico HTTP y HTTPS desde la WAN a un servidor web interno:
/ipv6 firewall nat add \
chain=dstnat \
action=dst-nat \
protocol=tcp \
dst-port=80,443 \
in-interface=PPPoE_DIGI \
to-address=2001:db8:abcd:ef00:1111:2222:3333:4444 \
comment="Web Server"Crear el script de actualización
Dado que el prefijo delegado cambia en cada reconexión PPPoE, el to-address de tus reglas dstnat queda obsoleto. Este script reconstruye automáticamente la dirección IPv6 completa a partir del nuevo prefijo y actualiza todas las reglas coincidentes:
/system script add \
name=update-ipv6-nat \
comment="Auto-update IPv6 NAT when pool6 changes" \
policy=read,write,policy,test \
source={
:local serverHost "1111:2222:3333:4444"; # ← CUSTOMIZE: your server's host portion
:local poolprefix [/ipv6/pool get [find name=pool6] prefix];
:local slashPos [:find $poolprefix "/"];
:local prefix [:pick $poolprefix 0 $slashPos];
:local prefixLen [:len $prefix];
:if ([:pick $prefix ($prefixLen - 2) $prefixLen] = "::") do={
:set prefix [:pick $prefix 0 ($prefixLen - 1)];
}
:local serverIPv6 ($prefix . $serverHost);
/ipv6/firewall/nat set [find comment="Web Server"] to-address=$serverIPv6;
:log info ("IPv6 NAT updated: " . $serverIPv6);
}Cómo funciona el script
El script:
- Obtiene el prefijo actual de
pool6(por ejemplo,2001:db8:abcd:ef00::/56) - Elimina la notación de longitud (
/56) y los::finales para aislar el prefijo de red - Añade la parte host estática para formar la dirección IPv6 completa
- Actualiza todas las reglas dstnat coincidentes identificadas por su campo
comment
Reglas básicas de firewall
Protege tu conexión con reglas de firewall esenciales para IPv4 e IPv6:
firewall-basic.rsc
# ═══════════════════════════════════════════════════════════════════════════════
# IPv4 FIREWALL - INPUT CHAIN
# ═══════════════════════════════════════════════════════════════════════════════
/ip firewall filter
# Accept established and related connections
add chain=input action=accept \
connection-state=established,related \
comment="Accept established/related"
# Drop invalid connections
add chain=input action=drop \
connection-state=invalid \
comment="Drop invalid"
# Accept ICMP (ping)
add chain=input action=accept \
protocol=icmp \
comment="Accept ICMP"
# Accept from LAN
add chain=input action=accept \
in-interface-list=LAN \
comment="Accept from LAN"
# Drop everything else from WAN
add chain=input action=drop \
in-interface-list=WAN \
comment="Drop all from WAN"
# ═══════════════════════════════════════════════════════════════════════════════
# IPv4 FIREWALL - FORWARD CHAIN
# ═══════════════════════════════════════════════════════════════════════════════
# FastTrack established connections
add chain=forward action=fasttrack-connection \
connection-state=established,related \
hw-offload=yes \
comment="FastTrack"
add chain=forward action=accept \
connection-state=established,related \
comment="Accept established/related"
# Drop invalid
add chain=forward action=drop \
connection-state=invalid \
comment="Drop invalid"
# Accept from LAN to WAN
add chain=forward action=accept \
in-interface-list=LAN \
out-interface-list=WAN \
comment="LAN to WAN"
# Drop everything else
add chain=forward action=drop \
comment="Drop all other forward"
# ═══════════════════════════════════════════════════════════════════════════════
# IPv6 FIREWALL - INPUT CHAIN
# ═══════════════════════════════════════════════════════════════════════════════
/ipv6 firewall filter
# Accept established and related
add chain=input action=accept \
connection-state=established,related \
comment="Accept established/related"
# Drop invalid
add chain=input action=drop \
connection-state=invalid \
comment="Drop invalid"
# Accept ICMPv6
add chain=input action=accept \
protocol=icmpv6 \
comment="Accept ICMPv6"
# Accept DHCPv6 client replies
add chain=input action=accept \
protocol=udp \
dst-port=546 \
src-address=fe80::/10 \
comment="Accept DHCPv6-Client prefix delegation"
# Accept from LAN
add chain=input action=accept \
in-interface-list=LAN \
comment="Accept from LAN"
# Drop from WAN
add chain=input action=drop \
in-interface-list=WAN \
comment="Drop all from WAN"
# ═══════════════════════════════════════════════════════════════════════════════
# IPv6 FIREWALL - FORWARD CHAIN
# ═══════════════════════════════════════════════════════════════════════════════
# Accept established and related
add chain=forward action=accept \
connection-state=established,related \
comment="Accept established/related"
# Drop invalid
add chain=forward action=drop \
connection-state=invalid \
comment="Drop invalid"
# Accept ICMPv6 for path MTU discovery
add chain=forward action=accept \
protocol=icmpv6 \
comment="Accept ICMPv6"
# Accept outbound from LAN
add chain=forward action=accept \
in-interface-list=LAN \
out-interface-list=WAN \
comment="LAN to WAN"
# Drop all other forward
add chain=forward action=drop \
comment="Drop all other forward"Logging de PPPoE
Opcionalmente, habilita el registro de eventos PPPoE para la resolución de problemas:
/system logging add \
topics=pppoe \
prefix="[PPPoE]" \
action=memoryResolución de problemas
PPPoE no conecta
- Verifica que el VLAN ID sea 20
- Comprueba el formato del usuario:
identificador@digi - Asegúrate de que el ONT esté en modo bridge
- Revisa la conexión del cable físico
No se recibe prefijo IPv6
- El cliente DHCPv6 debe estar en la interfaz PPPoE, no en la VLAN
- El tipo de solicitud debe ser
prefix, noaddress - Comprueba que el firewall permite DHCPv6 (UDP 546)
Los dispositivos LAN no obtienen IPv6
- Verifica que ND esté configurado para la interfaz bridge
- Comprueba que la dirección IPv6 del bridge tenga
advertise=yes - Asegúrate de que pool6 tenga un prefijo válido
Conclusión
Ahora tienes una configuración dual-stack completa para DIGI España con:
- Autenticación PPPoE sobre VLAN 20
- IPv4 dinámico con default route automática
- DHCPv6 Prefix Delegation para IPv6 nativo
- Gestión automática de cambios de prefijo
- SLAAC para configuración sencilla de dispositivos LAN
Esta configuración garantiza que tu red mantenga conectividad IPv4 e IPv6 completa incluso cuando el ISP cambie los prefijos asignados. El script DHCPv6 gestiona la complejidad de los cambios de prefijo, haciendo que la configuración sea realmente «configura y olvídate».
Preguntas frecuentes
¿Qué VLAN usa DIGI España para PPPoE?
DIGI España requiere VLAN tagging 802.1Q en la VLAN 20 para el tráfico PPPoE de internet. Si conectas directamente sin VLAN tagging, la autenticación PPPoE fallará.
¿Qué prefijo IPv6 delega DIGI vía DHCPv6-PD?
DIGI delega un prefijo dinámico /56 mediante DHCPv6 Prefix Delegation, lo que te da 256 subredes /64 para usar en tu LAN principal, IoT, red de invitados y más. El prefijo puede cambiar en cada reconexión.
¿Cómo gestiono el cambio de prefijo IPv6 de DIGI en cada reconexión?
Añade un script al cliente DHCPv6 que espere 5 segundos a que se rellene el pool, elimine la dirección anunciada antigua del bridge y añada una nueva desde el pool6 actualizado. Como la dirección usa advertise=yes, RouterOS crea automáticamente el ND prefix para SLAAC.
¿Por qué el MTU de PPPoE es 1480 si configuro max-mtu en 1500?
El parámetro max-mtu es solo el límite superior que el cliente acepta, no el MTU real de la conexión. El servidor PPPoE determina el MTU real durante la negociación LCP, y DIGI lo negocia hasta 1480 independientemente del valor de max-mtu.
¿Por qué no se autentica mi conexión PPPoE con DIGI?
Comprueba que el VLAN ID sea 20, que el usuario use el formato identificador@digi, que el ONT esté en modo bridge y que el cable físico esté conectado. El cliente DHCPv6 también debe estar en la interfaz PPPoE, no en la VLAN.
¿Funciona esta configuración de MikroTik con otros ISP además de DIGI?
Sí. Funciona con cualquier ISP basado en PPPoE que proporcione IPv6 vía DHCPv6-PD. Las diferencias entre ISPs suelen ser el ID de VLAN (o ausencia de VLAN), el MTU negociado (normalmente 1480–1492), el formato de usuario y el tamaño del prefijo delegado (/48, /56 o /64).
Lecturas y recursos adicionales
- DIGI España digimobil.es
- PPPoE IETF
- DHCPv6 Prefix Delegation (DHCPv6-PD) IETF
- MikroTik MikroTik
- VLAN tagging 802.1Q IETF
- negociación LCP IETF
- SLAAC IETF
- dirección EUI-64 IETF
- sufijo estático IETF