← Takaisin kirjoituksiin

Vanha Zyxel NAS540 + ZeroTier + ChatGPT + Codex

26.9.2026 10:00
Tämä projekti lähti liikkeelle oikeastaan jo paljon aikaisemmin. Olimme ChatGPT:n kanssa yrittäneet saada ZeroTierin toimimaan vanhassa Zyxel NAS540 -verkkotallennuslaitteessa, mutta silloin emme päässeet maaliin asti. Selvittelimme asiaa, kokeilimme eri vaihtoehtoja ja saimme kyllä paljon tietoa irti, mutta toimivaa lopputulosta ei syntynyt.

Kun myöhemmin rakensin erillisen, muusta verkosta eristetyn tekoäly-ympäristön ja aloin käyttää siellä ChatGPT:n työpöytäversiota sekä Codexia, tuli mieleen kokeilla samaa NAS540-projektia uudestaan. Nyt tilanne oli kuitenkin aivan toinen. En enää käyttänyt tekoälyä vain neuvojen antajana, vaan annoin Codexille käytännössä koko työn tehtäväksi.

NAS oli tyhjä ja kytketty samaan eristettyyn verkkoon Codex-koneen kanssa. Codex sai SSH-yhteyden laitteeseen ja alkoi tutkia sitä itse. Minä en kirjoittanut komentoja enkä tehnyt varsinaista asennustyötä, vaan seurasin mitä tapahtui ja annoin luvan suorittaa tarvittavat vaiheet. Oma osuuteni oli lähinnä fyysisissä kytkennöissä, ZeroTier-verkon hyväksynnässä sekä yhteyskokeissa toiselta laitteelta.

Tässä tuli hyvin näkyviin se ero, mikä tavallisella ChatGPT-keskustelulla ja Codexilla on. Aikaisemmin minä kysyin, sain ohjeita ja toteutin ne itse. Nyt Codex pystyi tutkimaan NAS:n järjestelmää, etsimään lähteitä, asentamaan tarvittavia työkaluja, kääntämään puuttuvan ajurin, muuttamaan koodia, tekemään testejä ja jatkamaan ongelman selvittämistä vaihe vaiheelta ilman, että minun piti itse rakentaa koko komentoketjua.

Ja tällä kertaa lopputulos syntyi.

Erityisen mielenkiintoista oli se, ettei kyse ollut mistään yksinkertaisesta valmiin ohjelmapaketin asentamisesta. Matkan varrella tuli vastaan vanhan Linux-ytimen yhteensopivuusongelmia, puuttuva TUN/TAP-ajuri, käynnistysmekanismin ongelmia ja lopulta vielä sellainen tilanne, jossa ZeroTier näytti olevan ONLINE ja verkon tila OK, vaikka varsinainen liikenne ei kulkenut. Codex jatkoi selvitystä aina pakettitasolle asti ja löysi lopulta yhteensopivuusongelman vanhan Linux-ytimen ja ZeroTierin väliltä.

Tämä projekti oli minulle ehkä tähän asti paras käytännön esimerkki siitä, mitä tekoäly voi mahdollistaa silloin, kun se ei enää vain vastaa kysymyksiin vaan pystyy työskentelemään oikeassa järjestelmässä. ChatGPT auttoi aikaisemmin asian ymmärtämisessä ja vaihtoehtojen selvittämisessä, mutta Codex vei työn tällä kertaa loppuun asti. Minä annoin sille tehtävän, se teki työn ja minä valvoin sekä hyväksyin etenemisen.

Alla oleva projektikuvaus on Codexin tekemä yhteenveto koko työstä. Olen jättänyt sen sellaiseksi kuin se on, koska siinä näkyy hyvin, mitä laitteelle tehtiin, missä kohdissa ongelmia tuli vastaan ja miten ne lopulta ratkaistiin.

----------------------------------------

Vanhalle Zyxel NAS540:lle uusi etäyhteys – ZeroTierin asennus alkuperäistä firmwarea vaihtamatta

