+0.26 DNS Esoterica – Why you can't dig Switzerland (shkspr.mobi S:+0.26 )
703 points by edent 1325 days ago | 113 comments on HN | Mild positive Editorial · v3.7 · 2026-02-28 13:52:25
Summary Education & Technical Knowledge Acknowledges
A technical blog post explaining a DNS protocol quirk affecting Switzerland's country code (.ch interpreted as Chaosnet rather than country code). The content contributes to technical education and internet culture documentation through accessible explanation of complex systems. Structurally, the blog demonstrates openness through free access, active commenting, and social sharing, supporting rights to education, freedom of expression, and participation in scientific and cultural life.
Article Heatmap
Preamble: ND — Preamble Preamble: No Data — Preamble P Article 1: ND — Freedom, Equality, Brotherhood Article 1: No Data — Freedom, Equality, Brotherhood 1 Article 2: ND — Non-Discrimination Article 2: No Data — Non-Discrimination 2 Article 3: ND — Life, Liberty, Security Article 3: No Data — Life, Liberty, Security 3 Article 4: ND — No Slavery Article 4: No Data — No Slavery 4 Article 5: ND — No Torture Article 5: No Data — No Torture 5 Article 6: ND — Legal Personhood Article 6: No Data — Legal Personhood 6 Article 7: ND — Equality Before Law Article 7: No Data — Equality Before Law 7 Article 8: ND — Right to Remedy Article 8: No Data — Right to Remedy 8 Article 9: ND — No Arbitrary Detention Article 9: No Data — No Arbitrary Detention 9 Article 10: ND — Fair Hearing Article 10: No Data — Fair Hearing 10 Article 11: ND — Presumption of Innocence Article 11: No Data — Presumption of Innocence 11 Article 12: ND — Privacy Article 12: No Data — Privacy 12 Article 13: ND — Freedom of Movement Article 13: No Data — Freedom of Movement 13 Article 14: ND — Asylum Article 14: No Data — Asylum 14 Article 15: ND — Nationality Article 15: No Data — Nationality 15 Article 16: ND — Marriage & Family Article 16: No Data — Marriage & Family 16 Article 17: ND — Property Article 17: No Data — Property 17 Article 18: ND — Freedom of Thought Article 18: No Data — Freedom of Thought 18 Article 19: +0.24 — Freedom of Expression 19 Article 20: ND — Assembly & Association Article 20: No Data — Assembly & Association 20 Article 21: ND — Political Participation Article 21: No Data — Political Participation 21 Article 22: ND — Social Security Article 22: No Data — Social Security 22 Article 23: ND — Work & Equal Pay Article 23: No Data — Work & Equal Pay 23 Article 24: ND — Rest & Leisure Article 24: No Data — Rest & Leisure 24 Article 25: ND — Standard of Living Article 25: No Data — Standard of Living 25 Article 26: +0.28 — Education 26 Article 27: +0.33 — Cultural Participation 27 Article 28: ND — Social & International Order Article 28: No Data — Social & International Order 28 Article 29: +0.20 — Duties to Community 29 Article 30: ND — No Destruction of Rights Article 30: No Data — No Destruction of Rights 30
Negative Neutral Positive No Data
Aggregates
Editorial Mean +0.26 Structural Mean +0.26
Weighted Mean +0.26 Unweighted Mean +0.26
Max +0.33 Article 27 Min +0.20 Article 29
Signal 4 No Data 27
Volatility 0.05 (Low)
Negative 0 Channels E: 0.6 S: 0.4
SETL +0.02 Editorial-dominant
FW Ratio 58% 11 facts · 8 inferences
Evidence 8% coverage
4M 27 ND
Theme Radar
Foundation Security Legal Privacy & Movement Personal Expression Economic & Social Cultural Order & Duties Foundation: 0.00 (0 articles) Security: 0.00 (0 articles) Legal: 0.00 (0 articles) Privacy & Movement: 0.00 (0 articles) Personal: 0.00 (0 articles) Expression: 0.24 (1 articles) Economic & Social: 0.00 (0 articles) Cultural: 0.30 (2 articles) Order & Duties: 0.20 (1 articles)
HN Discussion 20 top-level · 27 replies
JoeyBananas 2022-07-14 12:16 UTC link
This is article is a gem. There are so many quirks like this in various ancient utilities.
amir 2022-07-14 12:21 UTC link
Going even further down the DNS tree, you can

  dig . NS
