Volver al Blog
José Manuel Requena Plens

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
  • 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á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:

ROUTEROSConfiguración de la interfaz física
/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:

ROUTEROSConfiguración de 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:

ROUTEROSConfiguración del cliente PPPoE
/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.

ROUTEROSListas de interfaces
# 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
ROUTEROSCliente DHCPv6 con script
/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:

ROUTEROSDirección IPv6 en LAN
/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:

ROUTEROSIPv6 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á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:

ROUTEROSMasquerade IPv4
/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
# ═══════════════════════════════════════════════════════════════════════════════
# 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:

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

ROUTEROSScript de actualización de NAT IPv6
/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
# ═══════════════════════════════════════════════════════════════════════════════
# 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:

ROUTEROSLogging de PPPoE
/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».