Projektin lähtökohtana oli tyhjä Zyxel NAS540 -verkkolevypalvelin. Tavoitteena oli selvittää, saisiko siihen ZeroTierin avulla toimivan etäyhteyden. Työ tehtiin yhdessä tekoälyavustajan kanssa: minä vastasin laitteen fyysisistä kytkennöistä, ZeroTier-verkon hyväksynnästä ja toiselta laitteelta tehdyistä yhteyskokeista. Avustaja (Tekoälyagentti) tutki NAS:n järjestelmää, etsi lähteitä, valmisti tarvittavat ohjelmistot ja suoritti asennuksen SSH-yhteyden kautta.

Lopputuloksena ZeroTier saatiin toimimaan NAS:n alkuperäisessä käyttöjärjestelmässä. Se ei kuitenkaan onnistunut pelkällä valmiin ohjelmapaketin asentamisella. Matkan varrella piti ratkaista lähiverkon osoiteongelma, puuttuva verkkoajuri, vanhan Linux-ytimen yhteensopivuusongelma ja automaattikäynnistyksen erityispiirre. Projekti osoitti myös, miksi ohjelman ilmoittama ONLINE-tila ei vielä tarkoita, että varsinainen verkkoliikenne toimii.

Ensimmäiseksi NAS piti löytää lähiverkosta. Aluksi laite ilmoittautui nimipalvelussa osoitteella, joka kuului eri aliverkkoon kuin käytössä oleva tietokone. Hallintasivuun ei siksi saatu yhteyttä. Verkkokaapeli siirrettiin NAS:n toiseen verkkoliitäntään, joka oli asetettu hakemaan osoitteensa DHCP:llä. Tämän jälkeen laite sai nykyiseen lähiverkkoon sopivan osoitteen, vastasi ping-kyselyihin ja avasi hallintasivunsa.

Seuraavaksi varmistettiin kirjautuminen ja pääsy järjestelmään. Oletustunnuksilla kirjautuminen ei onnistunut, mutta oikeilla tunnuksilla hallintaan päästiin. NAS:ssa oli myös SSH-palvelu valmiiksi käytössä. Sen vanha toteutus vaati yhteyden muodostamiseen yhteensopivan SSH-asetuksen. Järjestelmää voitiin tämän jälkeen tutkia komentoriviltä ja tarvittavat ylläpitotyöt tehdä pääkäyttäjän oikeuksilla.

NAS:n järjestelmätiedot olivat työn kannalta ratkaisevia. Laitteessa oli kaksiytiminen ARMv7-suoritin, noin gigatavu keskusmuistia ja Zyxel-firmware V5.21(AATB.11). Linux-ytimen versio oli 3.2.54. Levyjärjestelmä oli toiminnassa, ja ohjelmien asentamiseen oli hyvin tilaa. Laitteen suorittimelle löytyi Entware-ohjelmistovarastosta ZeroTier-paketti, joten lähtökohta vaikutti lupaavalta.

Pelkkä sopivan ohjelmapaketin löytyminen ei kuitenkaan riittänyt. ZeroTier tarvitsee Linuxissa virtuaalisen verkkoliitännän, jonka toteuttamiseen käytetään TUN/TAP-ajuria. NAS:n järjestelmästä ei löytynyt tarvittavaa laitetiedostoa eikä ladattavaa ajurimoduulia. Myös yritys ladata ajuri järjestelmän omalla moduulityökalulla vahvisti puutteen. Ilman tätä osaa ZeroTierin tavallinen verkkotoiminta ei olisi onnistunut.

Tässä vaiheessa vaihtoehtoina olivat puuttuvan ajurin lisääminen, käyttöjärjestelmän vaihtaminen tai ZeroTierin ajaminen erillisessä lähiverkon laitteessa. Tässä projektissa päätettiin yrittää ajurin lisäämistä nykyiseen järjestelmään. Näin NAS:n oma hallinta ja alkuperäinen firmware voitiin säilyttää.

Ennen kokeiluja selvitettiin myös palautusmahdollisuuksia. Oli tärkeää erottaa toisistaan käsin ladattavan ajurin kokeileminen ja koko firmwaren tai käynnistyslataajan muuttaminen. Ensimmäiset ajurikokeet tehtiin ilman automaattikäynnistystä. Tällöin kokeiltu ajuri ei latautuisi uudelleen tavallisessa uudelleenkäynnistyksessä. Samalla selvisi, ettei täysin rikkoutuneen NAS540:n palautusta voi luvata pelkällä USB-tikulla: vaikeissa tapauksissa saatetaan tarvita laitteen avaamista ja sarjaporttiyhteyttä. Tässä työssä firmwarea tai käynnistyslataajaa ei lopulta tarvinnut kirjoittaa lainkaan.