to get the root nameservers
edent 2022-07-14 12:21 UTC link
As pointed out by someone on Mastodon - this also fails if you try to dig India's ccTLD.

https://hackers.town/@seachaint/108645588430551049

lifthrasiir 2022-07-14 12:22 UTC link
The full list: https://www.iana.org/assignments/dns-parameters/dns-paramete...

I recall (All) DNS Resource Records listed [1], which is another treasure of historical tidbits.

[1] https://www.netmeister.org/blog/dns-rrs.html

teddyh 2022-07-14 12:29 UTC link
When writing scripts, always use the options to dig; i.e. in this case, use

   dig -q ch -t NS
instead of

  dig ch NS
Using the options eliminates any possibility of misinterpretations like this.
larsbrinkhoff 2022-07-14 12:41 UTC link
Funny coincidence. I'm helping out with a Chaosnet demo going live this Saturday.

https://wiki.dfupdate.se/projekt:mini-conference

alexpotato 2022-07-14 12:52 UTC link
This article reminds me of the Unicode Japanese "Ghost" characters: https://www.dampfkraft.com/ghost-characters.html

Long story short:

Someone entered some characters erroneously in the Unicode spec and now those characters are there FOREVER.

jgrahamc 2022-07-14 12:59 UTC link
It used to be the case that you couldn't start a tweet with "M Night Shyamalan". Actually, with "M " but "M Night Shyamalan" made it seem more spooky.
signal11 2022-07-14 13:19 UTC link
Ironically I was just looking at nslookup's man page[1] the other day and this bit of history is hinted at there:

    class=value

    Change the query class to one of:

    IN
        the Internet class
    CH
        the Chaos class
    HS
        the Hesiod class
    ANY
        wildcard
Man pages have amazing nuggets of history in them if one chooses to dig in!

[1] https://linux.die.net/man/1/nslookup

nly 2022-07-14 14:23 UTC link
The DNS "master file"/"zone file" format is a bloody disaster for the same reason, and practically unparseable. Every implementation parses them differently when it comes to parenthesis.

From the grammar in RFC 1035:

    <domain-name><rr> [<comment>]

    <blank><rr> [<comment>]

    <rr> contents take one of the following forms:

        [<TTL>] [<class>] <type> <RDATA>

        [<class>] [<TTL>] <type> <RDATA>
All the columns being optional creates the ambiguity between the <class> and <domain-name> columns in the TTL missing/2nd form. In the real world <class> is always "IN". It's even worse since the set of <type>'s is unbounded and the <RDATA> grammar depends on <type>

I believe this is one reason why tinydns has its own format https://cr.yp.to/djbdns/tinydns-data.html

gumby 2022-07-14 15:01 UTC link
I don’t know why the author laughed about Hesiod,* which, like chaosnet was another MIT protocol in use for a while.

There was a time when these records were handy — I was pretty excited when I could connect directly from my desktop machine at PARC to a host at the AI lab on the MIT chaosnet. Before the ARPANET transitioned to TCP I had to manually hop through a couple of protocol gateways to make connections like these. Afterwards it was transparent.

BTW CHAOS used strings to identify ports/protocols rather than reserved numbers. So there is a lot you can store in a compliant implementation of the DNS.

* Also the bane of some high school classes, but that’s quite another matter.

dixie_land 2022-07-14 15:09 UTC link
TIL Switzerland is named after Apple’s favorite font.
Waterluvian 2022-07-14 15:48 UTC link
Bell bottoms were not a failed experiment. They’re awesome and need to return.
HomeDeLaPot 2022-07-14 16:39 UTC link
DNS Erotica?!? ... I can't read.
remram 2022-07-14 17:25 UTC link
So this is an ambiguity in dig's command-line parser? Not any failing of the DNS system?
monkaiju 2022-07-14 19:33 UTC link
Great article, I did know about this at all... DNS is super interesting. I wrote dug, a cli tool I made to help visualize DNS 'propagation' but is a great learning tool. Similar to dig and dog, but specifically for querying or watching large numbers of DNS servers at once.

