The case of IPv6 LLU endpoint address support in DNS

Erwin Hoffmann Frankfurt University of Applied Sciences Faculty of Computer Science and Engineering

January 12, 2020

Abstract

The fehQlibs and djbdnscurve6 provide a DNS library which support IPv6 LLU endpoint addresses. The inclusion of IPv6 LLU endpoint addresses for DNS services is discussed and shown to be beneficial for particular use cases. Applications linked with this library allow user-specific DNS settings. Apart from binding to IPv6 LLU addresses and dual-stack usage, additionally ’reverse IPv6 anycasting’ is an achieved goal welcomed for IoT devices.

1 IPv6 in DNS There is no question that IPv6 LLU ad- dresses never can be object of any DNS The support of IPv6 addresses within DNS lookup; but could they be the acting subject Resource Records (RR) has been settled with of DNS resolver and perhaps a DNS server? RFC 3596 [30] taking only the Quad-A format Could the DNS query and also the response AAAA into consideration. The inverse nibble facilitate IPv6 LLU endpoint addresses? format for IPv6 addresses is also well defined. This questions will be investigated here and However, there is a significant gap applying a solution will be outlined using the DNS IPv6 addresses within the DNS, though RFC implementation ’djbdnscurve6’[14] together 4472 [5] clearly expels IPv6 Link-Local Unicast with the separate DNS stub resolver library (LLU) addresses as AAAA RRs in a zone file: available with ’fehQlibs’[10]. Both solutions are based on D.J. Bernstein’s developments [2] 2.1. Limited-Scope Addresses and are particular tailored for IPv6 support, The IPv6 addressing architecture including all required functions to deal with [RFC4291] includes two kinds of local- parsing and representation of IPv6 addresses, use addresses: link-local (fe80::/10) and which are partially taken from Felix von Leit- site-local (fec0::/10). The site-local ad- ner’s patches [18]. dresses have been deprecated [RFC3879] but are discussed with unique local addresses in Appendix A. 1.1 IPv6 LLU support and the In- Link-local addresses should never be terface Index published in DNS (whether in forward or reverse tree), because they have only Unlike IPv4 addresses, IPv6 addresses are local (to the connected link) significance ’scoped’. [fig.1] gives an overview of this situ- [WIP-DC2005]. ation.

1 Global Globaler Unicast: 2000::/3 unique route-able Link Local Unicast: within the IPv6 Internet ULA solely useable in local fc00::/7 link segment; autonomous derived, not unique; LLU Unique Local Unicast: requires interface index fe80::/10 unique and route-able in local link-segments Unspecified address: Host used as sender address ::/128 for multicasts

Figure 1: Overview of the IPv6 address hierarchy

In the IPv4 world we consider ’public’ In IPv6 the interface index (aka the scope and ’private’ IP addresses (together with the index) is part of the socket definition. For loopback 127/8 network and the multicast route-able addresses it is simply ’0’, while for regime). Within IPv6, the situation is more LLU addresses it is derived from the interface. strictly structured using the high order bits of The kernel provides a translation between the the IPv6 address [8]. interface name (in often eth0) and its IPv6 LLU addresses – like private IPv4 ad- numeric index, ie. 1. dresses – are not route-able and usable only on This matching is done either statically – the attached local link-segment. Unlike IPv4 upon the boot of the – or dy- private addresses however, each link-segment namically, whenever a interface is added and has its own name space. In practice, this made available. An interface index may also means that the same IPv6 LLU address can be removed, upon disabling the interface. This be used on different links [31]. behaviour corresponds with the usage of mod- In order to facilitate a distinction, the kernel ern IT equipment – like smartphones – enter- needs to know to which link-segment an IPv6 ing and exiting a ’flight mode’. LLU address belongs to; thus the interface to However, we not only need to consider phys- which it is bound. In a typical case, one may ical interfaces here, but also taking care of consider a system having an Ethernet and a additional virtual interfaces: The Operating WiFi interface with the following addresses: System may create (or dismiss) a virtual or logical interface on demand: At first it be- § fe80::1%eth0 comes assigned an EUI-64 (MAC) address and § fe80::2%wifi0 as second step the corresponding IPv6 unique where the ’%’ is the usual delimiter to sepa- and multicast addresses are derived algorith- rate an IPv6 address from its interface identi- mically (SLAAC) [29][1]. fier. A well-known ’logical’ interface is the loop- The lower 64 bit part of the IPv6 address back interface, often named lo0. For IPv4, is typically build from the interface MAC ad- the loopback interface is assigned with the dress (or using the ’privacy extension’). Fixed 127/8 net (and not only the IPv4 address addresses independent from the hardware are 127.0.0.1). Rather, for IPv6 two differently common for Internet servers. Often, the none scoped loopback addresses exist: route-able part indicates a certain use, like 2001:1ab::fefe:53 for a DNS service. § Global scoped: ::1

