Volver al Blog
20 min

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.

Imagen de portada de MikroTik PPPoE + DHCPv6-PD: Dual-Stack para DIGI España

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

8 puntos clave
  • PPPoE sobre VLAN 20 con el formato de usuario identificador@digi para la 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
  • MTU negociado a 1480 vía LCP independientemente de max-mtu=1500 — ese parámetro es solo el límite superior del cliente, no el MTU real del enlace
  • 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ámetros de conexión de DIGI
ParámetroValorNotas
Tipo de conexiónPPPoE sobre VLAN 20Requiere VLAN tagging
Dirección IPv4Dinámica (CGNAT o pública)Asignada vía PPPoE
Prefix IPv6Dinámico /56Vía DHCPv6-PD, puede cambiar en reconexiones
MTU1480 (negociado)PPPoE estándar, negociado vía LCP
MRU1492 (negociado)Maximum Receive Unit, negociado vía LCP
Service NameftthIdentificador del servicio PPPoE reportado por DIGI
DNSProporcionado por el ISP o personalizadoSe 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:

Configuración de la interfaz física routeros
/interface ethernet set [ find default-name=ether1 ] \
    comment="DIGI ONT" \
    rx-flow-control=auto \
    tx-flow-control=auto

Paso 2: crear la interfaz VLAN

DIGI requiere VLAN 20 tagging para el tráfico PPPoE. Crea la interfaz VLAN:

Configuración de VLAN routeros
/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:

Configuración del cliente PPPoE routeros
/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ámetros de configuración PPPoE
ParámetroValorPropósito
interfaceVLAN_DIGIPPPoE se ejecuta sobre la interfaz VLAN, no sobre el puerto físico
add-default-routeyesAñade automáticamente la default route al conectarse
use-peer-dnsyesUsa los servidores DNS de DIGI (se puede desactivar para DNS personalizado)
max-mtu1500MTU máximo que acepta el cliente. DIGI negocia hasta 1480 vía LCP
profiledefault-encryptionPerfil 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 cifrado
  • default-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.

Listas de interfaces routeros
# 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:

  1. Solicitar el prefix a DIGI
  2. Almacenarlo en un pool local
  3. Asignar direcciones a nuestra LAN desde ese pool
  4. Configurar Router Advertisements para SLAAC
Cliente DHCPv6 con script routeros
/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:

Dirección IPv6 en LAN routeros
/ipv6 address add \
    interface=bridge \
    address=::1/64 \
    from-pool=pool6 \
    advertise=yes

Esto 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:

IPv6 Neighbor Discovery routeros
# 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ámetros de Neighbor Discovery
ParámetroValorPropósito
ra-preferencehighLos clientes prefieren este router sobre otros
hop-limit64TTL para paquetes salientes (valor estándar)
dnsfe80::1Dirección link-local del router como DNS (RDNSS)
other-configurationyesIndica a los clientes que usen DHCPv6 para otras opciones

Paso 8: configurar NAT IPv4 (masquerade)

Para la conectividad IPv4 de salida:

Masquerade IPv4 routeros
/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

/interface pppoe-client print detail
Flags: X - disabled; R - running 0 R name="PPPoE_DIGI" max-mtu=1500 max-mru=auto mrru=disabled interface=VLAN_DIGI user="your_number@digi" password="****" profile=default-encryption keepalive-timeout=10 service-name="" ac-name="" add-default-route=yes default-route-distance=1 dial-on-demand=no use-peer-dns=yes allow=pap,chap,mschap1,mschap2 status=connected uptime=3d14h22m45s encoding="" local-address=79.117.xxx.xxx remote-address=10.0.0.1

Comprobar los valores negociados de PPPoE

/interface pppoe-client monitor PPPoE_DIGI once
status: connected service-name: ftth ac-name: ftth mtu: 1480 mru: 1492 local-address: 79.117.xxx.xxx remote-address: 10.0.x.x local-ipv6-address: fe80::xxxx:xxxx:x:xx remote-ipv6-address: fe80::1

Comprobar la delegación de prefix IPv6

/ipv6 pool print
Flags: D - dynamic 0 D name="pool6" prefix=2001:db8:abcd:ef00::/56 prefix-length=64

Comprobar las direcciones IPv6

/ipv6 address print where interface=bridge
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local 0 DG address=2001:db8:abcd:ef00::1/64 from-pool=pool6 interface=bridge advertise=yes

Probar la conectividad IPv6

/ping 2001:4860:4860::8888 count=4

Resumen completo de la configuración

pppoe-digi-complete.rsc 108 líneas
# ═══════════════════════════════════════════════════════════════════════════════
# 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:

Port forwarding IPv6 — Servidor web routeros
/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:

Script de actualización de NAT IPv6 routeros
/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

Dirección IPv6 completa

Sufijo host estático

Prefix delegado por el ISP

2001:db8:abcd:ef00

1111:2222:3333:4444

2001:db8:abcd:ef00:1111:2222:3333:4444

Construcción de la dirección IPv6

El script:

  1. Obtiene el prefix actual de pool6 (por ejemplo, 2001:db8:abcd:ef00::/56)
  2. Elimina la notación de longitud (/56) y los :: finales para aislar el prefix de red
  3. Añade la parte host estática para formar la dirección IPv6 completa
  4. 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 128 líneas
# ═══════════════════════════════════════════════════════════════════════════════
# 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:

Logging de PPPoE routeros
/system logging add \
    topics=pppoe \
    prefix="[PPPoE]" \
    action=memory

Resolució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, no address
  • 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».

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é prefix IPv6 delega DIGI vía DHCPv6-PD?

DIGI delega un prefix dinámico /56 mediante DHCPv6 Prefix Delegation, lo que te da 256 subnets /64 para usar en tu LAN principal, IoT, red de invitados y más. El prefix puede cambiar en cada reconexión.

¿Cómo gestiono el cambio de prefix 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 prefix delegado (/48, /56 o /64).