https://github.com/unfrl/dug

https://dug.unfrl.com

Anthony-G 2022-07-14 20:10 UTC link
“Boring” explanation from the dig manual page:

> The IN and CH class names overlap with the IN and CH top level domain names. Either use the -t and -c options to specify the type and class, use the -q the specify the domain name, or use "IN." and "CH." when looking up these top level domains.

Off-topic: I got excited when I saw the nicely coloured output from dig which makes it more readable. I thought that maybe the author has some new version that’s not yet available on Ubuntu LTS. Unfortunately, the nice colours are from judicious use of highlight.js¹ – one good reason to have uMatrix configured to allow first-party JavaScript!

¹ https://highlightjs.org/

bauruine 2022-07-14 21:37 UTC link
I'm not sure if this is well known but you can actually dig (AXFR) the whole .ch and .li zone. Are there other tld that allow this?

https://www.switch.ch/open-data/

dmix 2022-07-14 21:40 UTC link
Besides IN and CH there is also HS aka Hesiod

https://en.wikipedia.org/wiki/Hesiod_(name_service)

which is from Project Athena:

https://en.wikipedia.org/wiki/Project_Athena

> Project Athena was a joint project of MIT, Digital Equipment Corporation, and IBM to produce a campus-wide distributed computing environment for educational use.

josh2600 2022-07-14 22:56 UTC link
Man, not putting Fully Qualified Domain Names in code has been such a recurring source of pain in my software life. You make so many assumptions about the way people parse domain names and all of them are wrong. Vendors do all kinds of things to "simplify" their workflows internally and sometimes they just parse URLs and domains in all kinds of ways that break your brain.

Reminds me so much of the way "smart" telecom engineers bastardized SS7 to ship new features onto legacy telco infrastructure. SS7 is like 20M lines of C. You can't really change it without breaking it in many other places, AT&T used to have a metric which was something like "for every 10 lines of code you alter in SS7, you create 8 bugs in other parts of the code." So "smart" telecom engineers would take existing fields in the SS7 logic and use them for different functions inside of their telco. A billing field could instead be used as a feature flag for some sort of customer state, but only inside of the telco's network (and re-written back to the compliant SS7 standard when the data was headed out of the network). This was called encapsulation and wrapping and un-wrapping packets just in time was the source of many many problems in my telecom life.

Just in time editing of network packets at the boundary is always fun. Most of the problems that would happen would come from forgetting to rewrite back to SS7 and transmitting the internal codes out.

irae 2022-07-14 12:36 UTC link
I could instantly tell this was going to be good when I saw the blog layout. Somehow people who end up going super low level and writing about it have the most unexpected layouts too
brightball 2022-07-14 12:37 UTC link
Would have liked to know that sooner…
EvanAnderson 2022-07-14 13:02 UTC link
These talks all look pretty interesting. Sadly, I am unavailable to participate online because of schedule. Will these be recorded at all?
dark-star 2022-07-14 13:03 UTC link
wow, I need to see that. I tried (mostly unsuccessfully) to set up ChaosNet on my home LAN some time ago, I'd love to give it another shot ;-)
GoOnThenDoTell 2022-07-14 13:08 UTC link
May as well find a use for them
ancientsofmumu 2022-07-14 13:17 UTC link
I kind of think this is a dig bug -- the man page indicates you can specify `name type class queryopt` in an unargumented style, but when using IN in this fashion against `ch` it does not work correctly (testing on Debian 11 stable). Compare these 4 sets of results:

    dig ch NS IN +short
    dig -q ch -t NS -c IN +short
    dig uk NS IN +short
    dig -q uk -t NS -c IN +short