Ajurin kääntämistä varten etsittiin juuri laitteen Linux-versioon sopivia lähteitä. Tämä oli tärkeämpää kuin pelkän NAS-mallin tai ARM-arkkitehtuurin täsmääminen. Uudemmasta NAS5xx-kehityshaarasta löytyi TUN-tuki, mutta sen Linux-versio oli jo eri kuin laitteessa. Sieltä löytyvää moduulia ei olisi voinut pitää suoraan yhteensopivana.

Lopulta löytyivät alkuperäiseen Zyxel 3.2.54 -lähdehaaraan perustuva lähdekoodi sekä NAS540:n aiemman 5.21-firmwaren käännösasetukset. Ne tarjosivat huomattavasti paremman pohjan kuin yleinen ARM-ytimen oletuskonfiguraatio. On silti hyvä täsmentää, etteivät nämä olleet laitteessa olevan firmwarejulkaisun täydelliset, erikseen varmennetut rakennusaineistot. Yhteensopivuutta arvioitiin lisäksi käynnissä olevan ytimen tietojen, alkuperäisten moduulien ja käytännön testien avulla.

NAS:n levylle asennettiin Entware sekä kääntäjä ja muut tarvittavat rakennustyökalut. Entware sijoitettiin erilliseen levyhakemistoon, joka liitettiin sen käyttämään `/opt`-hakemistoon. Alkuperäisen järjestelmän ohjelmia ei korvattu uudella Linux-jakelulla.

Myös asennusympäristössä oli korjattavaa. NAS:n pysyviin nimipalveluasetuksiin oli jäänyt vanhan lähiverkon palvelin, vaikka aktiivinen verkkoliitäntä käytti jo DHCP:llä saatua osoitetta. Internetiin pääsi suoraan osoitteella, mutta verkkotunnusten selvitys ei toiminut. Nimipalveluasetus korjattiin latausten ajaksi, ja alkuperäinen tiedosto säilytettiin. Vanhentuneiden varmenteiden vuoksi HTTPS-latauksia varten tuotiin myös ajantasainen CA-varmennepaketti. Pysyvää DNS-asetusta ei tässä työssä muutettu; uudelleenkäynnistys palautti alkuperäisen asetuksen.

Käännöstyökalujen kanssa tuli vastaan vielä yksi erillinen ongelma. GCC:n asetustiedosto oli jäänyt tyhjäksi, minkä vuoksi kääntäjä ilmoitti tavallisia komentorivivalitsimia tuntemattomiksi. Asetustiedosto luotiin uudelleen, ja kääntäjä alkoi toimia. Vanhan ytimen käännösjärjestelmään lisättiin lisäksi GCC 8:aa varten tarvittava otsaketiedoston yhteensopivuusjärjestely. Tämä muutos tehtiin lähdekoodin työskentelyhakemistoon.

TUN/TAP-moduuli saatiin tämän jälkeen käännettyä. Ennen sen lataamista tarkistettiin, että moduulin versiotunniste vastasi NAS:n omia moduuleja. Myös moduulin tarvitsemat 88 ulkoista symbolia löytyivät käynnissä olevan ytimen viemistä symboleista, ja moduulin keskeisen rakenteen koko vastasi alkuperäistä vertailumoduulia. Nämä tarkistukset eivät yksin todista täydellistä yhteensopivuutta, mutta ne auttoivat karsimaan ilmeiset ristiriidat. Moduuli ladattiin normaalisti ilman yhteensopivuustarkistusten pakotettua ohittamista.

Ensimmäinen toimintatesti tehtiin tilapäisellä TAP-liitännällä. Testiohjelma loi liitännän, nosti sen käyttöön ja siirsi Ethernet-kehyksiä molempiin suuntiin käyttöjärjestelmän ja TAP-laitteen välillä. Testi onnistui, ja tilapäinen liitäntä poistui testin päätyttyä. Tässä vaiheessa oli varmistettu ajurin perustoiminta, mutta ei vielä ZeroTierin koko liikenneketjua.

