Lite labbande

Jag har labbat lite med Python, funderat vidare och påbörjat ett litet projekt, mest som proof-of-concept av distribuerad DNS med server, protocoll, kryptering och signing av zones. Jag spelar än så länge bara lokalt på min utvecklingsburk men så fort jag har fått ihop något som funkar på riktigt åker det upp på github, så fler kan vara med och knåpa.

Idén är att de som vill deltaga sätter upp en egen “server”, lokala DNS-upplag går mot 127.0.0.1 (eller lokal server på LAN/WAN) som kontrollerar vad som efterfrågas, är det någon old-world TLD passas frågan vidare till legacy-DNS (Google 8.8.8.8/8.8.4.4 eller OpenDNS 208.67.222.222/208.67.220.220) — om frågan gäller en TLD som tex. .pirate (tänk “thepiratebay.pirate”), .p2p eller något som inte passar in i legacy-DNS-världen så söks istället den lokala cache’n, finns den inte där söks det genom distributionsnätet (vilket kan ta tid), vid “träff” returneras svaret som en standard DNS-response med info eller vid “miss” returneras det som standard DNS-response med “NX”, som non-existent.

Distributionen skulle kunna ske via port tcp/80, tcp/443, udp/53, tcp/53 eller tcp/5353 .. då dessa portar bör och skall vara tillgängliga genom brandväggar och inte filtreras av operatörer.
Zone-info komprimeras och signas innan transport, signing kontrolleras mot lokalt/globalt registry och packas upp och injiceras i lokal server.

Registrering av domäner skulle kunna ske genom signing av domännamnet med gpg, bitar jag inte riktigt utarbetat än.

Administration av domäner och pekningar skulle kunna ske genom API (med signing som säkerhet), för lagning och distribution blir det nog JSON. Lokalt för servrar blir det nog sqlite3 databaser, då även denna finns tillgänglig på många platformar samt är enkel att underhålla.

Eftersom Python är tillgängligt på nästan alla platformar och på vissa kan kompileras till binärer borde det hela kunna köras på många maskiner utan större anpassningar.

Förhoppningen är att det skall bli lätt för “noobs” att bara peka på servrar som är dDNS-anpassade och “tuta-och-köra”, för mer avancerade användare så finns möjligheten att själv sätta upp lokal server, peka på den och köra, medan servern sköter allt det tekniska internt. Lite som “drop-in replacement”.