WK 2026: Scoor de beste elektronica deals met ons advies Scoor jouw winnende opstelling tijdens dit WK

Tips & tricks Zyxel NR5307 5G router

Pagina: 1
Acties:

  • tikketak
  • Registratie: Mei 2026
  • Niet online
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.
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 Passthrough
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.
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
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.
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.js
Na een reboot is het originele bestand weer terug, dit is dus een goede kandidaat voor in het startup.sh script.
Opnieuw 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
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.
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
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).

[ Voor 28% gewijzigd door tikketak op 22-05-2026 18:31 ]


  • vierkant_bewijs
  • Registratie: Mei 2026
  • Laatst online: 08-05 10:57
Ohh interessant, thanks voor het delen! Ga het van het weekend eens proberen op die van mij.

Misschien wel handig om als disclaimer toe te voegen: doordat het operator management wordt uitgeschakeld, zullen er geen firmware-updates meer automatisch worden geïnstalleerd. En aangezien er op dit moment nog geen publieke firmware beschikbaar is voor dit model, zullen eventuele toekomstige security fixes ook niet terechtkomen op toestellen waarbij dit is toegepast.

Al vraag ik mij af of er geen mogelijkheid is om de firmware van de FWA515 te installeren, het ziet eruit als hetzelfde model namelijk.

  • Kroetone
  • Registratie: Februari 2017
  • Laatst online: 22:38
Welke software versie draait er op de NR5307?

Ik dacht dat er alleen met de oudste software geknutseld kon worden, vandaar de vraag.

  • Fanta_Tech
  • Registratie: Mei 2025
  • Laatst online: 29-05 19:42
Goed werk. Voor de duidelijkheid bij het uitvoeren van het script is een internetverbinding nodig (logisch, als je ff naar de code kijkt of door chatgpt haalt)

de banden doe in je in ssh op poortje 22. dat kan als je het script uitgevoerd hebt en als supervisor ingelogd bent, dus oftewel ipv "admin" in te voeren voer je "supervisor" in. en het wachtwoord wat je hebt gekregen uit je script of je eigen wachtwoord als je die ertussen hebt gezet.

Ethernet WAN is ook mogelijk op wan2. Hiervoor doe je het volgende:

Ga naar network setting > broadband > ethernet wan > zet die schakelaar aan > wacht op de reboot > daarna kun je bij broadband instellingen ETHWAN aanpassen (even opnieuw erop tikken als je iets anders ziet dan 3 interfaces)

ethwan interface

(en natuurlijk instellingen als er bij jou bijv PPPoE van toepassing is)

het belangrijkste is het schuifje bij general aan te zetten, samen met NAT en Apply as default gateway onder routing feature. anders werkt ie niet.

(In het nederlands vindt je m ook wel, heb de mijne op engels want fijner :D )

Als ethernet wan werkt gaat het wan lampje (de wereldbol) groen branden en het 5g lampje blauw knipperen.

[ Voor 43% gewijzigd door Fanta_Tech op 15-05-2026 09:52 ]


  • ernstoud
  • Registratie: Januari 2015
  • Laatst online: 00:40
Kroetone schreef op maandag 11 mei 2026 @ 16:53:
Welke software versie draait er op de NR5307?

Ik dacht dat er alleen met de oudste software geknutseld kon worden, vandaar de vraag.
Staat in de TS: “Geschreven voor versie V1.00(ACJG.1)NR53_b17D0430”.

Dat is de laatste door Odido verstuurde versie.

RIPE Atlas probe: 1005104


  • ernstoud
  • Registratie: Januari 2015
  • Laatst online: 00:40
Top, dit verhaal. Waardering voor deze hack!

Ik gebruik met veel plezier de NR7302 waar dit alles door SSH toegang ook mogelijk is, maar hier maak je veel Tweakers blij mee.

Zet je een link naar deze post ook even in de K&K thread ([Odido Klik&Klaar - 5G vast internet] Ervaringen & Discussie)?

Wellicht dat de TS van die thread (@marktweakt) ook een link hiernaar kan krijgen.

RIPE Atlas probe: 1005104


  • ernstoud
  • Registratie: Januari 2015
  • Laatst online: 00:40
Ik vind wel dat een kleine disclaimer nodig is…

Dit stuk JavaScript configureert de DDNS settings van de router zodanig dat de router eenmalig een extern script laadt en uitvoert, te weten:

https://tikketak.alwaysdata.net/nr5307/set_root.sh

Dit script en de maker ervan moet je dus vertrouwen. Doe je dat niet, deze hack niet uitvoeren.
Of zet het script op jeveigen webserver.

Dit is op dit moment dat script:
code:
1
2
3
4
5
6
7
8
9
10
11
 this shell script is part of https://gathering.tweakers.net/forum/list_messages/2334782

ztr69cli set \
Device.Cellular.AccessPoint.2.Enable=0 \
Device.ManagementServer.EnableCWMP=0 \
Device.X_ZYXEL_LoginCfg.LogGp.1.Account.1.Password="$NEW_PASSWORD" \
Device.X_ZYXEL_LoginCfg.LogGp.1.Account.2.Password="$NEW_PASSWORD" \
Device.X_ZYXEL_RemoteManagement.Service.5.Mode=LAN_ONLY \
Device.X_ZYXEL_Online_FW_Upgrade.Enable=0 \
Device.X_ZYXEL_Periodic_Online_FW_Upgrade.PeriodicCheckEnable=0 \
Device.X_ZYXEL_LifeMoteAgent.Enable=0
Waarbij opgemerkt wordt dat ztr69cli de Zyxel TR69 client is die in de firmware van de NR5307 zit. Dit script disabled alle externe beheer door Odido en/of Zyxel.

Ook staat in het contract met Odido voor je K&K abonnement: “Je krijgt het modem behorend bij de Dienst in bruikleen. Het modem blijft eigendom van Odido. Je mag geen wijzigingen op het modem aanbrengen.

Het is aan een ieder om deze hack wel of niet te installeren. Ikzelf rommel liever met eigen apparatuur dan aan die van de provider.

RIPE Atlas probe: 1005104


  • ernstoud
  • Registratie: Januari 2015
  • Laatst online: 00:40
vierkant_bewijs schreef op vrijdag 8 mei 2026 @ 10:54:
Al vraag ik mij af of er geen mogelijkheid is om de firmware van de FWA515 te installeren, het ziet eruit als hetzelfde model namelijk.
Nee. Andere chipset.

RIPE Atlas probe: 1005104


  • Marcjeno1
  • Registratie: Juli 2007
  • Laatst online: 01-06 14:49
Dankjewel Tikketak! Heb nu mooi passthrough draaien :). Updates zijn ook geblokkeerd na het draaien van je script toch?

  • Fanta_Tech
  • Registratie: Mei 2025
  • Laatst online: 29-05 19:42
ernstoud schreef op vrijdag 22 mei 2026 @ 20:23:
Ik vind wel dat een kleine disclaimer nodig is…

Dit stuk JavaScript configureert de DDNS settings van de router zodanig dat de router eenmalig een extern script laadt en uitvoert, te weten:

https://tikketak.alwaysdata.net/nr5307/set_root.sh

Dit script en de maker ervan moet je dus vertrouwen. Doe je dat niet, deze hack niet uitvoeren.
Of zet het script op jeveigen webserver.

Dit is op dit moment dat script:
code:
1
2
3
4
5
6
7
8
9
10
11
 this shell script is part of https://gathering.tweakers.net/forum/list_messages/2334782

ztr69cli set \
Device.Cellular.AccessPoint.2.Enable=0 \
Device.ManagementServer.EnableCWMP=0 \
Device.X_ZYXEL_LoginCfg.LogGp.1.Account.1.Password="$NEW_PASSWORD" \
Device.X_ZYXEL_LoginCfg.LogGp.1.Account.2.Password="$NEW_PASSWORD" \
Device.X_ZYXEL_RemoteManagement.Service.5.Mode=LAN_ONLY \
Device.X_ZYXEL_Online_FW_Upgrade.Enable=0 \
Device.X_ZYXEL_Periodic_Online_FW_Upgrade.PeriodicCheckEnable=0 \
Device.X_ZYXEL_LifeMoteAgent.Enable=0
Waarbij opgemerkt wordt dat ztr69cli de Zyxel TR69 client is die in de firmware van de NR5307 zit. Dit script disabled alle externe beheer door Odido en/of Zyxel.

Ook staat in het contract met Odido voor je K&K abonnement: “Je krijgt het modem behorend bij de Dienst in bruikleen. Het modem blijft eigendom van Odido. Je mag geen wijzigingen op het modem aanbrengen.

Het is aan een ieder om deze hack wel of niet te installeren. Ikzelf rommel liever met eigen apparatuur dan aan die van de provider.
Het klopt volgensmij wel wat je zegt idd, maar met een volledige reset lijkt het allemaal weer weg te zijn, dus gewoon resetten voor je m terugstuurt en klaar. Heb het inmiddels ook even op de haven gedaan waar dit draait (ligt alleen een adsl lijntje van kpn daar helaas) dus bridge mode is er ook, fijn, want misschien gaan we in de toekomst met Unifi aan de gang.

[ Voor 5% gewijzigd door Fanta_Tech op 29-05-2026 09:58 ]

Pagina: 1