Hola javigm
He probado tu método pero no me ha funcionado, aunque me ha inspirado a comprar otra ONT y llevando a la IA por otro camino he conseguido hacerla funcionar. Os dejo el resumen ejecutivo.
Buenas a todos.
Comparto el procedimiento que he seguido para sustituir el equipo original Askey de Movistar por una ONT Huawei HN8010Ts-20 homologada para NEBA, conservando mi router MikroTik CCR2216 como terminador de la conexión PPPoE.
Resultado: funcionamiento correcto de Internet sobre Movistar XGS-PON con firmware S462, sin actualizar a S510.
He validado el registro óptico, el establecimiento de PPPoE, la asignación de dirección IPv4 pública y la conectividad real a Internet.
ONT:
- Fabricante: Huawei
- Modelo: HN8010Ts-20
- Hardware Version: 2D62.A
- Software Version: V5R022C00S462
- Custom Info: COMMON
Equipo original de Movistar:
- Router Askey con conexión XGS-PON.
- Serial óptico (SN) e IdONT previamente obtenidos.
Router propio:
- MikroTik CCR2216
- RouterOS 7
- PPPoE sobre VLAN 6
Equipo auxiliar:
- PC Linux conectado por Ethernet directamente a la ONT.
- Navegador con herramientas de desarrollador (F12).
Inicialmente se conecta el PC directamente a la Huawei, sin conectar la fibra óptica.
Dirección de administración:
http://192.168.100.1
Si es necesario, configurar manualmente en el PC:
- IP: 192.168.100.10
- Máscara: 255.255.255.0
- Gateway: vacío.
Se accede con el usuario administrativo telecomadmin y la contraseña correspondiente al equipo.
El objetivo es modificar dos parámetros internos:
- X_HW_PonSN: número de serie óptico PON.
- X_HW_PonHexPassword: identificador IdONT de Movistar.
No se ha necesitado modificar el campo visible XGS Registration ID / Password, que permanece vacío.
Con la sesión administrativa abierta, acceder a:
http://192.168.100.1/html/amp/ontauth/passwordcommon.asp
Abrir F12 → Network → Response y buscar:
new stDevInfo(
La estructura encontrada tiene este formato:
var stDevInfos = new Array( new stDevInfo( "InternetGatewayDevice.DeviceInfo", "SERIAL_PON_HEX", "10", "", "", "IDONT_HEX" ), null );
Los campos relevantes son:
- Segundo argumento: serial óptico PON.
- Sexto argumento: IdONT.
Antes de modificar nada recomiendo conservar los identificadores originales de la Huawei en un lugar seguro.
El SN del Askey se introduce como 16 caracteres hexadecimales.
Ejemplo ficticio:
SN original:
ASKY12345678
Representación hexadecimal:
41534B5912345678
El prefijo 41534B59 corresponde a ASKY en ASCII.
El IdONT se introduce en hexadecimal, con una longitud final de 20 caracteres.
En el procedimiento utilizado, un IdONT de 14 caracteres se completa con seis ceros a la derecha.
Es importante utilizar los identificadores de la propia línea y no copiar los valores de los ejemplos.
Este es el código utilizado satisfactoriamente para escribir ambos identificadores.
Se ejecuta desde la consola F12 del navegador, con la sesión administrativa de la Huawei abierta.
El script:
- Solicita el SN y el IdONT.
- Comprueba sus formatos.
- Recupera el token de la sesión.
- Escribe los identificadores mediante set.cgi.
- Vuelve a consultar los parámetros.
- Comprueba si los valores coinciden.
(async () => {
const url = "/html/amp/ontauth/passwordcommon.asp";
const endpoint = "/html/amp/ontauth/set.cgi?x=InternetGatewayDevice.DeviceInfo&RequestFile=html/amp/ontauth/passwordcommon.asp";
let sn = prompt("Serial óptico del Askey (ASKY + 8 hexadecimales)");
let idont = prompt("IdONT Movistar (14 o 20 caracteres hexadecimales)");
if (sn === null || idont === null) return;
sn = sn.trim().toUpperCase();
idont = idont.trim().toUpperCase();
if (/^ASKY[0-9A-F]{8}$/.test(sn))
sn = "41534B59" + sn.slice(4);
if (!/^41534B59[0-9A-F]{8}$/.test(sn))
throw Error("Formato de SN incorrecto");
if (!/^([0-9A-F]{14}|[0-9A-F]{20})$/.test(idont))
throw Error("Formato de IdONT incorrecto");
idont = idont.padEnd(20, "0");
const read = async () => {
const r = await fetch(url, {credentials: "same-origin"});
if (!r.ok) throw Error("Error de lectura HTTP " + r.status);
const html = await r.text();
const match = html.match(/new\s+stDevInfo\s*\((.*?)\)/s);
if (!match) throw Error("No se encuentra stDevInfo");
const values = [...match[1].matchAll(/"((?:\\.|[^"\\])*)"/g)]
.map(x => JSON.parse('"' + x[1].replace(/\\x([0-9a-fA-F]{2})/g, "\\u00$1") + '"'));
if (values.length !== 6)
throw Error("Estructura stDevInfo inesperada");
const doc = new DOMParser().parseFromString(html, "text/html");
const token = doc.querySelector("#onttoken, #hwonttoken, [name=onttoken], [name=hwonttoken]")?.value;
if (!token) throw Error("No se encuentra el token");
return { values, token };
};
const before = await read();
console.log("SN original:", before.values[1].slice(0, 8) + "********");
console.log("IdONT original:", before.values[5] ? "presente" : "vacío");
if (!confirm("¿Has guardado los identificadores originales y quieres aplicar los nuevos SIN GUARDARLOS permanentemente?"))
return;
const body = new URLSearchParams();
if (before.values[1].toUpperCase() !== sn)
body.set("x.X_HW_PonSN", sn);
if (before.values[5].toUpperCase() !== idont)
body.set("x.X_HW_PonHexPassword", idont);
if (![...body.keys()].length) {
console.log("Los identificadores ya coinciden. No hay cambios.");
return;
}
body.set("x.X_HW_ForceSet", "1");
body.set("x.X_HW_Token", before.token);
const r = await fetch(endpoint, {
method: "POST",
credentials: "same-origin",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
body,
});
const result = await r.text();
if (!r.ok || /ErrCode\s*=\s*['"]?(-?[1-9]\d*)/.test(result))
throw Error("La ONT ha rechazado la operación. No guardar.");
const after = await read();
const okSN = after.values[1].toUpperCase() === sn;
const okIdONT = after.values[5].toUpperCase() === idont;
console.table({
"Serial PON": okSN ? "CORRECTO" : "NO COINCIDE",
"IdONT": okIdONT ? "CORRECTO" : "NO COINCIDE"
});
console.log(okSN && okIdONT
? "Verificación correcta. Pendiente de guardar."
: "Verificación fallida. NO guardar ni reiniciar.");
})().catch(e => console.error(e.message));
El resultado obtenido fue:
Serial PON CORRECTO IdONT CORRECTO Verificación correcta. Pendiente de guardar.
Importante: este código aplica los valores y comprueba su lectura, pero el guardado persistente debe realizarse por separado.
Para guardar la configuración se utilizó la propia interfaz administrativa de Huawei.
Página:
http://192.168.100.1/html/ssmp/cfgfile/cfgfile.asp
En la consola F12 se identificó la función asociada al botón de guardado mediante:
document.getElementById("saveconfigbutton")?.getAttribute("onclick")
Resultado:
SaveSetting()
La función de guardado puede invocarse desde la consola:
SaveSetting()
En mi caso la ejecución provocó la salida de la sesión web. Posteriormente volví a acceder y completé el guardado desde la interfaz.
Después reinicié la ONT.
Para comprobar que los cambios habían quedado almacenados, volví a acceder a:
http://192.168.100.1/html/amp/ontauth/passwordcommon.asp
La estructura stDevInfo seguía mostrando el SN del Askey y el IdONT de Movistar.
Por tanto, la persistencia quedó verificada después del reinicio.
Conectada la fibra de Movistar, la Huawei presentó el siguiente comportamiento:
- LED PON parpadeando durante aproximadamente 20–30 segundos.
- Posteriormente, LED PON verde fijo.
- Estado estable durante la observación.
No fue necesario modificar el XGS Registration ID visible.
El registro por sí solo no demuestra conectividad IP, por lo que realicé también pruebas PPPoE.
Con el PC conectado directamente a la Huawei, creé una interfaz VLAN 6.
El nombre de la interfaz Ethernet física depende de cada equipo. En los ejemplos utilizaré enxXXXXXXXXXXXX.
sudo ip link add link enxXXXXXXXXXXXX name vlan6 type vlan id 6 sudo ip link set dev vlan6 type vlan egress-qos-map 0:1 sudo ip link set dev enxXXXXXXXXXXXX up sudo ip link set dev vlan6 up
Esta configuración aplica:
- VLAN ID: 6
- Prioridad 802.1p: 1
La comprobación del descubrimiento PPPoE se realizó mediante:
sudo pppoe-discovery -I vlan6
Resultado obtenido, omitiendo datos de la conexión:
Access-Concentrator: hl4mpv3-101 Cookie: [OCULTA] AC-Ethernet-Address: [OCULTA]
Se recibió correctamente una respuesta PADO del concentrador PPPoE de Movistar.
Posteriormente establecí una sesión PPPoE desde Linux con las credenciales habituales:
Usuario: adslppp@telefonicanetpa Contraseña: adslppp
La sesión negoció correctamente:
- Dirección IPv4 pública.
- Interfaz PPP activa.
- MTU de 1492 bytes.
- DNS de Movistar.
La conectividad se verificó directamente sobre ppp0:
ping -I ppp0 -c 5 1.1.1.1
Resultado:
3 packets transmitted, 3 received 0% packet loss rtt min/avg/max = 2.974/3.207/3.351 ms
También se comprobó la IP de salida:
curl -4 --interface ppp0 \ --connect-timeout 10 \ https://api.ipify.org
La dirección devuelta coincidió con la IPv4 pública negociada mediante PPPoE.
Esto confirmó que el servicio de Internet funcionaba realmente sobre la Huawei.
En el CCR2216 se configuró el cliente PPPoE sobre la VLAN 6 del puerto Ethernet conectado a la Huawei.
La topología definitiva es:
MOVISTAR XGS-PON | FIBRA | HUAWEI HN8010Ts-20 HW 2D62.A / FW S462 | ETHERNET | MIKROTIK CCR2216 | SFP28-1_WAN1 | WAN-MOVISTAR VLAN 6 | PPPoE-MOVISTAR | INTERNET
La interfaz VLAN se configura en RouterOS mediante:
/interface vlan add name=WAN-MOVISTAR \ interface=SFP28-1_WAN1 \ vlan-id=6
En mi caso, la interfaz VLAN ya existía y no fue necesario crearla nuevamente.
El cliente PPPoE se asoció a dicha VLAN:
/interface pppoe-client set [find name="PPPoE-MOVISTAR"] interface=WAN-MOVISTAR
Se conservaron las credenciales y el resto de parámetros PPPoE previamente configurados.
La conexión quedó operativa desde el CCR2216.
Un detalle relevante: aunque la prueba Linux se realizó con PCP 1, no fue necesario introducir reglas específicas de prioridad 802.1p en MikroTik para conseguir la conexión.
Por tanto, la VLAN 6 es necesaria en esta instalación, pero no he demostrado que PCP 1 sea obligatorio para establecer PPPoE.
La prueba confirma que la Huawei HN8010Ts-20, hardware 2D62.A y firmware V5R022C00S462, puede funcionar correctamente con Movistar XGS-PON.
En esta instalación:
- No fue necesario actualizar a S510.
- No fue necesario descifrar el XML de configuración.
- El SN del Askey se introdujo en hexadecimal.
- El IdONT se introdujo mediante X_HW_PonHexPassword.
- El campo visible XGS Registration ID permaneció vacío.
- Ambos identificadores persistieron tras reiniciar.
- Se completó el registro óptico.
- Se recibió PADO desde la red de Movistar.
- Se estableció PPPoE correctamente.
- Se obtuvo una dirección IPv4 pública.
- Se comprobó conectividad real a Internet.
- El CCR2216 quedó funcionando como router principal.
No he comprobado si el IdONT es estrictamente necesario en todas las líneas: únicamente que esta combinación de SN e IdONT funciona correctamente en la mía.
Tampoco he validado los servicios de voz ni de televisión de Movistar; las pruebas corresponden al servicio de Internet.
En definitiva: S462 funciona con Movistar XGS-PON, al menos con la combinación de ONT, hardware y perfil OLT probada. No parece imprescindible actualizar a S510 para disponer de Internet operativo.
Espero que el procedimiento sea útil para otros usuarios que tengan una Huawei HN8010Ts-20 y quieran utilizar su propio router con Movistar XGS-PON.
Un saludo!