Seuraavaksi asennettiin ZeroTier 1.16.0. Palvelu käynnistyi ja sai yhteyden ZeroTierin infrastruktuuriin. NAS liitettiin haluttuun yksityiseen verkkoon, ja hyväksyin laitteen ZeroTier Centralissa. Sen jälkeen NAS sai virtuaaliverkon osoitteen ja verkon tilaksi tuli OK.

Automaattikäynnistys rakennettiin Zyxelin oman lisäohjelmien käynnistysmekanismin avulla. Käynnistysskripti liittää Entwaren hakemiston, lataa TUN/TAP-moduulin ja käynnistää ZeroTierin. Mukaan lisättiin tarkistus, joka estää oman moduulin lataamisen, jos Linux-ytimen versio joskus muuttuu. ZeroTierin identiteetti ja verkkoasetukset tallennettiin levylle, jotta laite säilyy samana jäsenenä käynnistysten välillä.

Ensimmäinen koko NAS:n uudelleenkäynnistys paljasti uuden ongelman. Koska laite oli lisäohjelmien osalta tyhjä, siltä puuttui Zyxelin paketinhallinnan odottama riippuvuustiedosto. Käynnistysjärjestelmä keskeytti lisäohjelmien käsittelyn jo ennen omaa käynnistysskriptiä. Puuttuva tiedosto luotiin tarvittavilla otsakkeilla, minkä jälkeen Zyxelin käynnistysmekanismi suoritti oman skriptin oikein. Uusi uudelleenkäynnistystesti vahvisti, että ajuri ja ZeroTier käynnistyivät automaattisesti ja verkkoliitos säilyi.

Tässä kohdassa järjestelmä näytti jo valmiilta: ZeroTier oli ONLINE, verkon tila oli OK ja NAS:n hallintasivu vastasi NAS:n itsensä tekemään pyyntöön virtuaaliverkon osoitteessa. Varsinainen yhteys toiselta ZeroTier-laitteelta ei kuitenkaan vielä toiminut. Kun kokeilin pingata NAS:ia toiselta laitteelta, vastauksia ei tullut.

Tämä oli projektin tärkein havainto testauksen kannalta. Paikallinen yhteys NAS:n omaan osoitteeseen ei kulje samaa reittiä kuin toiselta ZeroTier-laitteelta saapuva liikenne. Myöskään palvelun ONLINE-tila ei varmista, että virtuaalisen verkkoliitännän lähetys ja vastaanotto toimivat oikein.

Vikaa tutkittiin tarkistamalla reititys, liitännän laskurit, ICMP-asetukset ja saapuvien pakettien otsakkeet. Toisen laitteen ARP-kyselyt saapuivat NAS:iin. ZeroTier siis vastaanotti liikennettä ja välitti sitä virtuaaliliitännälle. Lähetyslaskuri pysyi kuitenkin nollassa, eikä NAS:n vastausliikenne päätynyt takaisin verkkoon.

Varsinainen syy löytyi ZeroTierin ja vanhan Linux-ytimen yhteistoiminnasta. ZeroTier asetti virtuaaliliitännän MAC-osoitteen ensin alustuksen aikana ja yritti asettaa saman osoitteen uudelleen sen jälkeen, kun liitäntä oli nostettu käyttöön. NAS:n vanhan ytimen osoitteenasetusfunktio palautti tässä tilanteessa virheen, vaikka osoite ei todellisuudessa muuttunut. ZeroTierin kyseinen säie poistui virheen vuoksi ennen kuin se alkoi lukea käyttöjärjestelmän lähettämiä paketteja TAP-laitteesta.

Sama virhe selitti myös aiemmin havaitun MTU-poikkeaman: liitännän pakettikoko oli jäänyt oletusarvoonsa, koska alustuskoodi ei ollut edennyt sen asettamiseen asti. Aluksi tätä oli korjattu erillisellä käynnistyksen jälkeisellä skriptillä. Se korjasi pakettikoon, mutta ei lähetyksen varsinaista ongelmaa.