Only when using the first form do you get a comment ";; Warning, extra class option" and the incorrect results. So even when using the full pattern of un-argumented options as outlined in the man page, it fails to work as expected specifically for ch.
sybercecurity 2022-07-14 13:19 UTC link
There are even more oddities buried in some RRTypes. For example, the 'protocol' field in the DNSKEY RRType. Back when DNSSEC was still in development, the concept of sub-typing was in vogue and it was thought that RRType codes should be jealously guarded. Fast forward a couple of years and everyone realizes that there are plenty of RRType codes to go around and no one really wants to use DNSKEY for other public keys, so the 'protocol' field was basically frozen with '3' being the only value used.

A 35 year old protocol has a lot of vestigial bits, but still vital to network operations.

mschuster91 2022-07-14 13:26 UTC link
IIRC that dated back to ye olde times where you could tweet by SMS... and "m " would be the starting sequence to compose a direct message.
TrickyRick 2022-07-14 13:34 UTC link
Dig in... I see what you did there
breakingcups 2022-07-14 13:39 UTC link
What is ironic about that?
Tepix 2022-07-14 14:24 UTC link
Weird, i thought the article was clickbait because when i "dig" a TLD i always use the trailing dot. I guess i ran into this issue early on.
fariszr 2022-07-14 14:45 UTC link
Quick question, how did you setup the comment system that picks up comments from other platforms like Twitter and mastodon?
jandrese 2022-07-14 15:13 UTC link
Bind's config files are awful. I think it is like Sendmail where the only reason it is still awful is that there is too much infrastructure built around them to make them better. They could improve the configs, but it might break many thousands of scripts around the world.

Back in the 80s there were not many examples of configuration files, so everybody just invented their own idiosyncratic format. Most of those old formats have long since died off, but a few have survived to haunt us even today.

Aicy 2022-07-14 15:14 UTC link
> I don’t know why the author laughed about Hesiod,* which, like chaosnet was another MIT protocol in use for a while.

Probably because you are maybe one of a few hundreds of people who have made use of this (and it was decades ago), out of the billions of people who have used the internet.

Cool story though.

