Portál AbcLinuxu, 1. května 2025 01:31
Kvůli masivnímu spiknutí bezdrátových a jiných rozumných ISP, jsem v novém bytě nucen používat zlo známe jako DSL. K tomu používám modem, prodávaný jako "Zyxel VMG1312-B" (tuším že O2 a Tmobile ho dávají standardně k DSL smlouvám), který jako jeden z mála prodávaných umí IPv6. V následujícím dokumentuju, jak se s takovou krabičkou dá hrát. Obvyklý disclaimer -- takové hraní je na vlastní odpovědnost a můžete si tím ten modem natrvalo zničit.
Úvodem bych rád zmínil jednu skutečnost která mě dost irituje -- v přírodě (zřejmě) neexistuje "samostatný" DSL modem. Ideálně bych si ke svému routeru koupil něco např. do USB portu, co by dělalo jen ten modem. Ale nic takového není, takže jsem nucen vyhazovat peníze za celý další počítač s wifi, ethernetem, usb atakdále, který nakonec z toho nebude využívat skoro nic.
K samotnému modemu -- je to SoC od Broadcomu (BCM63268), procesor je 32bitový BE MIPS, 2 jádra, 64M RAM. Běží na něm (jak jinak) Linux s busyboxem. Co je docela zajímavé, dá se přímočaře získat root shell -- stačí telnet
na modem, čímž se dostaneme do jakéhosi admin prostředí, a tam zadáme nedokumentovaný příkaz sh
. Bude to chtít heslo (defaultně admin
) a jsme tam.
Standardní způsob nastavení téhle věci je, jako obvykle, přes webového poníka, což může být pro lidi jako já dost otravné a omezující. Zmíněný root shell je o dost lepší, ale člověk bych chtěl aby jeho nastavení přežila restart. Kam tedy můžeme zapisovat? Jsou tam zřejmě 4 oblasti -- /dev/mtd0
až mtd3
:
/data
. Do /data/psi
zřejmě ukládá nastavení ten jejich konfigurační systém. /firmware
, u mě je prázdný.
Takže do /data
a /firmware
si člověk může nahrát vlastní věci, ale jak je nacpat init
u? Jako init
zde funguje busybox
, který přečte /etc/inittab
, pustí /etc/init.d/rcS
a nakonec pustí sh
, čímž se pustí další hromada balastu z /etc/profile
. Člověk by mohl zkusit přemountovat root read-write, ale to se mi úplně nechtělo. Stala se ale jiná zcela zázračná věc -- na dotaz o zaslání zdrojáků mi Zyxel překvapivě odpověděl a skutečně jsem je dostal (sice to trvalo pár měsíců, ale přece jen). Co víc, nedostal jsem jen zdroje k GPL programům, ale celý strom včetně toolchainu, kterým se dá (při správné konstelaci hvězd) vygenerovat rovnou fimware image, který se přímo nahraje na modem přes web interface. S tím už se dá něco rozumného dělat. Ten strom lze najít na https://github.com/elenril/VMG1312-B a do releases jsem nahrál i zkompilovanou verzi, která se zdá být funkční. Pozor, toolchain je 32bitový (x86). Takže puristi si můžou zkompilovat vlastní, my ostatní si uděláme chroot/VM/container. Toolchain se musí nakopírovat do /opt
.
Ještě na závěr ke zmíněnému rescue modu -- pokud nějakým způsobem rozbijeme systém tak, že se na něj nedostaneme, stále není vše ztraceno. Vypneme modem, stiskneme a držíme tlačítko reset a zapneme modem. Reset držíme dokud nezčervená power LED. Pak se dá na 192.168.1.1
dostat na web interface kde můžeme nahrát nový funkční firmware.
Tiskni
Sdílej:
K samotnému modemu -- je to SoC od Broadcomu (BCM63268), procesor je 32bitový BE MIPS, 2 jádra, 64M RAM.Tyjo, to si docela vyhodili z kopýtka
a tam zadáme nedokumentovaný příkaz sh.To je prostě normální (no možná busyboxí) shell, jediný co je podivný, je proč to neloguje přímo do něj, ale můj d-link to má taky tak...
Jasně, s těmi horami paměti skoro nevim co dělat.K samotnému modemu -- je to SoC od Broadcomu (BCM63268), procesor je 32bitový BE MIPS, 2 jádra, 64M RAM.Tyjo, to si docela vyhodili z kopýtka.
Ano, ten shell do kterého se pak dostanu je busybox. Ale jak jsem to pochopil, tak ten není vůbec určen pro použití uživateli, spíš je to debugovací nástroj pro vývojaře který tam pak nechali (nebo zapoměli odstranit). "Správně" se má používat ten jejich omezný telnetí server.a tam zadáme nedokumentovaný příkaz sh.To je prostě normální (no možná busyboxí) shell, jediný co je podivný, je proč to neloguje přímo do něj, ale můj d-link to má taky tak...
/firmware
by měla být dočasná oblast pro uložení stahovaného firmwaru (exaktně by to šlo zjisti analýzou zdrojáků). Při nahrávání firmwaru se může buď celý soubor držet v paměti, nebo se ukládá do nějaké dočasné oblasti, aby se následně nahrál na určené místo. Tudíž je možné tuto oblast používat, ale minimálbně během upgradu firmware tam musí být dost místa na to, aby se tam vešel kompletní stahovaný soubor firmwaru.
Osobně, kdybych navrhoval mechanismus upgrade pro embedded zařízení takovéhoto typu, kde firmware (tj. root partition se všemi nutnými binárkami, knihovnami a vším ostaním) je menší než polovina velikosti úĺožiště (tj. FLASH paměti), tak bych spíš volil něco obdobného jako Dual BIOS na motherboardech od Gigabitu - mít dvě stejně velké oblasti a fungovat z jedné, zatímco se upgrade provádí do té druhé, pak stačí jen prohazovat parametr jádra (ve stylu root=/dev/mmcblk0pX
) nebo použít nějaký vlastní udělátor v iniramfs
, co vybere vždy novější ověřený firmware včetně jádra, které spustí přes kexec()
.
PS: V přírodě teď už existuje "samostatný" DSL modem - pro projek Turris byl vytvořen přesně takovýto kousek hardwaru s krásně morbidním názvem SMRT (Small Modem for Router Turris), viz konec stránky https://www.turris.cz/cs/hardware. Pokud by se prodával samostatně, byl by to perfekní řešení pro ne-DSL routery, co mají USB.
Nevím, jestli to bude i tento případm, ale ta poslední oblast připojená jako /firmware
by měla být dočasná oblast pro uložení stahovaného firmwaru (exaktně by to šlo zjisti analýzou zdrojáků). Při nahrávání firmwaru se může buď celý soubor držet v paměti, nebo se ukládá do nějaké dočasné oblasti, aby se následně nahrál na určené místo. Tudíž je možné tuto oblast používat, ale minimálbně během upgradu firmware tam musí být dost místa na to, aby se tam vešel kompletní stahovaný soubor firmwaru.
Yep, už jsem experimentálně přišel na to, že to tak opravdu je. Ale na pár skriptů je tam místa dost.
PS: V přírodě teď už existuje "samostatný" DSL modem - pro projek Turris byl vytvořen přesně takovýto kousek hardwaru s krásně morbidním názvem SMRT (Small Modem for Router Turris), viz konec stránky https://www.turris.cz/cs/hardware. Pokud by se prodával samostatně, byl by to perfekní řešení pro ne-DSL routery, co mají USB.O tom jsem slyšel a vypadá dost dobře, ale jestli to chápu dobře, tak pro běžného smrtelníka není získatelný, a kdoví jestli kdy bude.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.