If you are running unwind(8) on your laptop / workstation or
unbound(8) for a small home network I'd be interested to know how
often they talk to the root zone during a typical day.

Could you please add the following table and match rules to
/etc/pf.conf:

table <rootdns> const { \
        198.41.0.4, 2001:503:ba3e::2:30, \
        199.9.14.201, 2001:500:200::b, \
        192.33.4.12, 2001:500:2::c, \
        199.7.91.13, 2001:500:2d::d, \
        192.203.230.10, 2001:500:a8::e, \
        192.5.5.241, 2001:500:2f::f, \
        192.112.36.4, 2001:500:12::d0d, \
        198.97.190.53, 2001:500:1::53, \
        192.36.148.17, 2001:7fe::53, \
        192.58.128.30, 2001:503:c27::2:30, \
        193.0.14.129, 2001:7fd::1, \
        199.7.83.42, 2001:500:9f::42, \
        202.12.27.33, 2001:dc3::35 }

match out proto {tcp} to <rootdns> port 53 label rootdns_tcp
match out proto {udp} to <rootdns> port 53 label rootdns_udp

Alternatively, this diff should apply to to a default /etc/pf.conf:

diff --git pf.conf pf.conf
index ecf2183c210..9cb8d752f6f 100644
--- pf.conf
+++ pf.conf
@@ -2,8 +2,26 @@
 #
 # See pf.conf(5) and /etc/examples/pf.conf
 
+table <rootdns> const { \
+       198.41.0.4, 2001:503:ba3e::2:30, \
+       199.9.14.201, 2001:500:200::b, \
+       192.33.4.12, 2001:500:2::c, \
+       199.7.91.13, 2001:500:2d::d, \
+       192.203.230.10, 2001:500:a8::e, \
+       192.5.5.241, 2001:500:2f::f, \
+       192.112.36.4, 2001:500:12::d0d, \
+       198.97.190.53, 2001:500:1::53, \
+       192.36.148.17, 2001:7fe::53, \
+       192.58.128.30, 2001:503:c27::2:30, \
+       193.0.14.129, 2001:7fd::1, \
+       199.7.83.42, 2001:500:9f::42, \
+       202.12.27.33, 2001:dc3::35 }
+
 set skip on lo
 
+match out proto {tcp} to <rootdns> port 53 label rootdns_tcp
+match out proto {udp} to <rootdns> port 53 label rootdns_udp
+
 block return   # block stateless traffic
 pass           # establish keep-state
 

Then reload the ruleset and restart unwind:

# pfctl -f /etc/pf.conf
# rcctl restart unwind

You can now get stats on how often your machine talks to the root name servers:

# pfctl -s label
rootdns_tcp 2730 0 0 0 0 0 0 0
rootdns_udp 266 2 187 1 56 1 131 0

The columns are: label, evaluations, packets total, bytes total,
packets in, bytes in, packets out, bytes out, state creations

Please report the stats after a day of normal use, thanks.

------------------------------------------------------------------------

The point of this excercise is to work out if it's worthwhile to
implement RFC 8806 "Running a Root Server Local to a Resolver" in
unwind(8).

We are trading latency for bandwidth. Lower latency is almost always a
win for unwind(8) usecases. But the work if we fetch the root zone is
not trivial either.

The zone usually gets updated twice a day and is about 1.2MB. Due to the
timing parameters unwind(8) would check every 30 minutes with a SOA
query if a new zone is available:
$ dig @k.root-servers.net +multiline +noall +answer . soa
.                       86400 IN SOA a.root-servers.net. 
nstld.verisign-grs.com. (
                                2020090300 ; serial
                                1800       ; refresh (30 minutes)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )

The code complexity should be managable, all the bits and pieces are
there in libunbound.

-- 
I'm not entirely sure you are real.

Reply via email to