Ühe anomaalia anatoomiast ehk millega me siin Zones päriselt tegeleme

Silver Asu
Jaga:

Käesolev blogipostitus kirjeldab ühe konkreetse probleemi lahendamist, millesarnastega meil Zones pidevalt kokku puutuda tuleb. Kui sind kõnetavad märksõnad DNS, domeen, IP-aadress, node.js, strace, MX- ja A-kirje, siis oled õiges kohas. Artikkel on tehnilisema iseloomuga, kuid see-eest annab ülevaate, kuidas jõuda ühe anomaalia juurpõhjuse tuvastamiseni.

Ühe anomaalia anatoomiast ehk millega me siin Zones päriselt tegeleme

Ühel ilusal päeval jõudis minu töölauale väga huvitav mure: Eesti Kirjandusmuuseumi domeenile kirmus.ee kirja edastades proovib meie avatud lähtekoodiga e-posti transpordisüsteem ZoneMTA kirja saata domeeniga seotud nimeserveri A kirje IP aadressile. Selgituseks: kirju saadetakse MX kirjele, A kirjele proovitakse saata kirju vaid siis, kui MX kirjet ei eksisteeri.

Veateade, mida uurime:

Network error: Network error when connecting to MX server kirmus.ee[193.40.6.100] for kirmus.ee: Connection timed out

Domeeni kirmus.ee MX kirje on postituvi.kirmus.ee, mille IP on 193.40.6.112, mitte .100 lõpuga, ehk server peaks proovima kirja .112 lõpuga IP peale saata.

Kuna esimene sümptom viitab DNS’ile, siis kõikidele itimeestele meenub esimese asjana see ütlus:

Aga kaevume sügavamale.

Esimese asjana uurime probleemi ulatust, aga logidest ühtegi sarnase murega domeeni ei leia. Seega probleem peab kuidagi kirmus.ee-spetsiifiline.

Vaatame nimeservereid:

Kirmus.ee kasutab Eesti Hariduse ja Teaduse Andmesidevõrgu EEnet nimeservereid. Proovime ühe testkirja saata suvalinenimi@eenet.ee aadressile.

Ja mida me näeme? Sarnast viga:

Network error: Error connecting to 141.101.90.16. Unexpected socket close

ZoneMTA proovib kirja saata eenet.ee A kirje IP aadressile ja see loomulikult ebaõnnestub.

Ehk probleem on seotud kuidagi EEneti nimeserveriga. Peast käib läbi mitmeid mõtteid. DNSSEC? Kirmus.ee DNSSEC on aktiivne. Kasutame erinevaid DNSSEC kontrollijaid – kõik paistab korras. Igalt poolt mujalt kontrollides ei paista samuti mingeid muresid… MX kirje vastuseks tuleb ilusasti postituvi.kirmus.ee (193.40.6.112).

Järgmine mõte – Zone nimeserveri resolver! Kuid ka see idee ei vii kuhugi, sest probleem on korratav ka seal, kus pole kasutusel Zone resolverid…

Aeg võtta välja päris tööriistad.

Käivitame strace ja uurime, mis tegelikult ZoneMTA protsessi sees toimub. Meid huvitab eelkõige nimelahenduse osa (strace näitab operatsioonisüsteemi madala taseme käske, mida programm välja kutsub. See võimaldab jälgida, kuhu ühendus luuakse, ning kust ja mis andmeid vastu saadakse):

Võtame appi ChatGPT, mis aitab resolveri vastust dekodeerida:

ChatGPT järgi paistab resolverist tulev vastus täiesti korrektne MX ja IP aadress. Aga miks ZoneMTA siis seda ei kasuta??

Võtame ette ZoneMTA koodi, kus lahendatakse domeeni MX kirjet. mx-connect/lib/resolve-mx.js at master · zone-eu/mx-connect

Kuidas on võimalik, et kood, mis on aastaid töötanud, nüüd järsku ühe nimeserveri puhul ei tööta?!?

Laseme ChatGPT-l kirjutada kiirelt testimiseks Node.js skripti, mis kasutab mx-connect.js moodulit kirmus.ee MX kirje resolvimiseks ja kuvab vastuse. Ja tõesti – testskript näitab, et mx-connect.js annab hoopis A kirje?!

Teavitame probleemist ZoneMTA arendajat. Arendaja vastab, et kõik on korras ja probleemi reprodutseerida ei õnnestu. Põnev.

Järgmiseks võrdleme Node.js versioone. Zone produktsioonis olevates serverites kasutusel olev Node.js versioon tõepoolest erineb arendajal olevast versioonist.

Kuna Zone veebimajutuses võtab suvalise Node.js versiooni installimine aega mõni sekund (täpsem info selle võimaluse kohta HelpZones), siis testime hüpoteesi erinevate versioonidega:

Nagu näha, siis kõige uuem Node.js annab vastuseks õige postituvi.kirmus.ee MX serveri.

Installime veel erinevaid Node.js versioone ja tuvastame täpselt, et see läks katki alates v20.13 ja sai korda v20.16.

Müsteerium lahendatud! Probleemi lõplikuks lahendamiseks on vaja vaid serverites Node.js versiooni uuendada.

Aga kust juurprobleem alguse sai?

Kõik sai alguse sellest c-ares@e862d1f Githubi commitist. Bug report ise on siin. Lühidalt: tegemist oli mingi spetsiifilise corruption bug’iga, mis avaldus vaid teatud erijuhtudel (ühegi Zones nimeserveritel oleva domeeni puhul see viga ei avaldunud).

Zones me küll proovime kohe mitte kõige uuemaid versioone kasutusele võtta ja oodata, et bugid välja tuleks, aga nagu näha, siis ikka saab komistatud täiesti tühja koha pealt tuleva bugi otsa.

Ootame ka tagasisidet, kas sooviksid veel selliseid “millega te päriselt seal Zones tegelete?” postitusi lugeda 🙂

Populaarsed postitused

Surve aegunud PHP-le on parandanud Eesti interneti turvalisust

Silver Asu
Zone käivitas sel aastal programmi, mille eesmärk on suunata kliente aegunud PHP-tarkvara uuendama, et vähendada turvariske, mis kaasnevad pärandtarkvara...

PHP 8.4 nüüd ametlikult väljas

Silver Asu
Novembri lõpus lasti välja PHP versioon 8.4. Zone klientidel on olnud võimalik PHP uut põlvkonda testida juba varasemate reliisidega: betast kuni release...

Zone+ AI Assistent nüüd veelgi targem

Silver Asu
Zone+ AI Assistent WordPressile on leidnud kasutust juba lugematute kodulehtede ehitamisel. Hiljuti saabus uuendus, mis annab rohkem valikuid nii uue lehe...

Täpitähtedega domeen sinu brändi teenistuses

Ants Korsar
Kaasaegses digimaailmas on domeeninimed brändi identiteedi olulised nurgakivid. Sinu domeeninimi on esimene asi, millega potentsiaalne klient veebis kokku...