2 § Local scoped: fe80::1%lo0 1.3 Use cases for DNS IPv6 LLU endpoint addresses The kernel sees those as different entities and allows binding to each of them. Applying djbdnscurve6 and applications based on fehQlibs with its stub resolver rou- 1.2 DNS in the IPv6 working model tines, we

In IPv6 networks, the LLU addresses are used 1. can setup a DNS (content or cache) server to setup a network automatically employing listening on any interface with the provided the ICMPv6 protocol: IPv6 LLU address, § Stateless Address Autoconfiguration 2. can build network applications successfully (SLAAC) is used to determine the unique- querying DNS servers given their LLU ad- ness of the autonomous chosen and dresses while being attached to the same configured IPv6 address of the interface on local link-segment. a link-segment. § Neighbor Discovery Protocol (NDP) [22] is Advantage 1: the substitute for IPv4’s ARP (Address Res- On this link-segment DNS query/responses olution Protocol)[23]. can be operated (irrespectively of the con- § Neighbor Solicitation (NS) and Neighbor tent provided by the Resource Records RR) Advertisement (NA) [22] are used to provide by the usage of LLU addresses. The transmit- a cache for the neighbor’s link-addresses. ted IPv6 data packets are limited to the local link-segment only and are not visible outside § Router Advertisements (RA) and Router (except someone forwards these unsolicited to Solicitation (RS) together with Unsolicited an outside eavesdropper). Router Advertisements [22] are able to transmit IPv6 routing prefixes, the set of Advantage 2: default routers, the MTU size, and in partic- Within that link-segment we are under con- ular a list of IPv6 addresses of DNS servers trol of our DNS resources. DNS poisoning of to all nodes on the local link-segment [16]. the stub resolvers is impossible from sources outside this local net. Given the capabilities to provide DNS infor- Advantage 3: mation in an IPv6 network, DHCPv6 [21] can DNS allows to be setup in a ’split-horizon’ be used or – as explained – the RA protocol. manner. The DNS information (in particular In the last case, the messages are encapsulated hints to the authoritative name servers) can as ICMPv6 packages with the IPv6 LLU ad- be tailored to the local needs. dress of the sender and targeting either the link-local multicast address, or the LLU ad- Advantage 4: dress of a specific node on the link-segment. Location based services (LBS) [28][27] can be In short, within IPv6 networks packets with defined and be made authoritative in the local LLU addresses are used to transmit messages net only. containing network configuration information. Disadvantage: It would be a natural choice to setup a DNS A DNS Cache Resolver (like dnscache) solely service – either as server or as resolver – to use bound to the IPv6 LLU address can not share IPv6 LLU addresses as endpoints for both the its cached DNS information with potential query and the reply. DNS clients outside the link-segment.

