[Ann] Paleo-DNS

Norbert and me looked at using DNS for service discovery and ran into some of the limitations of the NetNameResolver[1]. In the end I created an initial DNS implementation in Pharo called Paleo-DNS[2] to overcome these.

DNS is a protocol we use every day but rarely think of. There is an active IETF community that is evolving the protocol and finding new usages (service discovery is one of them).

In DNS there are different types of resource records (RR). The most commonly used ones in a client (“stub”) are “A” for IPv4 addresses, “AAAA” for IPv6 addresses, “CNAME” for aliases, “SRV” records. So far only support for “A” records was implemented.

So if you are curious about DNS then this is a great opportunity to add your favorite RR implementation to it and send a PR. There are probably 20+ of them to go. 😉

Query example using DNS-over-TLS (DoT) to Google Public DNS

PaleoDNSTLSTransport new
destAddress: #[8 8 4 4] port: 853;
timeout: 2 seconds;
query: (PaleoDNSQuery new
transactionId: (SharedRandom globalGenerator nextInt: 65535);
addQuestion: (PaleoRRA new rr_name: ‘pharo.org.’);
addAdditional: (PaleoRROpt new udpPayloadSize: 4096))

[1] It’s blocking on Unix, on Mac only one look-up may occur at a time and it returns exactly one address. There is also no IPv6 support.

[2] https://github.com/zecke/paleo-dns

%d bloggers like this: