Freifunk-Gateway aufsetzen/DNS

Aus Freifunk Franken

Funktion

Ein DNS Server wird verwendet um Namen in eine IP aufzulösen. Jeder Gatewaybetreiber kann einen DNS Server betreiben oder auch einfach auf einen anderen im Freifunknetz verweisen (bitte nicht auf 8.8.8.8 oder 9.9.9.9 verweisen weil [...]). Bereits funktionierende DNS Server sind hier zu finden:
https://wiki.freifunk-franken.de/w/DNS#Funktionsf.C3.A4higkeit_auf_allen_GWs
Dann muss hier gar nichts gemacht werden und diese IPs einfach per DHCP
https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen/DHCP als DNS Server ausgeliefert werden

In der einfachsten Konfiguration betreiben wir den DNS Server als Caching Nameserver, d.h. alle Anfragen Domainnames in IP Adressen zu wandeln, die schon mal durch den Server gelaufen sind, werden selber beantwortet. Ansonsten wird ein anderer DNS-Server aus dem Freifunk-Netz oder dem Internet angefragt.

Diese Seite beschreibt nur das Bereitstellen des DNS Servers per IPv4. Für IPv6 findet sich die Anleitung unter [1]. Grundsätzlich wird unabhängig vom Protokoll, über das die Anfrage erfolgt, immer sowohl A (IPv4) und AAAA (IPv6) Record zurückgegeben. Ist aber z.B. IPv4 kaputt und IPv6 geht, muss auch ein DNS über IPv6 erreichbar sein, sonst geht IPv6 doch nicht ...

ACHTUNG! Freifunk Franken hat nun sein eigenes DNS System. Damit dies von überall funktioniert bitte diese Seite beachten.

Bind9 Konfiguration

Hierfür editieren wir die Datei named.conf.options... vi /etc/bind/named.conf.options

...und tragen die DNS Server, die wir anfragen wollen, wenn wir die Information nicht selber haben, als forwarders ein:

.
.
.
forwarders  {
              10.83.252.11;
              10.50.252.0;
            };
allow-query { 
              127.0.0.1/8; 
              10.0.0.0/8; 
            };
.
.
.	

Darüber hinaus ist es sinnvoll, nur Anfragen zu beantworten, die das Gateway selber stellt (localhost; 127.0.0.1/8) oder die aus dem Freifunk Netz kommen (10.0.0.0/8). Der zugehörige Parameter heißt "allow-query".

Neustart des DNS-Servers mit der neuen Konfiguration: /etc/init.d/bind9 restart

Testen können wir, indem wir vom DNS Server des Gateways (localhost/127.0.0.1) eine DNS-Auflösung abfragen.

Ein DNS Resolve für freifunk-franken.de ... dig @127.0.0.1 freifunk-franken.de

...sollte von uns selber (Server localhost; 127.0.0.1) beantwortet werden:

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5819
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:
;freifunk-franken.de. IN A
;; ANSWER SECTION:
freifunk-franken.de. 3599 IN A 31.172.113.113	
.
. 
.
;; Query time: 117 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Sep 08 14:16:32 EEST 2015
;; MSG SIZE  rcvd: 275


unbound config

Unbound kann verwendet werden um DNS Querys verschlüsselt an einen DoT Server weiterzureichen. Einfach unbound installieren und folgende config verwenden (meist /etc/unbound/unbound.conf). Er kann aber auch für normales forwarding verwendet werden (siehe Kommentare in der config)

server:
  access-control: 10.0.0.0/8 allow
  access-control: 127.0.0.0/8 allow
  access-control: 192.168.0.0/16 allow
  access-control: fc00::/7 allow
  cache-max-ttl: 14400
  cache-min-ttl: 1200
  hide-identity: yes
  hide-version: yes
  interface: 0.0.0.0
  interface: ::0
  prefetch: yes
  rrset-roundrobin: yes
  use-caps-for-id: yes

# Enable or disable whether TCP queries are answered or issued.
do-tcp: yes

# Enable  or disable whether the upstream queries use TCP only for
# transport.  Useful in tunneling scenarios.
tcp-upstream: yes

# If enabled id.server and hostname.bind queries are refused.
hide-identity: yes

# If enabled version.server and version.bind queries are refused.
hide-version: yes

# If yes, Unbound doesn't insert authority/additional sections
# into response messages when those sections are not required.
minimal-responses: yes

# If yes, message cache elements are prefetched before they expire
# to keep the cache up to date.
prefetch: yes

# Send minimum amount of information to  upstream servers to
# enhance privacy.
qname-minimisation: yes

# Enabled or disable whether the upstream queries use SSL only for
# transport.
# ACHTUNG! Nur einschalten wenn als Forwarder DoT Server verwendet werden
# ansonsten auskommentieren!
ssl-upstream: yes

# Use 0x20-encoded random bits in the query to foil spoof
# attempts.
use-caps-for-id: yes

#forward-zone:
#   name: "."
#   forward-addr: 1.0.0.1@53#one.one.one.one
#   forward-addr: 1.1.1.1@53#one.one.one.one
#   forward-addr: 8.8.4.4@53#dns.google
#   forward-addr: 8.8.8.8@53#dns.google
#   forward-addr: 9.9.9.9@53#dns.quad9.net
#   forward-addr: 149.112.112.112@53#dns.quad9.net

forward-zone:
    name: "."
    forward-addr: 2a06:e881:340d::1@853#dns.dresel.it