3 We will discuss later, how this disadvan- As a side-effect, the DNS resolver routines tage can be compensated for and mitigated are capable of handling up to 32 name servers; by applying a socket binding technique called enough to cover the a-m.root-servers.net ’reverse IPv6 anycasting’. [15] supporting both their IPv4 and IPv6 ad- dresses. In summary, using the local link-segment Common to all servers – including for the communication and DNS message ex- tcpserver and sslserver – is the capability change between the DNS stub resolver and a to to any IPv6 address (and of course DNS server – in particular a caching Name IPv4 addresses too). server – is beneficial and provides anonymity for the stub resolvers while refraining them to use other public DNS caches like Google’s 2.1 Binding to IPv6 LLU addresses ’8.8.8.8’. Though IPv6 is now on the market since 25 years and Google has evaluated that its use 2 DNS server with IPv6 LLU is approaching now 30%1, applying IPv6 LLU addresses for DNS (unicast) services is not well support defined yet. Within djbdnscurve6 and the auxiliary Within djbdnscurve6 five DNS server dae- tools ucspi-tcp6 [13] and ucspi-ssl [12] two mons are provided: different ways to provide the required interface § tinydns is a UDP-only DNS content server. index are used: § walldns is a UDP-only proxy DNS server a) Composite IPv6 LLU address including the which might be used to shelter a potential interface index followed by the % sign: intranet from the Internet while providing fe80::fefe%eth0. synthetic responses to DNS queries. Here, the symbolic name for the inter- § dnscache is a UDP/TCP DNS full resolver face is used and not the interface in- able to validate and cache the responses in dex per se. As already mentioned, the memory. Operating System chooses the enumerated § rbldns is an IPv6-enabled Relay Blacklist value of the interface index on its own be- server. half. The routines ’socket_getifidx’ and § axfrdns can be used as DNS zone transfer ’socket_getifname’ are sufficient to do the server, typically invoked by tcpserver [13] translation. In this case, a parser is required or sslserver[12] (in case TLS is an option). to cope with this particular address format. b) Auxiliary provisioning of the interface index The principal architecture of the DNS (name) together with the IP(v6) address servers follow the idea to use IPv6 addresses as an independent (optional) argument de- everywhere. Thus, IPv4 addresses are usu- faulting to ’0’. ally (expect for the ’A’ type RR in tinydns) considered as IPv6-mapped IPv4 addresses In any case, compactified IPv6 can be used [4]. This holds in particular for dnscache: as defined in [8]. For ULA and standard IPv6 Here, the data structure is enhanced (w.r.t. to addresses the interface index is just defined ’0’ Daniel J. Bernstein’s original work [2]) to use and not required to bind to a specific interface. 128 bit addresses potentially together with the 1see: https://www.google.com/intl/en/ipv6/ required interface indices. statistics.html

4 Configuration

Iterative Resolver

Clientok ? Cache server Name Server ? (root/ip) (root/servers dnscache root/ip) Resolver Query (RD = 1) Parsing Logic Query (RD = 0) Intranet IP Server IP Client (listening) Memory (sending) Internet (size Response (AA ?) Opt Qualify Response (Authoritative) (IP) configurable) (IPSEND)

Private channel TTL based DNSCurve (done)/ EDNS0 IP random sort DNSSEC (tbd) IPv6: 2001::53 IPv4: IPv4: IPv6: fe80::53%eth0 7.7.7.7 public: 0.0.0.0 :: fe80::1%lo0 192.168.1.53 7.7.7.1 2001::1:53 ::1 127.0.0.1 :: Logging forwarding: 192.168.2.43 fe80::1%eth0 :0 dual-stack

Figure 2: Network setup with dnscache using distinct listening and resolving IPs; the notation ’:0’ and ’::’ in the sample in the text below

2.2 DNS usage of IPv6 LLU end- the queries/replies of the DNS clients from the point addresses cache servers name resolution public address improving robustness and resilience. For DNS cache servers/full resolvers with en- Advantage 6: abled IPv6 LLU binding support DNS lis- IPv6 LLU addresses come ’for free’. They are tening capabilities for queries can be sepa- SLAAC auto-configured and don’t need to be rated from the resolving ones: A DNS cache additionally deployed; in contrast to ULA ad- server (like dnscache) can now accept DNS dresses. In particular, they are not subject of queries from the local link-segment while the IPv6’ ’privacy extension’. actual resolving is realized using its (route- able) IPv4/IPv6 address [fig.2]. dnscache provides the facility to accept queries from au- 2.3 Simultaneous binding to IPv4 thorized sources only, given their client IP ad- and IPv6 dress (or client IP net by means of the leading octets). It might be beneficial, if a daemon has the capability not only to bind to a single IP ad- For any given DNS cache, its server IP dress of the Operating System, but rather to address needs to deployed to the clients or all. For instance, the Apache web server uses even may be public (though a Open Re- ’0’ as short-cut argument to bind to all IP ad- solver is not beneficial and considered to be dresses. a risk/bad practice). However, apart from a While a DNS content server – like tinydns multi-homing setup of a DNS cache, his fea- – allows to use the same DNS zone file for sev- ture can be used to support DNS clients on eral instances binding to different interfaces the IPv6 local link-segment. or IP addresses; for a caching name server – Advantage 5: like dnscache – keeping the DNS information Supporting IPv6 LLU endpoints addresses in memory, this workaround is not beneficial. empowers a DNS cache server to disentangle Rather, the same cache server instances should

