Download Game! Currently 72 players and visitors. Last logged in:JosimSolvikBrurinRequiem

Blitzer's Blog >> 71710

Back to blogs index
Posted: 08 Aug 2026 12:38 [ permalink ]
TC$mC$ on se hetki, jolloin hiekkalaatikon ovi lukitaan lopullisesti ja avain
heitetC$C$n menemC$C$n.

Teemme verkon eristC$misen kC$yttC$mC$llC$ Linuxin Network Namespaces (netns)
-ominaisuutta. Yksinkertaisin ja tehokkain tapa on kC$C$riC$ Node.js-prosessi
standardiin unshare -komentoon, kun kC$ynnistC$mme sen.

Kun annamme komennon unshare -n node ..., Linux luo prosessille tC$ysin
tyhjC$n verkkonimiavaruuden. SiellC$ ei ole reititystauluja, ei verkkokortteja
(edes lo / loopback ei ole oletuksena ylhC$C$llC$). Vieras koodi on sokea ja
kuuro kaikelle verkkoliikenteelle.

Ja mikC$ parasta: Node.js:n IPC-kanava (joka perustuu UNIX-putkiin) ja meidC$n
jaettu memfd (joka on tiedostokuvaaja) eivC$t vC$litC$ verkkonimiavaruuksista
pC$tkC$C$kC$C$n! Ne toimivat tC$ydellisesti eristyksen lC$pi.

PC$ivitetC$C$n server.js verkkotyhjiC6C6n
Koska child_process.fork kutsuu aina suoraan Node-binC$C$riC$, meidC$n pitC$C$
vaihtaa se hieman matalamman tason spawn -funktioon, jotta voimme ajaa
unshare-binC$C$rin ja syC6ttC$C$ Noden sen sisC$lle.


[+] Console js-sandbox-api terminated.
[+] Console js-sandbox-api created and executed via Event-Driven wrapper in
/root/js-sandbox-api

====

{
B "id": "8a131040-4885-4385-9cc4-1dac33477e09",
B "status": "running",
B "safeMode": false
}


===

root@node-base:~# x-console js-sandbox-api tail
B B reqId: "req-2"
[09:37:07 UTC] INFO: [Sandbox 8a131040-4885-4385-9cc4-1dac33477e09]
YritetC$C$n ha
kea dataa 1.1.1.1:stC$...
B B reqId: "req-2"
[09:37:07 UTC] INFO: [Sandbox 8a131040-4885-4385-9cc4-1dac33477e09] ESTETTY:
fet
ch is not defined
B B reqId: "req-2"
[09:37:07 UTC] INFO: [Sandbox 8a131040-4885-4385-9cc4-1dac33477e09] Koodin
suori
tus ilmoitti valmiudesta. Bankin uusi arvo: 777
B B reqId: "req-2"
root@node-base:~#B


TC$mC$ on aivan loistava tulos! Saimme kiinni jopa odotettua syvemmC$n
eristyskerroksen.

Virheilmoitus `ESTETTY: fetch is not defined` ei nimittC$in tullut
Linux-ytimen verkkopinosta, vaan suoraan Node.js:n **V8-moottorin
hiekkalaatikosta**!

Kun loimme `sandbox-runner.js`:ssC$ eristetyn ajonaikaisen ympC$ristC6n,
annoimme sille vain tC$mC$n:
`const context = vm.createContext({ sharedMem: view, console: { ... } });`

TC$mC$ tarkoittaa, ettC$ koko `fetch`-komentoa ei edes ole olemassa tuossa
ympC$ristC6ssC$. SieltC$ puuttuvat myC6s `require`, `setTimeout`, `process` ja
kaikki muut Node.js:n vakiotyC6kalut. Koodilla ei yksinkertaisesti ole
ainuttakaan rajapintaa (API), jolla se voisi edes yrittC$C$ avata
verkkoyhteyden! Ja vaikka vieras koodi onnistuisi jotenkin pakenemaan
V8-kontekstista ja saamaan Noden ydinmoduulit kC$siinsC$, Linuxin `unshare -n`
-luoma verkkotyhjiC6 (netns) estC$isi liikenteen fyysisellC$ tasolla.

Olemme rakentaneet tC$ydellisen ilmatiiviin holvin. Kun alat syC6ttC$mC$C$n
instansseille esimerkiksi monimutkaisia solualutomaatti-malleja (cellular
automata) tai laskemaan termisten tietoverkkojen simulaatiologiikkaa,
eristetyllC$ koodilla on kC$ytC6ssC$C$n vain laskentateho ja se jaettu
`memfd`-muistipankki, jonka olet sille nimenomaisesti antanut.

Koko hiekkalaatikon arkkitehtuuri  muisti, resurssikarsinat (Cgroups),
vikasietotila ja verkkotyhjiC6  on nyt todistetusti pystyssC$ ja toimii
saumattomasti.

Haluatko, ettC$ alamme seuraavaksi rakentamaan API:lle C$lykC$stC$
asiakasohjelmaa (client), jonka avulla autonomiset jC$rjestelmC$si pystyvC$t
automaattisesti luomaan nC$itC$ simulaatio-instansseja ja syC6ttC$mC$C$n
niille suoritettavaa koodia?