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

Silver Asu
RSS: 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

PHP 8.5 nüüd ametlikult väljas

PHP 8.5 nüüd ametlikult väljas

Ingmar Aasoja
Novembri lõpus nägi ilmavalgust PHP versioon 8.5, mida Zonei serverites oli võimalik juba mitu kuud alates beetaversioonist testida. Iga uue versiooniga...
Nüüd turvame sinu kirjavahetust ka lekkinud salasõna eest

Nüüd turvame sinu kirjavahetust ka lekkinud salasõna eest

Ardi Jürgens
Ainuüksi mõte lekkinud või ära arvatud salasõnast paneb ebausklikumad meist kolm korda üle vasaku õla sülitama. Loe lähemalt, mida Zone järgmise...
Luminescence Collection murdis müügirekordeid

Kuidas Luminescence Collection müügirekordeid murdis

Wilhem Luik
E-poe omanikele on hästi teada, et Musta Reede ajaks peab veebikeskkond olema valmis hüppeliselt kasvavaks külastatavuseks. Suurte kampaaniate ajal...
Luminescence Collection murdis müügirekordeid

Ole teistest ees! Värskendasime jõuliselt Zone brändi

Triin Lükk, Lemme Suve
Meil on hea meel tutvustada oma uut visuaalset keelt ja selgemat identiteeti, mis viib Zone järgmisele tasemele. See pole pelgalt uus logo või värvipalett...