Lopullinen ratkaisu tehtiin TUN/TAP-ajuriin rajattuna yhteensopivuuskorjauksena. Ajuri muutettiin hyväksymään saman, jo käytössä olevan MAC-osoitteen asettaminen uudelleen liitännän ollessa päällä. Varsinaiset osoitteen muutokset jäivät edelleen ytimen alkuperäisen tarkistuksen piiriin. Näin korjaus koski vain tarpeetonta uudelleenasetusta.

Korjattu moduuli käännettiin, edellinen versio säilytettiin varmuuskopiona ja uusi ajuri vaihdettiin käyttöön ZeroTier-palvelun ollessa pysäytettynä. Koko NAS:n firmwarea ei tarvinnut vaihtaa eikä laitetta tässä vaiheessa käynnistää uudelleen. Kun palvelu käynnistettiin uudella ajurilla, liikenne alkoi kulkea molempiin suuntiin. Myös MTU asettui nyt oikein ZeroTierin omalla alustuksella, joten erillinen MTU-kiertotie poistettiin käytöstä.

Tällä kertaa toimivuus varmistettiin oikealla laitteiden välisellä yhteydellä. NAS sai toiselta ZeroTier-laitteelta neljä ping-vastausta neljästä, ilman pakettihävikkiä. Viive oli kyseisessä kokeessa noin 89 millisekuntia. Myös kahden suuremman, 2000 tavun ping-paketin testi onnistui ilman hävikkiä. Lopuksi vahvistin yhteyden toimivan myös omasta päästäni. Nämä kokeet osoittivat yhteyden toimivuuden, mutta ne eivät olleet tiedostonsiirron suorituskyky- tai pitkäaikaisvakaustesti.

Projektin lopputuloksena vanha NAS540 sai toimivan ZeroTier-yhteyden alkuperäisen Zyxel-firmwaren rinnalle. Automaattikäynnistys testattiin koko laitteen uudelleenkäynnistyksellä ennen viimeistä ajurikorjausta. Korjattu ajuri tallennettiin samaan automaattikäynnistyksen käyttämään paikkaan ja testattiin palvelun uudelleenkäynnistyksellä sekä laitteiden välisellä liikenteellä. Varsinaista äkillistä sähkökatkoa ei käytetty testimenetelmänä. NAS:n automaattinen käynnistyminen sähkön palauduttua on lisäksi erillinen laiteasetus, jota tässä projektissa ei tarkistettu.

Työstä jäivät talteen rakennusskriptit, ajurikorjaus, käännetty moduuli, asennusmuistiinpanot ja käytöstäpoistoskripti. Käytöstäpoisto pysäyttää palvelun ja poistaa tämän asennuksen automaattikäynnistysmerkinnät, mutta säilyttää ohjelmatiedostot ja ZeroTier-identiteetin. Kyseessä ei ole täydellinen firmwarevarmuuskopio, vaan dokumentoitu ja peruttavaksi tehty lisäys olemassa olevaan järjestelmään.

Tekoälyavustaja auttoi tässä ennen kaikkea tutkimustyön, komentorivityön ja ohjelmistokehityksen yhdistämisessä. Se etsi lähteitä, luki vanhoja käynnistysskriptejä, käänsi ajurin ja rajasi lopulta verkkovian pakettitasolle asti. Ihmisen tekemä yhteyskoe oli silti ratkaiseva: vasta se paljasti, että aluksi lupaavilta näyttäneet tilatiedot eivät vastanneet todellista käytettävyyttä. Toimiva lopputulos syntyi havaintojen, korjausten ja oikeiden yhteyskokeiden kautta.

----------------------------------------

Yksi tämän projektin opetuksista on asia, jonka jätin tarkoituksella itse tekemisen aikana vähemmälle huomiolle. Se on tietoturva. Käytännössä näin vanhan NAS-laitteen pitäminen verkossa on jo itsessään kyseenalaista. Projekti ei tee vanhasta NAS540:stä uutta eikä valmistajan edelleen tietoturvapäivityksillä ylläpitämää laitetta. Laite on edelleen vanha ja sen valmistajatuki on päättynyt. ZeroTierin avulla sitä voidaan kuitenkin käyttää ilman, että NAS:n omia palveluita tarvitsee avata suoraan internetiin. Codexin tekemät muutokset rajattiin dokumentoituun TUN/TAP-ajuriin ja käynnistykseen, mutta vastuu niiden ylläpidosta jää tämän jälkeen käyttäjälle.