5 be used to service all interfaces and IP ad- allows the use of a DNS cache and/or con- dresses. tent server in order to provision the required We may need to distinguish among the fol- DNS information on demand even on tempo- lowing cases: rary link-segments.

int socket_ip6anycast(int s) 1. A legacy binding to all IPv4 addresses. { i n t opt = 1 ; 2. A concurrent binding to both IPv4 and i n t r ; IPv6 addresses (dual stack), #i f d e f GEN_IP_PKTINFO /∗ Linux ∗/ 3. A dynamic binding to all static and dy- r = setsockopt(s, namic IPv6 addresses even for virtual in- IPPROTO_IP,GEN_IP_PKTINFO, &opt, sizeof(opt)); terfaces created after the daemon has been #e l i f IP_PKTINFO /∗ S o l a r i s ∗/ started. r = setsockopt(s, IPPROTO_IP,IP_PKTINFO, &opt, sizeof(opt)); In order to facilitate the usage of a common #e l i f IP_RECVDSTADDR /∗ BSD ∗/ r = setsockopt(s, binding to both IPv4 and IPv6 addresses, a IPPROTO_IP,IP_RECVDSTADDR, ’pseudo’ IP address ’:0’ is introduced. If this &opt, sizeof(opt)); #e l i f IPV6_RECVDSTADDR ’IP address’ is given, the server is told to bind if (!ipv4socket) to all available IPv4 and IPv6 addresses avail- s e t s o c k o p t ( s ,IPPROTO_IPV6,IPV6_ONLY, able on start. &opt, sizeof(opt)); r = setsockopt(s, IPPROTO_IPV6,IP_RECVDSTADDR, &opt, sizeof(opt)); 2.4 Reverse IPv6 Anycasting #e n d i f r e t u r n r ; By virtue of the socket routines available in } the fehQlibs, point three in the previous sec- Listing 1: Reverse IPv6 anycasting primitive for tion can be accomplished with ’reverse IPv6 different Unix OS; ipv4socket is a global variable anycasting support’. IPv6 provides the capa- bility to support this feature using a socket op- tion. Unfortunately, this has different notions for Linux/BSD/OmniOS and needs to be ac- 3 DNS (stub) resolvers en- customed for using a pre-compiler flag [lis.1]. hanced for IPv6 LLU ad- Here, we need to notice that IPv6 allows dresses the use of the ’unspecified’ address [fig.1]. In case ’::’ is given as binding address, ’reverse In the previous chapter we discussed the IPv6 anycasting’ is honoured and DNS queries server/daemon situation with regard to *iX and responses to dynamically build interfaces systems. On the client side, the situation is are possible even if the DNS server is already however different: The server may bind to any running. IP(v6) address, whereas the client must use Concerning the use cases in section 1.3, a (one of) the unicast address available on the further advantage can now be added: interface sending a message, in our case, the Advantage 7: DNS query. For Software Defined Network (SDN) [7] with While all Operating Systems are based ’programmed’ link-addresses created and dis- on the same IPv4 stack originating from the missed on demand, reverse IPv6 anycasting legacy Unix/BSD systems (Berkeley sockets),

6 concerning IPv6 the situation is the following: BIND implementation. Since there is no for- mal description how this file shall be struc- § In the BSD (and in the MacOS Darwin) tured, /etc/resolv.conf is practically unus- 3 kernel the results of KAME/WIDE project able to host IPv6 (LLU) addresses . have been incorporated to provide a solid It is important to recall that IPv6 implementation [17], [32]. /etc/resolv.conf does not necessarily con- tain static information (unlike /etc/hosts) § In Linux, starting with kernel version 2.4 but rather is subject to be rewritten be a preemptive-able network stack was intro- DHCP(v6) [21] and/or the RA daemon like duced, also supporting IPv6 [25]. radvd. § For the Windows operating system, Mi- The situation to use IPv6 (LLU) addresses crosoft has developed IPv6 support starting within /etc/hosts is not clear and depends with Windows XP and employing an own on the Operating System. In FreeBSD there extension of the network interface [19]. is a ’bug’ which prevents recognizing LLU ad- dresses but rather truncates those and inter- In practice, this leads to a recognizable dif- prets them as hostname. ference in the socket usage, in particular w.r.t to the understanding of an interface, while the App1 main POSIX features defined in [6], [26] are /etc/resolv.conf still present. App2 RA client Unix

3.1 DNS configuration based on systemd Kernel DNS resolver

/etc/resolv.conf DHCP libresolv.so The classical way for *iX Operating Systems or libc.so DHCPv6 is to depend on configuration files like RADVD

§ /etc/hosts eth0 eth1 lo0 vlan0 vlan1 § /etc/resolv.conf unsolicited RA § /etc/nsswitch.conf 192.168.1/24 fe80::/10 Figure 3: Interaction of the applications with the In the advent of the systemd [24] subcom- *iX DNS stub resolver libraries. DNS configura- ponent for Linux this has changed, but is out- tion data maybe received via DNS or RA side the scope of this paper, though systemd provides DNS capabilities [fig.3]. Unfortunately, the scope and usage of /etc/resolv.conf is not discussed in any 3.2 Alternate DNS configuration of RFC, while at least the original DNS RFC the stub resolver 1034 [20] mentions a configuration file. In The DNS stub resolver consists of a library fact, according to Wikipedia2 there is a her- used by the Unix kernel or any user space ap- itage of the Berkeley Internet Name Daemon 3https://www.freebsd.org/cgi/man.cgi?query= 2https://en.wikipedia.org/wiki/Resolv.conf resolv.conf&sektion=5

7 plication [fig.3]. Currently, there is a discus- to query. For unqualified DNS queries, the sion to use ’DNS-over-HTTP(S)’ DoH [9], in $LOCALDOMAIN information can be given ad- particular for Web browsers. ditionally; which is equivalent to the domain This actually may lead to the following dis- directive in /etc/resolv.conf. $DNSREWRITE tinctions: points to a file potentially re-writing a given FQDN4. 1. The application depends on the core *iX It shall be noted, that these DNS hints are DNS Operating System information as subject of on-demand change and in case the provided centrally (and potentially up- DNS stub resolver is capable to do so, are re- dated by DHCP(v6)/RA) as available in evaluated. Thus, dynamical changes of the this is the tradi- /etc/resolv.conf ãÑ DNS configuration are recognized and hon- tional way [fig.3]. *iX oured. 2. The Operating System may provide the ap- plication a DNS information which is spe- cific for the interface the application actu- 3.4 Possible solutions to use a DNS ally uses ãÑ this is the current Windows stub resolver (library) by an ap- approach. plication 3. The application may use an application spe- In section 3.2 we already discussed the differ- cific tailored DNS configuration it relies ent ways an application depend on the provi- upon ãÑ DoH and the solution discussed sioned DNS information. Lets now introduce in the next section. a model for that, showing two different scenar- ios. 3.3 Feeding the stub resolver with Scenario 1: DNS hints In [fig.3] the system is equipped with applica- A DNS stub resolver needs to be fed with some tions making use of the systems libresolv information in order to start and succeed with library which reads the provisioned IP ad- the query: dresses of DNS full resolvers to contact. How- ever, configuring a DNS stub on eth1 and § The IP addresses of the (recursive) name the corresponding LLU address given exter- server to query, called RDNSS in [16]. nal sources on that link-segment is impossi- § The local domain added to queries without ble, since the interface name and the inter- a full qualified domain name. face index have local meaning only. The same would hold on any DNS resolvers available on Within djbdnscurve6 and the fehQlibs a virtual network adaptor, e.g. vlan0. This D.J. Bernstein’s approach is followed to provi- problem is apparent for tunneling interfaces, sion this information as environment variables typically set up by a VPN: DNS traffic is § $DNSCACHEIP now centralized re-direct to a DNS resolver § $LOCALDOMAIN on a now dynamically re-defined content of § $DNSREWRITE /etc/resolv.conf. Scenario 2: to the DNS stub resolver. $DNSCACHEIP is Alternatively, considering the possibility to a list defining up to 32 (composite) IP ad- setup the required DNS information locally dresses (thus potentially including the inter- face index) of the full resolvers or DNS servers 4http://cr.yp.to/djbdns/qualify.html

8 App1 dependent (PIC) ’shared object’ library.

/etc/resolv.conf 2. dnsresolv.a – static DNS resolver lib App2 (linked to libdnsresolv.a). Unix 3. dnscresolv.a – static DNS resolver lib including CurveDNS capabilities from

systemd Kernel

DNS Resolver djbdnscurve6. App3 DHCP $LOCALDOMAIN= libresolv.so Apart from the CurveDNS support within example.com oder libc.so DHCPv6 $DNSCACHEIP= dnsresolv.a dnscresolv.a, these libraries provide the fe80::53%eth1 … RADVD same DNS primitives and a common API; though not compatible with the ISC’s BIND5

eth0 eth1 lo0 vlan0 vlan1 ones, which D.J. Bernstein even used within

192.168.1.0 fe80::/10 [3]. Since low-level IP address pars- ing and string/byte handling and in particular Figure 4: App3 linked with dnsresolv (as DNS IPv6 parsing is taken from the fehQlibs, they stub resolver provider) while using local variables have to be linked in addition. to instruct the DNS resolvers employing the IPv6 LLU address on interface eth1 for DNS lookup Linux FreeBSD AMD64 ARM64 Module size [Byte] size [Byte] libdnsresolv.so 43593 208632 by means of dnsresolv [fig.4] allows to read dnsresolv.a 71406 64254 those parameters from the user’s environment. dnscresolv.a 81426 75882 Application starting from here and linked with libqlibs.so 85713 218296 will catch up those instructions for dnsresolv qlibs.a 150736 132350 the DNS stub resolver accordingly. If these di- rectives are missing, a fall-back to the system Table 1: Size comparison of the dns(c)resolv and setting (/etc/resolv.conf) is foreseen. fehQlibs libraries on Linux (gcc 4.7.2, glibc 2.13) On the bottom line, the user has now the and FreeBSD (clang 6.0.1, ld 6.0.1) regained capability and perhaps responsibil- ity to care about its own DNS configuration, As can be depicted from [tab.1], the result- in case the application permits it. This can ing libraries are quite small. This makes them be compared with the possibility in the web in particular useful for systems with limited browser to switch DoH on or off and not just CPU power and main memory, which could be depending on a pre-configured setting which a IoT device for instance. In fact, the small- might be infringed with the user’s demands. ness of those libraries does not put a heavy burden on applications being statically linked with those. Generating none-recursive DNS 3.5 DNS resolver based on dnsre- client modules for s/qmail [11] like dnsip, solv dnsmxip and others, show up to have a com- In order to benefit from that architecture, a mon size of about 52 KByte (under Linux) in- potential DNS (stub) client can be build with cluding dnsresolv.a and qlibs.a statically three options using either: 5a description of the BIND APIs can be found here: https://bind9.readthedocs.io/en/latest/ 1. libdnsresolv.so – dynamic, position in- libdns.html

9 linked. The inclusion of CurveDNS routines [4] M. Blanchet. Special-Use IPv6 Ad- enhance the client routines by about 10 kByte dresses. https : / / tools . ietf . org / and further 10 kBytes are required for recur- html/rfc5156. Apr. 2008. sive DNS clients like dnsqr [14]. [5] A. Durand, J. Ihren, and P. Savola. Op- erational Considerations and Issues with 4 Summary IPv6 DNS. https://tools.ietf.org/ html/rfc4472. 2006. With djbdnscurve6 and the DNS stub li- [6] R. Gilligan et al. Basic Socket Interface brary provided in fehQlibs a solution is given Extensions for IPv6. https://tools. taking care of IPv6 LLU endpoint addresses ietf.org/html/rfc3493. 2003. for DNS queries and responses. However, this does not allow to proliferate IPv6 LLU ad- [7] E. Haleplidis and K. Pentikousis. dresses in DNS as exempted by [5]. Software-Defined Networking (SDN): The DNS stub resolver can be configured Layers and Architecture Terminology. by user-space environment variables. The https : / / tools . ietf . org / html / solution also provides binding to dynami- rfc7426. Jan. 2015. cally created IPv6 addresses on ephemeral in- [8] R. Hinden and S. Deering. IP Version terfaces generated by software defined link- 6 Addressing Architecture. https : / / segments. tools.ietf.org/html/rfc4291. 2006. The DNS stub resolver – available with and [9] P. Hoffman and P. McManus. DNS without CurveDNS capabilities – is stable and Queries over HTTPS (DoH). https:// mature and in particular suited for devices tools.ietf.org/html/rfc8484. Oct. with restricted sources. The code is available 2018. (enhancing D.J.Bernstein’s library functions) without restriction and well documented. [10] E. Hoffmann. fehQlibs. https://www. Though many current requirements for fehcom.de/ipnet/qlibs.html. 2019. DNS query and response are missing (like [11] E. Hoffmann. s/qmail. https: //www. DNSSec and multicast support), they are not fehcom.de/sqmail.html. 2020. infringing with the proposed solution. [12] E. Hoffmann. TLS encryption for Client/Server IPv6/IPv4 communica- References tion. https://www.fehcom.de/ipnet/ ucspi-ssl.html. Dec. 2019. [1] A. Badach and E. Hoffmann. Technik [13] E. Hoffmann. UCSPI for IPv6. https: der IP-Netze. 4th Edition. Hanser Ver- //www.fehcom.de/ipnet/ucspi-tcp6. lag, 2019. html. Dec. 2019. [2] D.J. Bernstein. djbdns. https://cr.yp. [14] E. Hoffmann. Unified IPv6 DNS Secu- to/djbdns.html. 2019. rity. https://www.fehcom.de/ipnet/ [3] D.J. Bernstein. qmail. https://cr.yp. djbdnscurve6.html. 2019. to/qmail.html. Jan. 2010. url: https: [15] Internet Assigned Numer Authority. //cr.yp.to/qmail.html. Root Servers. https://www.iana.org/ domains/root/servers. Jan. 2020.

10 [16] J. Jeong et al. IPv6 Router Advertise- [27] M. Thomson and R. Bellis. Location ment Options for DNS Configuration. Information Server (LIS) Discovery / https : / / tools . ietf . org / html / Using IP Addresses and Reverse DNS. rfc6106. 2010. https : / / tools . ietf . org / html / [17] KAME. The KAME project. http : / / rfc8484. Apr. 2014. www.kame.net/. 1998. [28] M. Thomson and Winterbottom J. Dis- [18] F. von Leitner. What is djbdns and why covering the Local Location Informa- does it need IPv6? https://www.fefe. tion Server (LIS). http://www.rfc- de/dns/. 2019. editor.org/rfc/rfc5986. Sept. 2010. [19] Microsoft. IPv6. http : / / technet . [29] S. Thomson, T. Narten, and T. Jin- microsoft . com / en - us / network / mei. IPv6 Stateless Address Autoconfig- bb530961. 2012. uration. http://www.ietf.org/rfc/ rfc4862. 2007. [20] P. Mockapetris. DOMAIN NAMES - CONCEPTS AND FACILITIES. [30] S. Thomson et al. DNS Extensions to https : / / tools . ietf . org / html / Support IP Version 6. https://tools. rfc1034. Nov. 1987. ietf.org/html/rfc3596. 2003. [21] T. Mrugalski et al. Dynamic Host Con- [31] M. Wasserman and P. Seite. Current figuration Protocol for IPv6 (DHCPv6). Practices for Multiple-Interface Hosts. https : / / tools . ietf . org / html / https : / / tools . ietf . org / html / rfc8415. Nov. 2018. rfc6419. 2011. [22] T. Narten et al. Neighbor Discovery for [32] WIDE. WIDE v6 working group. http: IP version 6 (IPv6). http://www.ietf. //www.v6.wide.ad.jp/. 2003. org/rfc/rfc4861. 2007. [23] Plummer, D. C. An Ethernet Address Resolution Protocol. https : / / tools . ietf.org/html/rfc826. Nov. 1982. [24] L. Poettering. systemd. https : / / github . com / systemd / systemd. Jan. 2020. [25] USAGI Project. Linux IPv6 Develop- ment Project. http : / / www . linux - ipv6.org/. 2006. [26] W. Stevens, M. Thomas, and T. Jin- mei. Advanced Sockets Application Pro- gram Interface (API) for IPv6. https: / / tools . ietf . org / html / rfc3542. May 2003.

11