MikroTik PPPoE + DHCPv6-PD: Dual-Stack para DIGI España
Configura PPPoE con DHCPv6 Prefix Delegation en MikroTik RouterOS para DIGI España. VLAN tagging, SLAAC, gestión de cambios de prefix y firewall.

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 prefix 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 prefix, un reto habitual cuando tu ISP asigna prefixes dinámicos que pueden cambiar en cada reconexión.
Lo que vas a configurar
- PPPoE sobre VLAN 20 para autenticación en la fibra de DIGI España
- IPv4 dinámico con default route automática y DNS del ISP
- DHCPv6 Prefix Delegation (prefix /56) para conectividad IPv6 nativa
- SLAAC para asignación automática de direcciones IPv6 en dispositivos LAN
- Gestión automática de cambios de prefix con script DHCPv6 que actualiza las direcciones en cada reconexión
- Firewall listo para producción con cadenas input y forward para IPv4 e IPv6
- Probado en RouterOS 7.x con RB5009, pero aplicable a cualquier router MikroTik
Arquitectura de red
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 prefix /56 vía DHCPv6-PD (Prefix Delegation). Necesitamos:
- Solicitar el prefix 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 prefix 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 prefix 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 port forwarding
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 prefix 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 prefix 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 prefix actual de
pool6(por ejemplo,2001:db8:abcd:ef00::/56) - Elimina la notación de longitud (
/56) y los::finales para aislar el prefix 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 prefix 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 prefix 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 prefix
- 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 prefixes asignados. El script DHCPv6 gestiona la complejidad de los cambios de prefix, haciendo que la configuración sea realmente «configura y olvídate».