commit 7400dce9a8cedaee2704caa4332fedfb1147d1d5
Author: Sam Therapy <sam@samtherapy.net>
Date:   Mon Oct 3 17:51:48 2022 +0200

    Initial commit
    
    Signed-off-by: Sam Therapy <sam@samtherapy.net>

diff --git a/_werc/config.json b/_werc/config.json
new file mode 100644
index 0000000..20fc637
--- /dev/null
+++ b/_werc/config.json
@@ -0,0 +1,5 @@
+{
+  "title": "dns.froth.zone",
+  "subtitle": "DNS can be frothworthy too!",
+  "lang": "en"
+}
diff --git a/_werc/pub/style.css b/_werc/pub/style.css
new file mode 100644
index 0000000..e1e1ae7
--- /dev/null
+++ b/_werc/pub/style.css
@@ -0,0 +1,13 @@
+body { display: flex; flex-wrap: wrap; font-family: sans; background: black; color: white}
+header { flex-basis: 100%; flex-shrink: 0; }
+article { flex-basis: 60%; padding-left: 1em; }
+article {padding: 0.5ex 0 5vh 1vw;}
+footer { flex-basis: 100%; flex-shrink: 0; }
+header nav { display: flex; justify-content: space-between; }
+nav a, header a { text-decoration: none ; color: #c0c0c0; }
+a { color: #a0a0a0}
+header h1 span { margin-left: 1em; font-size: 50%; font-style: italic; }
+body > nav { flex-basis: content; padding-right: 1vw; min-width: 16em; }
+nav ul { display: flex; flex-direction: column; list-style-type: none; list-style-position: outside; padding-left: 0;  }
+nav li ul { padding-left: 0.6em }
+footer { display: flex; justify-content: space-between; }
diff --git a/awl/index.md b/awl/index.md
new file mode 100644
index 0000000..f61c396
--- /dev/null
+++ b/awl/index.md
@@ -0,0 +1,121 @@
+[awl](./code) is a simple DNS query client, much like dig and drill.
+
+
+```
+❯ awl NS froth.zone @https://dns.froth.zone/dns-query 
+;; opcode: QUERY, status: NOERROR, id: 46274
+;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 8
+
+;; QUESTION SECTION:
+;froth.zone.    IN       NS
+
+;; ANSWER SECTION:
+froth.zone.     1650    IN      NS      illya.froth.zone.
+froth.zone.     1650    IN      NS      rin.froth.zone.
+froth.zone.     1650    IN      NS      sakura.froth.zone.
+froth.zone.     1650    IN      NS      saber.froth.zone.
+
+;; ADDITIONAL SECTION:
+rin.froth.zone. 1650    IN      AAAA    2607:5300:201:3100::931b
+sakura.froth.zone.      1650    IN      AAAA    2001:41d0:304:200::d12b
+saber.froth.zone.       1650    IN      AAAA    2602:fe90:100:2::164d:4c70
+illya.froth.zone.       1650    IN      AAAA    2603:c020:4004:62ee::8888
+rin.froth.zone. 1650    IN      A       158.69.1.114
+sakura.froth.zone.      1650    IN      A       141.94.206.97
+saber.froth.zone.       1650    IN      A       45.13.232.162
+illya.froth.zone.       1650    IN      A       129.213.157.255
+
+;; Query time: 404.9936ms
+;; SERVER: https://dns.froth.zone/dns-query
+;; WHEN: Never
+;; MSG SIZE  rcvd: 489
+```
+
+---
+
+`awl` understands DNSSEC, like [`drill(1)`](https://linux.die.net/man/1/drill):
+
+```
+❯ awl brokendnssec.net @1.1.1.1 --tcp
+;; opcode: QUERY, status: SERVFAIL, id: 45766
+;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
+
+;; QUESTION SECTION:
+;brokendnssec.net.      IN       A
+
+;; Query time: 6.0461ms
+;; SERVER: 1.1.1.1:53 (TCP)
+;; WHEN: Never
+;; MSG SIZE  rcvd: 34
+❯ awl brokendnssec.net @1.1.1.1 --cd +tcp
+;; opcode: QUERY, status: NOERROR, id: 37917
+;; flags: qr rd ra cd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
+
+;; QUESTION SECTION:
+;brokendnssec.net.      IN       A
+
+;; ANSWER SECTION:
+brokendnssec.net.       294     IN      A       172.67.36.129
+brokendnssec.net.       294     IN      A       104.22.35.212
+brokendnssec.net.       294     IN      A       104.22.34.212
+
+;; Query time: 8.4461ms
+;; SERVER: 1.1.1.1:53 (TCP)
+;; WHEN: Never
+;; MSG SIZE  rcvd: 130
+```
+
+---
+
+It supports many of the flags that [`dig(1)`](https://man.openbsd.org/dig.1)
+does:
+
+```
+❯ awl +noquestion +noauthority +nostats cat-v.org
+;; opcode: QUERY, status: NOERROR, id: 39675
+;; flags: qr rd ra; QUERY: 0, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
+
+;; ANSWER SECTION:
+cat-v.org.      9418    IN      A       168.235.69.224
+```
+
+---
+
+And [some new features](./man), too!
+
+```xml
+❯ awl +quic --xml codeberg.org
+<Msg>
+  <Id>22108</Id>
+  <Response>true</Response>
+  <Opcode>0</Opcode>
+  <Authoritative>false</Authoritative>
+  <Truncated>false</Truncated>
+  <RecursionDesired>true</RecursionDesired>
+  <RecursionAvailable>true</RecursionAvailable>
+  <Zero>false</Zero>
+  <AuthenticatedData>false</AuthenticatedData>
+  <CheckingDisabled>false</CheckingDisabled>
+  <Rcode>0</Rcode>
+  <Compress>false</Compress>
+  <Question>
+    <Name>codeberg.org.</Name>
+    <Qtype>1</Qtype>
+    <Qclass>1</Qclass>
+  </Question>
+  <Answer>
+    <Hdr>
+      <Name>codeberg.org.</Name>
+      <Rrtype>1</Rrtype>
+      <Class>1</Class>
+      <Ttl>3600</Ttl>
+      <Rdlength>4</Rdlength>
+    </Hdr>
+    <A>193.26.156.135</A>
+  </Answer>
+</Msg>
+```
+
+------
+
+A full list of the features `awl` supports can be found [here](https://git.froth.zone/sam/awl/wiki/Supported).
\ No newline at end of file
diff --git a/awl/man.txt b/awl/man.txt
new file mode 100644
index 0000000..d2fc04c
--- /dev/null
+++ b/awl/man.txt
@@ -0,0 +1,163 @@
+awl(1)                                                                              awl(1)
+
+NAME
+       awl - DNS lookup tool
+
+SYNOPSIS
+       awl [ OPTIONS ] name [ @server ] [ type ]
+       where
+
+       name is the query to make (example: froth.zone)
+       @server is the server to query (example: dns.froth.zone)
+       type is the DNS resource type (example: AAAA)
+
+DESCRIPTION
+       awl  (awls want licorice) is a simple tool designed to make DNS queries, much like
+       the venerable dig(1). An awl is a tool used to make small holes, typically used in
+       leatherworking.
+
+       awl is designed to be a more "modern" version of drill(1)  by including some more
+       recent RFCs and output options. awl is still heavily Work-In-Progress so some fea‐
+       tures may get added or removed.
+
+OPTIONS
+           Dig-like +[no]flags are supported, see dig(1)
+
+           -D, --dnssec, +dnssec
+                Enable DNSSEC. This needs to be manually enabled.
+
+           -v value
+                Set verbosity (currently WIP)
+
+           -V
+                Print the version and exit.
+
+           -h
+                Show a "short" help message.
+
+   Query Options
+           -4
+                Only make query over IPv4
+
+           -6
+                Only make query over IPv6
+
+           -p, --port port
+                Sets the port to query.
+
+           Default Ports:
+               •   53 for UDP and TCP
+               •   853 for TLS and QUIC
+               •   443 for HTTPS
+
+           -q, --query domain
+                Domain to query (eg. example.com)
+
+           -c, --class class
+                DNS class to query (eg. IN, CH)
+
+           -t, --qType type
+                DNS type to query (eg. A, NS)
+
+           --no-truncate, +ignore
+                Ignore UDP truncation (by default, awl retries with TCP)
+
+           --tcp, +tcp, +vc
+                Use TCP for the query (see RFC 7766)
+
+           --dnscrypt, +dnscrypt
+                Use DNSCrypt
+
+           -T, --tls, +tls
+                Use DNS-over-TLS, implies --tcp (see RFC 7858)
+
+           -H. --https, +https
+                Use DNS-over-HTTPS (see RFC 8484)
+
+           -Q. --quic, +quic
+                Use DNS-over-QUIC (see RFC 9250)
+
+           -x, --reverse
+                Do a reverse lookup. Sets default type to PTR.
+                awl automatically makes an IP or phone number canonical.
+
+           --timeout seconds, +timeout=seconds
+                Set the timeout period. Floating point numbers are accepted.
+                0.5 seconds is the minimum.
+
+           --retries int, +tries=int, + retry=int
+                Set the number of retries.
+                Retry is one more than tries, dig style
+
+   DNS Flags
+           --aa=[false], +[no]aaflag
+                (Set, Unset) AA (Authoritative Answer) flag
+
+           --ad=[false], +[no]adflag
+                (Set, Unset) AD (Authenticated Data) flag
+
+           --tc=[false], +[no]tcflag
+                (Set, Unset) TC (TrunCated) flag
+
+           -z=[false], +[no]zflag
+                (Set, Unset) Z (Zero) flag
+
+           --cd=[false], +[no]cdflag
+                (Set, Unset) CD (Checking Disabled) flag
+
+           --qr=[false], +[no]qrflag
+                (Set, Unset) QR (QueRy) flag
+
+           --rd=[true], +[no]rdflag
+                (Set, Unset) RD (Recursion Desired) flag
+
+           --ra=[false], +[no]raflag
+                (Set, Unset) RA (Recursion Available) flag
+
+   Output Display
+           --no-question, +noquestion
+                Do not display the Question section
+
+           --no-answer, +noanswer
+                Do not display the Answer section
+
+           --no-answer, +noanswer
+                Do not display the Answer section
+
+           --no-authority, +noauthority
+                Do not display the Authority section
+
+           --no-additional, +noadditional
+                Do not display the Additional section
+
+           --no-statistics, +nostats
+                Do not display the Statistics (additional comments) section
+
+   Output Formats
+           -j, --json, +json
+                Print the query results as JSON.
+
+           -X, --xml, +xml
+                Print the query results as XML.
+
+           -y, --yaml, +yaml
+                Print the query results as YAML.
+
+           -s, --short, +short
+                Print just the address of the answer.
+
+EXAMPLES
+           awl grumbulon.xyz -j +cd
+       Run a query of your local resolver for the A records of grumbulon.xyz, print them as
+       JSON and disable DNSSEC verification.
+
+           awl +short example.com AAAA @1.1.1.1
+       Query 1.1.1.1 for the AAAA records of example.com, print just the answers
+
+           awl -xT PTR 8.8.4.4 @dns.google
+       Query dns.google over TLS for the PTR record to the IP address 8.8.4.4
+
+SEE ALSO
+       drill(1), dig(1), the many DNS RFCs
+
+                                                                                    awl(1)
diff --git a/awl/repo.html b/awl/repo.html
new file mode 100644
index 0000000..9bc7fae
--- /dev/null
+++ b/awl/repo.html
@@ -0,0 +1,4 @@
+<a href="https://git.froth.zone/sam/awl">https://git.froth.zone/sam/awl</a>
+<script>
+    window.location.replace("https://git.froth.zone/sam/awl");
+</script>
\ No newline at end of file
diff --git a/index.md b/index.md
new file mode 100644
index 0000000..cbdb162
--- /dev/null
+++ b/index.md
@@ -0,0 +1,16 @@
+# Welcome to the Froth DNS service!
+---
+This is a landing page for the DNS services that I host.
+
+\
+\
+\
+\
+\
+\
+\
+\
+\
+Yes, I know I have a problem.
+
+No, you don't have to remind me.
diff --git a/nameservers.md b/nameservers.md
new file mode 100644
index 0000000..389d257
--- /dev/null
+++ b/nameservers.md
@@ -0,0 +1,32 @@
+# Froth.zone Nameservers
+
+I host four nameservers in servers all over ~~NATO~~ the world,
+so anybody ~~in the US or Western Europe~~ can more easily access my
+services:
+
+The IP addresses are found by using [awl](./awl/):
+
+- [rin.froth.zone](https://rin.froth.zone) (Hosted in Canada)\
+    ❯  awl +short rin.froth.zone && awl +short AAAA rin.froth.zone
+    :   158.69.1.114 \
+        2607:5300:201:3100::931b
+
+- [sakura.froth.zone](https://sakura.froth.zone) (Hosted in France)\
+    ❯  awl --short sakura.froth.zone && awl --short AAAA sakura.froth.zone
+    :   141.94.206.97\
+        2001:41d0:304:200::d12b
+
+- [saber.froth.zone](https://saber.froth.zone) (Hosted in the US)\
+    ❯  awl -s saber.froth.zone && awl -s AAAA saber.froth.zone
+    :   45.13.232.162 \
+        2602:fe90:100:2::164d:4c70
+
+- [illya.froth.zone](https://illya.froth.zone) (Hosted in the US)\
+    ❯  awl +short illya.froth.zone && awl -s AAAA illya.froth.zone
+    :   129.213.157.255 \
+        2603:c020:4004:62ee::8888
+
+---
+
+Want to use them?
+: If so, just [contact me](https://froth.zone/sam)!
diff --git a/resolver.md b/resolver.md
new file mode 100644
index 0000000..d71f71f
--- /dev/null
+++ b/resolver.md
@@ -0,0 +1,28 @@
+# Froth.zone DNS resolving service
+
+I also host an [OpenNIC](https://www.opennic.org/)-compatible DNS resolving server.
+
+### Never asked questions (NAQs)
+
+- *Why OpenNIC?*
+    : Why not? The root servers seamlessly connect to ICANN space, so it's just free extra domains.
+
+- *Where is it?*
+    : Right here. This domain you're looking at right now.
+
+- *What about DNS-over-TCP?*
+    : Yes.
+
+- *DNS-over-TLS?*
+    : Yes, DNS-over-TLS too.
+
+- *DNSCrypt?*
+    : Nope. ¯\\\_(ツ)\_/¯ \
+Maybe when it becomes an RFC.
+
+- *What about DNS-over-HTTPS?*
+    : Yes! Use __ht<span>tp</span>s://dns.froth.zone/dns-query__ as the endpoint URL.
+
+- *What about QUIC?*
+    : Since the software I use doesn't support QUIC yet
+    (I don't think _any_ do yet), no. Maybe soon(tm)
\ No newline at end of file
