"""Script para explicar IPv6-PD en tu router."""
import asyncio
from openwrt_ssh_mcp.ssh_client import ssh_client
async def explain_pd():
"""Muestra informaciΓ³n de Prefix Delegation."""
print("=" * 70)
print("π‘ IPv6 PREFIX DELEGATION (PD) - EN TU ROUTER")
print("=" * 70)
await ssh_client.connect()
print("""
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ΒΏQUΓ ES IPv6 PREFIX DELEGATION (PD)? β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Es como si tu ISP te dijera:
"No te doy UNA direcciΓ³n IP, te doy un EDIFICIO COMPLETO
de direcciones. TΓΊ decides cΓ³mo organizarlo."
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROCESO DE DELEGACIΓN (Lo que pasa en tu router) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. Tu router OpenWRT se conecta al ISP vΓa DHCPv6
2. Router dice: "Necesito un prefijo para mi red local"
3. ISP responde: "AquΓ tienes 2800:484:8f7e:3200::/56"
ββ Esto son 256 redes /64 completas
ββ 18 quintillones de IPs por red
ββ Total: 4.7 sextillones de IPs para ti
4. Tu router RECIBE y ALMACENA este prefijo delegado
5. Router ELIGE una subred para LAN (ej: subred 'd0')
ββ 2800:484:8f7e:32d0::/64
6. Router ANUNCIA esta subred a tus dispositivos vΓa RA
7. Tus dispositivos obtienen IPs automΓ‘ticamente en esa subred
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β VERIFICACIΓN EN TU ROUTER β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
""")
# Mostrar estado de la interfaz wan6
print("π Estado de wan6 (interfaz que recibe la delegaciΓ³n):")
print("-" * 70)
result = await ssh_client.execute("ubus call network.interface.wan6 status | grep -A 20 delegation")
if result["success"]:
print(result["stdout"])
# Mostrar el prefijo delegado
print("\nπ¦ PREFIJO DELEGADO POR EL ISP:")
print("-" * 70)
result = await ssh_client.execute("ubus call network.interface.wan6 status")
if result["success"]:
import json
try:
data = json.loads(result["stdout"])
if "ipv6-prefix" in data:
print("Prefijos recibidos:")
for prefix in data["ipv6-prefix"]:
address = prefix.get("address", "N/A")
mask = prefix.get("mask", "N/A")
print(f" β’ {address}/{mask}")
print(f" Valid: {prefix.get('valid', 'N/A')} segundos")
print(f" Preferred: {prefix.get('preferred', 'N/A')} segundos")
if "class" in prefix:
print(f" Clase: {prefix['class']}")
if "ipv6-prefix-assignment" in data:
print("\nπ ASIGNACIONES A INTERFACES LOCALES:")
for assignment in data["ipv6-prefix-assignment"]:
iface = assignment.get("interface", "N/A")
address = assignment.get("address", "N/A")
mask = assignment.get("mask", "N/A")
print(f" β’ {iface}: {address}/{mask}")
except:
print(result["stdout"][:800])
# Mostrar configuraciΓ³n UCI
print("\nβοΈ CONFIGURACIΓN UCI (wan6):")
print("-" * 70)
result = await ssh_client.execute("uci show network.wan6")
if result["success"]:
for line in result["stdout"].split("\n"):
if line.strip():
print(f" {line}")
print("\n" + "=" * 70)
print("""
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXPLICACIΓN DE LOS PARΓMETROS β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β’ proto='dhcpv6'
ββ Protocolo para pedir IP y prefijo al ISP
β’ reqaddress='try'
ββ Pide UNA direcciΓ³n IPv6 para la interfaz WAN
ββ Opciones: 'none', 'try', 'force'
β’ reqprefix='auto'
ββ ESTO ES LA DELEGACIΓN DE PREFIJO
ββ Pide un rango completo de IPs
ββ Opciones: 'auto', 'no', nΓΊmero (48, 56, 60, 64)
ββ 'auto' = acepta lo que el ISP ofrezca
β’ peerdns='0'/'1'
ββ Si acepta servidores DNS del ISP
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ΒΏCΓMO FUNCIONA LA DELEGACIΓN? β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ISP tiene: 2800:484:8f7e::/40 (rango enorme)
β
ββ Cliente 1: 2800:484:8f7e:3200::/56
β ββ Tu router (256 subredes)
β
ββ Cliente 2: 2800:484:8f7e:3300::/56
β
ββ Cliente 3: 2800:484:8f7e:3400::/56
Tu router toma: 2800:484:8f7e:3200::/56
β
ββ Subred 0: 2800:484:8f7e:3200::/64 (WAN)
ββ Subred d0: 2800:484:8f7e:32d0::/64 (LAN) β USAS ESTA
ββ Subred d1: 2800:484:8f7e:32d1::/64 (VLAN1)
ββ Subredes d2-ff: Disponibles para futuro
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β VENTAJAS DE IPv6-PD β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
No necesitas NAT (cada dispositivo tiene IP pΓΊblica)
β
Mejor rendimiento (conexiΓ³n directa end-to-end)
β
Puedes crear mΓΊltiples subredes (guest network, IoT, etc.)
β
MΓ‘s fΓ‘cil hospedar servicios (SSH, web server, etc.)
β
El prefijo se renueva automΓ‘ticamente
β
Escalable (puedes tener miles de dispositivos)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DIFERENCIAS CON OTROS MΓTODOS β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β’ Static IPv6: Configuras manualmente cada IP
ββ Tedioso, no escala
β’ 6to4/Tunnel: Encapsula IPv6 dentro de IPv4
ββ Lento, transitorio
β’ DHCPv6 simple: Solo UNA direcciΓ³n para el router
ββ No puedes dar IPs a tu LAN
β’ IPv6-PD: β
Rango completo delegado
β
Router distribuye a LAN
β
AutomΓ‘tico y escalable
""")
await ssh_client.disconnect()
print("\n" + "=" * 70)
print("β
CONCLUSIΓN")
print("=" * 70)
print("""
Tu router usa IPv6-PD correctamente:
β’ Recibe: 2800:484:8f7e:3200::/56 del ISP
β’ Asigna: 2800:484:8f7e:32d0::/64 a tu LAN
β’ Dispositivos obtienen IPs en ese rango automΓ‘ticamente
Β‘Todo estΓ‘ funcionando como debe ser! π
""")
if __name__ == "__main__":
asyncio.run(explain_pd())