zinekeller 2022-07-14 15:27 UTC link
And this... character with an unknown meaning or purpose: U+237C ⍼ RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW (https://ionathan.ch/2022/04/09/angzarr.html; https://news.ycombinator.com/item?id=31012865)
zinekeller 2022-07-14 15:29 UTC link
(because it's IN)

Seems similar to the problem on YAML's Norway (https://hitchdev.com/strictyaml/why/implicit-typing-removed/) and the Turkish Lira (TRY) problem (https://devblogs.microsoft.com/oldnewthing/20190912-00/?p=10...)

nly 2022-07-14 16:05 UTC link
Example in PowerDNS, where the allowance for the "IN" class is hard-coded to remove ambiguity:

https://github.com/PowerDNS/pdns/blob/master/pdns/zoneparser...

And in BIND where the <rdata> parsing is coded up for a bunch of <type>'s:

https://github.com/isc-projects/bind9/tree/main/lib/dns/rdat...

edent 2022-07-14 16:05 UTC link
OK. I'll give you that one. But what's your stance on Betamax?
gerdesj 2022-07-14 16:08 UTC link
d and f seem to have vanished!
js2 2022-07-14 19:11 UTC link
BIND's zone files are an implementation detail completely unnecessary to interoperate with the DNS protocol. Same for zone-transfers. Neither of these ever belonged in an RFC in the first place.
CoastalCoder 2022-07-14 19:58 UTC link
> DNS Erotica?!? ... I can't read.

Every time I see the headline, that's how I first read it.

I wonder if I'll ever grow up.

dmix 2022-07-14 21:44 UTC link
Indeed:

dig Esoterica*

lucb1e 2022-07-14 22:03 UTC link
yeah .com and many others. You just need to think of some research reason which can be a lot of things, there's no real verification on this, and then you get access to all of the domains at once (you need to be accepted into this central zone dump system once). I was quite surprised when a colleague told me this exists and that he was accepted, since to me this seemed to be coveted data by e.g. commercial dns history companies. Anyhow, if you didn't already --for the myriad of other reasons-- consider DNS data to be open, you should consider it open data.
dflock 2022-07-14 22:54 UTC link
There's this, which is a more modern dig, with color output, among other things: https://github.com/ogham/dog

There's also stuff like this, which will postprocess & color output from any command: https://github.com/garabik/grc, or https://github.com/armandino/TxtStyle

notpushkin 2022-07-15 09:59 UTC link
I'm wondering why telcos don't use SIP (and something with sane APIs for the data / control plane) or something internally? Maybe for peering with other networks, too.
dark-star 2022-07-16 17:11 UTC link
Sadly I was unable to join the BBB today. Were the talks recorded?
teddyh 2022-07-19 03:01 UTC link
Both .se and .nu also allow it (albeit from a special server, not listed in the NS records for the TLD): https://zonedata.iis.se/
Editorial Channel
What the content says
+0.35
Article 27 Cultural Participation
Medium Coverage Practice
Editorial
+0.35
SETL
+0.13

Post documents internet protocol history and scientific development, connecting 1970s Chaosnet to contemporary DNS issues

+0.30
Article 26 Education
Medium Practice
Editorial
+0.30
SETL
+0.12

Post provides accessible technical education explaining DNS concepts and internet infrastructure

+0.20
Article 19 Freedom of Expression
Medium Practice
Editorial
+0.20
SETL
-0.17

Post demonstrates open knowledge-sharing and invites public participation through discussion

+0.20
Article 29 Duties to Community
Medium Practice
Editorial
+0.20
SETL
0.00

Post shares technical knowledge publicly as contribution to community understanding of internet infrastructure

ND
Preamble Preamble

Content does not engage with concepts of universal human dignity or fundamental freedom

ND
Article 1 Freedom, Equality, Brotherhood

No engagement with equal dignity or rights of all people

ND
Article 2 Non-Discrimination

No engagement with non-discrimination

ND
Article 3 Life, Liberty, Security

No engagement with right to life, liberty, or security

ND
Article 4 No Slavery

No engagement with slavery or servitude

ND
Article 5 No Torture

No engagement with torture or cruel treatment

ND
Article 6 Legal Personhood

No engagement with recognition as a person before law

ND
Article 7 Equality Before Law

No engagement with equality before law

ND
Article 8 Right to Remedy

No engagement with effective remedy

ND
Article 9 No Arbitrary Detention

No engagement with freedom from arbitrary arrest

ND
Article 10 Fair Hearing

No engagement with fair trial rights

ND
Article 11 Presumption of Innocence

No engagement with presumption of innocence

ND
Article 12 Privacy

Post addresses DNS/network protocols but does not discuss privacy rights or protections

ND
Article 13 Freedom of Movement

No engagement with freedom of movement

ND
Article 14 Asylum

Mentions Switzerland's country code but does not address asylum or nationality rights

ND
Article 15 Nationality

No engagement with nationality rights

ND
Article 16 Marriage & Family

No engagement with family rights

ND
Article 17 Property

No engagement with property rights

ND
Article 18 Freedom of Thought

No engagement with freedom of thought, conscience, or religion

ND
Article 20 Assembly & Association

No engagement with freedom of association

ND
Article 21 Political Participation

No engagement with participation in government

ND
Article 22 Social Security

No engagement with social security or economic rights

ND
Article 23 Work & Equal Pay

No engagement with work or labor rights

ND
Article 24 Rest & Leisure

No engagement with rest or leisure

ND
Article 25 Standard of Living

No engagement with adequate standard of living or health

ND
Article 28 Social & International Order

No engagement with universal human rights framework or international order

ND
Article 30 No Destruction of Rights

No engagement with protection of rights or freedoms under UDHR

Structural Channel
What the site does
+0.30
Article 19 Freedom of Expression
Medium Practice
Structural
+0.30
Context Modifier
ND
SETL
-0.17

Blog provides unrestricted access, active comment section, and social sharing mechanisms

+0.30
Article 27 Cultural Participation
Medium Coverage Practice
Structural
+0.30
Context Modifier
ND
SETL
+0.13

Content is openly published and shareable, preserving and disseminating technical culture and scientific knowledge

+0.25
Article 26 Education
Medium Practice
Structural
+0.25
Context Modifier
ND
SETL
+0.12

Blog incorporates multiple theme options and search/tag functionality supporting diverse learning needs

+0.20
Article 29 Duties to Community
Medium Practice
Structural
+0.20
Context Modifier
ND
SETL
0.00

Blog permits comments and discussion, creating infrastructure for community participation and knowledge exchange

ND
Preamble Preamble

No structural signal regarding foundational human rights principles

ND
Article 1 Freedom, Equality, Brotherhood

No structural signal

ND
Article 2 Non-Discrimination

No structural signal

ND
Article 3 Life, Liberty, Security

No structural signal

ND
Article 4 No Slavery

No structural signal

ND
Article 5 No Torture

No structural signal

ND
Article 6 Legal Personhood

No structural signal

ND
Article 7 Equality Before Law

No structural signal

ND
Article 8 Right to Remedy

No structural signal

ND
Article 9 No Arbitrary Detention

No structural signal

ND
Article 10 Fair Hearing

No structural signal

ND
Article 11 Presumption of Innocence

No structural signal

ND
Article 12 Privacy

No structural signal regarding privacy

ND
Article 13 Freedom of Movement

No structural signal

ND
Article 14 Asylum

No structural signal

ND
Article 15 Nationality

No structural signal

ND
Article 16 Marriage & Family

No structural signal

ND
Article 17 Property

No structural signal

ND
Article 18 Freedom of Thought

No structural signal

ND
Article 20 Assembly & Association

No structural signal

ND
Article 21 Political Participation

No structural signal

ND
Article 22 Social Security

No structural signal

ND
Article 23 Work & Equal Pay

No structural signal

ND
Article 24 Rest & Leisure

No structural signal

ND
Article 25 Standard of Living

No structural signal

ND
Article 28 Social & International Order

No structural signal

ND
Article 30 No Destruction of Rights

No structural signal

Supplementary Signals
How this content communicates, beyond directional lean. Learn more
Epistemic Quality
How well-sourced and evidence-based is this content?
0.79 low claims
Sources
0.7
Evidence
0.8
Uncertainty
0.8
Purpose
0.8
Propaganda Flags
No manipulative rhetoric detected
0 techniques detected
Emotional Tone
Emotional character: positive/negative, intensity, authority
measured
Valence
+0.3
Arousal
0.2
Dominance
0.6
Transparency
Does the content identify its author and disclose interests?
0.70
✓ Author
More signals: context, framing & audience
Solution Orientation
Does this content offer solutions or only describe problems?
0.91 solution oriented
Reader Agency
0.8
Stakeholder Voice
Whose perspectives are represented in this content?
0.40 2 perspectives
Speaks: institution
About: individuals
Temporal Framing
Is this content looking backward, at the present, or forward?
mixed mixed
Geographic Scope
What geographic area does this content cover?
global
Switzerland, United Kingdom, India, United States
Complexity
How accessible is this content to a general audience?
moderate medium jargon domain specific
Audit Trail 11 entries
2026-02-28 13:52 model_divergence Cross-model spread 0.26 exceeds threshold (3 models) - -
2026-02-28 13:52 eval Evaluated by claude-haiku-4-5-20251001: +0.26 (Mild positive)
2026-02-28 11:04 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 11:04 eval Evaluated by llama-4-scout-wai: 0.00 (Neutral) 0.00
2026-02-28 11:04 rater_validation_warn Lite validation warnings for model llama-4-scout-wai: 0W 1R - -
2026-02-28 10:59 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 10:59 eval Evaluated by llama-4-scout-wai: 0.00 (Neutral)
2026-02-28 10:59 rater_validation_warn Lite validation warnings for model llama-4-scout-wai: 0W 1R - -
2026-02-28 10:52 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 10:52 rater_validation_warn Lite validation warnings for model llama-3.3-70b-wai: 0W 1R - -
2026-02-28 10:52 eval Evaluated by llama-3.3-70b-wai: 0.00 (Neutral)