Tämä ei siis ole mitenkään yksiselitteinen projekti. Yksi sen opetuksista oli minulle kuitenkin se, että tekoäly mahdollistaa ainakin osittain sellaistenkin laitteiden hyödyntämisen, joiden varsinainen ohjelmisto- ja tietoturvatuki on päättynyt jo aikoja sitten. Se ei tee laitteesta turvallista, mutta se voi mahdollistaa asioita, joita siihen ei enää muuten olisi helposti mahdollista rakentaa.

Toinen ja ehkä vielä tärkeämpi asia liittyy siihen, miten tämän työn annoin Codexin tehdä. Annoin tekoälyagentille käytännössä täydet oikeudet suorittaa tarvittavia komentoja. Se tutki järjestelmää, latasi ohjelmia ja lähdekoodia, käänsi ajurin, muutti sitä ja asensi tarvittavat osat. Minä seurasin tekemistä ja annoin lupia etenemiseen, mutta rehellisesti sanottuna minulla ei ole mahdollisuutta tarkistaa kaikkea sitä, mitä järjestelmässä tehtiin, enkä edes ymmärrä jokaista teknistä yksityiskohtaa riittävän syvällisesti pystyäkseni varmistamaan kaiken itse.

Juuri tämän vuoksi kyseinen NAS ei tule olemaan paikka, johon tallennan mitään tärkeää dataa. Koko projekti tehtiin erillisessä verkossa, jonka olen rakentanut juuri tällaisia kokeiluja varten. Siellä voin antaa tekoälylle enemmän vapauksia ja samalla hyväksyä sen, että jokin voi myös mennä pieleen.

Tässä tullaan oikeastaan asiaan, jota olen tämän ympäristön rakentamisen ja näiden kokeilujen kautta yrittänyt itselleni hahmottaa. Minä teen näitä tarkoituksella eristetyssä ympäristössä ja tiedän ainakin suunnilleen, millaisen riskin otan. Entä sitten, kun samanlaisia tekoälyagentteja aletaan käyttää yrityksissä, julkishallinnossa, kunnissa ja kaupungeissa? Siellä on valtava määrä erilaisia järjestelmiä, erilaisia käyttäjiä ja myös hyvin eritasoista ymmärrystä siitä, mitä tekoälyagentille oikeastaan annetaan lupa tehdä.

Tekoälyagentti voi olla aivan uskomattoman tehokas työkalu, kuten tämäkin projekti osoitti. Samalla juuri tehokkuus tekee siitä myös uudenlaisen riskin. Jos käyttäjä antaa sille täydet oikeudet järjestelmään ymmärtämättä kunnolla ympäristöä tai seurauksia, agentti pystyy tekemään hyvin nopeasti paljon enemmän kuin ihminen ehtisi käsin tehdä. Minun tapauksessani tämä tapahtui tyhjällä NAS-laitteella ja erillisessä testiverkossa. Oikeassa tuotantoympäristössä lähtökohta voisi olla aivan toinen.

Ehkä juuri tämä onkin yksi koko projektin tärkeimmistä opetuksista minulle. Ei pelkästään se, että Codex sai ZeroTierin toimimaan vanhassa NAS540:ssä, vaan se, kuinka paljon valtaa tällaiselle tekoälyagentille voidaan jo nyt antaa. Kun sen näkee käytännössä omassa ympäristössä, ymmärtää samalla paljon paremmin myös ne skenaariot, joissa sitä käytetään väärässä paikassa, liian suurilla oikeuksilla tai ilman riittävää ymmärrystä siitä, mitä ollaan tekemässä. Siinä kohtaa tämä pieni NAS-kokeilu muuttui minulle paljon isommaksi asiaksi kuin pelkäksi ZeroTierin asentamiseksi vanhaan verkkolevypalvelimeen.

Projektissa käytettyjä julkisia lähteitä ovat
Entwaren Zyxel-asennusohje,
Entwaren ARMv7-pakettilista,
Zyxel-ytimen lähdehaara,
NAS540:n käännösaineistojen arkisto,
ZeroTierin Linux-verkkoliitännän lähdekoodi ja
ZeroTierin asiakasasetusten dokumentaatio.