Linux: DNS mit Dnsmasq, DNSCrypt-Proxy & Tor

Verschlüsselt, anonymisiert, schützt alles!

Vorbemerkung

Zu den Methoden, das Nutzungsverhalten von Internetnutzern zu überwachen oder deren Zugriff auf Inhalte im Internet zu zensieren, was von Befürwortern als „Internet-Sperre“ bezeichnit wird, zählen Manipulationen der Namensauflösung und des Domain Name System (DNS). Bekannt sind Manipulationen in Ländern wie China. In Deutschland und Europa wurden in der Vergangenheit ähnliche Eingriffe vorgenommen oder Versuche zur Entwicklung und Durchsetzung von Zensur-Infrastrukturen gestartet. Auch Geheimdienste haben ein reges Interesse am Blockieren, Abfangen und Auswerten von Anfragen zur Namensauflösung wie das QUANTUMTHEORY/QUANTUMDNS System der 5-Eyes Geheimdienste aufgezeigt hat.

Zu den Methoden zur Abwehr der eigenen Überwachung und der Eingriffe in die Rezipientenfreiheit über die oben genannten Manipulationen gehört die Änderung der Konfiguration der Namensauflösung und Nutzung des DNS, um Zensur-Infrastrukturen und manipulierte Nameserver zu umgehen.

Tor

Nach der Installation von Tor wird in die Tor Konfigurationsdatei /etc/tor/torrc eingefügt:

DNSPort 127.0.0.1:1053

DNSCrypt-Proxy

DNSCrypt-Proxy Logo

DNSCrypt-Proxy ist ein DNS Proxy, der das DNSCrypt Protokoll in Version 1 und 2, das keine offizielle Spezifikation der IETF ist und das DNS Queries over HTTPS (DoH) Protokoll nach IETF RFC8484 implementiert. Mit beiden Protokollen werden Anfragen und Antworten zur Namensauflösung verschlüsselt zwischen dem Proxy und DNS-Resolvern ausgetauscht, die DNSCrypt und/oder DoH ebenfalls unterstützen.

Zusätzlich hat DNSCrypt-Proxy u. a. weitere Funktionen:

  • HTTP/SOCKS Proxy-Schnittstelle
  • Filtern und Manipulieren von ausgehenden DNS-Anfragen
  • Weiterleiten von Anfragen zu spezifischen DNS-Resolvern
  • spezifische DNS-Resolver nicht verwenden
  • lokales Zwischenspeichern von DNS-Antworten
  • automatische Aktualisierung der Liste der DNSCrypt-Resolver, die DNSCrypt/DoH unterstützen
  • kompatibel mit DNSSEC

Alternativ kann man auch den fdns (Firejail DoH/DoT Proxy server) verwenden.

Installation

Ggf. muss golang aus einen aktuelleren Zweig (z. B. testing Repository) installiert werden.

sudo aptitude install git golang
mkdir dcp
cd dcp
git clone https://github.com/jedisct1/dnscrypt-proxy src
cd src/dnscrypt-proxy/
go clean
env CGO_ENABLED=0 go build -mod vendor
sudo adduser --system --disabled-password --disabled-login --home /var/cache/dnscryptproxy --shell /bin/false --group dnscrypt-proxy
sudo chmod 750 /var/cache/dnscryptproxy
sudo mkdir /etc/dnscryptproxy
sudo chown :dnscrypt-proxy /etc/dnscryptproxy
sudo chmod 750 /etc/dnscryptproxy
sudo mkdir /var/log/dnscryptproxy
sudo chown dnscrypt-proxy:adm /var/log/dnscryptproxy
sudo chmod 750 /var/log/dnscryptproxy
sudo cp ./example-dnscrypt-proxy.toml /etc/dnscryptproxy/dnscrypt-proxy.toml
sudo chown :dnscrypt-proxy /etc/dnscryptproxy/dnscrypt-proxy.toml
sudo cp -f ../../linux-amd64/dnscrypt-proxy /usr/local/sbin/
sudo chown root:root /usr/local/sbin/dnscrypt-proxy
sudo chmod 755 /usr/local/sbin/dnscrypt-proxy
rm -Rf ../../linux-amd64

Aktualisierung:

cd /pfad/dcp/src
git pull origin master

Alternativ kann man ein bereits erstelltes Binary herunterladen und installieren. Das Archiv enthält auch Beispiel-Konfigurationsdateien.

Anschließend die dnscryptproxy.service Unit-Datei herunterladen und in das entsprechende Verzeichnis kopieren:

/etc/systemd/system/dnscryptproxy.service
[Unit]
Description=DNSCrypt-Proxy
After=network.target network-online.target tor.service
Requires=tor.service
Wants=network-online.target
Before=dnsmasq.service
 
[Service]
Type=simple
User=dnscrypt-proxy
Group=dnscrypt-proxy
RuntimeDirectory=dnscryptproxy
RuntimeDirectoryMode=750
CacheDirectory=dnscryptproxy
CacheDirectoryMode=750
LogsDirectory=dnscryptproxy
LogsDirectoryMode=750
ConfigurationDirectory=dnscryptproxy
ConfigurationDirectoryMode=750
PIDFile=/run/dnscryptproxy/proxy.pid
ExecStart=/usr/local/sbin/dnscrypt-proxy -config /etc/dnscryptproxy/dnscrypt-proxy.toml -pidfile /run/dnscryptproxy/proxy.pid
ExecStop=/bin/kill -TERM $MAINPID
TimeoutStartSec=180
Restart=on-failure
RestartSec=10s
UMask=0027
RestrictAddressFamilies=AF_INET
RestrictRealtime=true
RestrictNamespaces=true
RestrictSUIDSGID=true
PrivateDevices=true
PrivateTmp=true
PrivateUsers=true
ProtectControlGroups=true
ProtectClock=true
ProtectHome=true
ProtectHostname=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectKernelLogs=true
ProtectProc=invisible
ProtectSystem=strict
ProcSubset=pid
RemoveIPC=true
InaccessiblePaths=/boot /root /home
ReadWritePaths=/run/dnscryptproxy /var/cache/dnscryptproxy /var/log/dnscryptproxy
MemoryDenyWriteExecute=true
NoNewPrivileges=true
IPAddressAllow=localhost
IPAddressDeny=any
LockPersonality=true
CapabilityBoundingSet=
SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallFilter=~@privileged @resources
SystemCallErrorNumber=EPERM
 
[Install]
WantedBy=multi-user.target
sudo cp dnscryptproxy.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable dnscryptproxy.service

Konfiguration

sudo vi /etc/dnscryptproxy/dnscrypt-proxy.toml

server_names = ['name1', 'name2', 'nameN'] oder
# server_names

require_dnssec = true
require_nolog = true
require_nofilter = true

disabled_server_names = ['cisco', 'cloudflare', 'cloudflare-ipv6', 'google', 'quad9-name', 'yandex']

Es wird nur die Auswahl der benannten DNSCrypt-Resolver verwendet oder – wenn auskommentiert – alle der Liste der DNSCrypt-Resolver. Wählt man die zweite Option, sollte man die require_* Optionen aktivieren, um nur die Resolver zu nutzen, die DNSSEC Prüfungen selbst ausführen oder auswerten und erklärt haben, keine Anfragen zu protokollieren, sie nicht zu filtern oder zu blockieren (aus welchen Gründen auch immer). In der disabled_server_names Option können die Namen der Resolver eingetragen werden, die nicht angefragt werden sollen, selbst wenn sie die require_* Bedingungen erfüllen.

listen_addresses = ['127.0.0.1:port']

Der DNSCrypt-Proxy lauscht nur lokal an IP-Adresse 127.0.0.1 am angegebenen Port (z. B. 1153) auf Anfragen.

ipv4_servers = true|false
ipv6_servers = true|false

Einstellung, ob man nur DNS-Resolver ansprechen will, die über IPv4 oder IPv6 erreichbar sind.

dnscrypt_servers = true

DNS-Resolver, die das DNSCrypt Protokoll unterstützen, werden verwendet.

doh_servers = true

DNS-Resolver, die das DNS Queries over HTTPS (DoH) Protokoll unterstützen, werden verwendet.

force_tcp = true
proxy = "socks5://127.0.0.1:9050"

Für die Anonymisierung des Datenverkehrs mit den DNS-Resolvern über Tor. Alternativ kann man auch Anonymized DNS mit Relays als anonymisierende Proxys konfigurieren. Anonymized DNS geht nur mit DNScrypt-Resolvern und UDP (also force_tcp = false). Mit Anonymized DNS nutzt man entweder DoH nicht anonymisiert per Tor plus DNScrypt anonymisiert oder nur DNScrypt anonymisiert. Für eine ähnliche Anonymisierung des DNS-Traffics zu DoH-Resolvern über Proxys haben Cloudflare und Apple bei der IETF Oblivious DNS (ODoH) eingereicht.

lb_strategy = 'methode'
lb_estimator = true

Mit random als Methode werden Anfragen zufällig auf alle Resolver verteilt, unabhängig von ihren Antwortzeiten. Mit p2 oder ph statt random werden Anfragen zufällig auf die zwei Resolver mit den kürzesten Antwortzeiten oder die Hälfte aller Resolver mit kürzesten Antwortzeiten verteilt, wobei die p2/ph Listen dynamisch bei Veränderungen der Antwortzeiten neu gebildet werden. Mit first wird stets der Resolver verwendet, der die kürzeste Antwortzeit von allen Resolvern aufweist.

Mit der aktivierten zweiten Einstellung wird kontinuierlich die Latenz der Resolver ermittelt und die Resultate bei der Sortierung der Listen verwendet.

use_syslog = false

Ausgaben des DNSCrypt-Proxy werden nicht in Systemlogs mitprotokolliert.

dnscrypt_ephemeral_keys = true
tls_disable_session_tickets = true
tls_cipher_suite = [nr1, nrN]

Für jede Anfrage werden neue Schlüssel erzeugt, statt nur einmalig beim Start, TLS Session-Tickets werden deaktiviert und dem Server, von dem die Liste der DNSCrypt-Resolver heruntergeladen wird wie auch den DoH-Servern werden die mit nr bezeichneten TLS Cipher-Suites vorgegeben. Achtung: Die in der Beispiel-Konfigurationsdatei angegebenen Beispiel Cipher-Suites tls_cipher_suite = [52392, 49199] unterstützt download.dnscrypt.info gerade nicht.

fallback_resolver = '127.0.0.1:1053'
ignore_system_dns = true

Angabe von Tor als DNS-Resolver, über den die Auflösung des Domainnamens erfolgen soll, von dem die Liste der DNSCrypt-Resolver heruntergeladen wird. Einen herkömmlichen DNS-Resolver kann man z. B. in den DNS-Resolver/Server Listen aussuchen.

netprobe_timeout = 10
netprobe_address = "127.0.0.1:1053"

Adresse und Port an die eine Verbindungsanfrage gesendet wird, um Internetkonnektivität festzustellen, bevor DNSCrypt-Proxy gestartet wird. Es wird n Sekunden auf einen erfolgreichen Verbindungsaufbau gewartet bzw. mit 0 die Funktion deaktiviert.

block_ipv6 = true|false

IPv6 Anfragen werden verarbeitet oder direkt blockiert.

block_unqualified = true

A/AAAA Anfragen zu Hostnamen ohne Domainnamen werden direkt blockiert.

block_undelegated = true

Anfragen zu Adressen lokaler Zonen werden direkt blockiert.

log_files_max_size = 1
log_files_max_age = 1
log_files_max_backups = 1

Die Logdateien in /var/log/dnscryptproxy/ werden von DNSCrypt-Proxy selbst rotiert. Mit den obigen Optionen erreichen sie eine maximale Größe von 1 MB und danach wird von jeder Logdatei ein Backup angelegt, das maximal einen Tag vorgehalten wird. Will man keine Logdateien anlegen, belässt man die Angaben zu Namen und Pfaden auskommentiert.

forwarding_rules = '/etc/dnscryptproxy/forwarding-rules.txt'

In der Regeldatei können ähnlich wie mit der fallback_resolver Option Anfragen zu weiteren Domainnamen unverschlüsselt an spezifische DNS-Resolver weitergeleitet werden.

Beispiel
domain.tld Resolver-IP-Adresse1[,Resolver-Ip-AdresseN]

cloaking_rules = '/etc/dnscryptproxy/cloaking-rules.txt'

In der Regeldatei können ähnlich wie in der /etc/hosts Datei Domainnamen (oder ihren Mustern) statische IP-Adressen zugeordnet werden. Statt IP-Adressen können auch andere Domainnamen eingesetzt werden, deren IP-Adressen nach Auflösung den ursprünglichen Domainnamen zugeordnet werden (siehe auch Cache Poisoning).

Beispiel
localhost   127.0.0.1
domain.tld  IP-Adresse
domain1.tld domain2.tld

Bestimmt die maximale Anzahl von n aufgelösten Domainnamen, die im RAM-Zwischenspeicher für erneute Abfragen vorgehalten werden. Standard sind 512 Einträge, aber n sollte <= n bei Dnsmasq sein.

[local_doh]
# listen_addresses = ['127.0.0.1:port']
# path = "/dns-query"
# cert_file = '/etc/dnscryptproxy/name.pem'
# cert_key_file = '/etc/dnscryptproxy/name-key.pem'

DNSCrypt-Proxy kann neben seiner Funktion als DNS-Proxy zusätzlich als lokaler DoH Server arbeiten, wenn man die Einstellungen aktiviert, die benötigten Zertifikate erstellt und das Zertifikat der lokalen Root-CA in Anwendungen importiert, die direkte Verbindungen zu DoH Servern verlangen, um per DoH Namen aufzulösen.

[query_log]
   file = '/var/log/dnscryptproxy/query.log'
   format = 'tsv'
   ignored_qtypes = ['DNSKEY', 'NS']

Logdatei, in der die Anfragen im Tab-separated values Format mitprotokolliert werden können.

[nx_log]
   file = '/var/log/dnscryptproxy/nx.log'
   format = 'tsv'

Logdatei, in der Anfragen zu nicht extistierenden Zonen mitprotokolliert werden können.

[blacklist]
   blacklist_file = '/etc/dnscryptproxy/blacklist.txt'
   log_file = '/var/log/dnscryptproxy/blacklist.log'
   log_format = 'tsv'

[ip_blacklist]
   blacklist_file = '/etc/dnscryptproxy/ip-blacklist.txt'
   log_file = '/var/log/dnscryptproxy/blacklist.log'
   log_format = 'tsv'

[whitelist]
   whitelist_file = '/etc/dnscryptproxy/whitelist.txt'
   log_file = '/var/log/dnscryptproxy/whitelist.log'
   log_format = 'tsv'

Mit der Muster-Blacklist für Domainnamen, der IP-Blacklist für IP-Adressen oder ihren Anteilen und der Muster-Whitelist für Domainnamen können ausgehende Anfragen gefiltert bzw. blockiert oder generell zugelassen werden.

[sources]
   cache_file = '/var/cache/dnscryptproxy/public-resolvers.md'

Absolute Pfadangabe zur Datei, in der die Liste der DNSCrypt-Resolver heruntergeladen wird.

Dnsmasq

Dnsmasq Logo

Dnsmasq ist ein DNS-Resolver/Server, DNS-Cache und DHCP-Server. In der Anleitung wird Dnsmasq nur als DNS-Resolver eingesetzt, der lokale Adressen direkt auflöst und alle weiteren Anfragen an DNSCrypt-Proxy2 und/oder Tor weiterleitet.

Installation

sudo aptitude install dnsmasq

Anschließend die dnsmasq.service Unit-Datei herunterladen und in das entsprechende Verzeichnis kopieren:

/etc/systemd/system/dnsmasq.service
[Unit]
Description=dnsmasq - A lightweight DHCP and caching DNS server
Requires=network.target
Wants=nss-lookup.target
Before=nss-lookup.target
After=network.target dnscryptproxy.service
 
[Service]
Type=forking
User=dnsmasq
Group=nogroup
RuntimeDirectory=dnsmasq
RuntimeDirectoryMode=0750
PIDFile=/run/dnsmasq/dnsmasq.pid
PermissionsStartOnly=true
ExecStartPre=/usr/sbin/dnsmasq --test
ExecStartPre=/usr/local/bin/dnsmasq_blocklist
ExecStart=/usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -C /etc/dnsmasq.conf
ExecStartPost=/bin/sh -c 'echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.dnsmasq && /usr/bin/chmod 644 /run/resolvconf/interface/lo.dnsmasq'
ExecStop=/bin/sh -c '/sbin/resolvconf -d lo.dnsmasq && /bin/kill -TERM $MAINPID'
ExecReload=/bin/kill -HUP $MAINPID
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
PrivateTmp=yes
PrivateDevices=yes
NoNewPrivileges=yes
IPAddressAllow=localhost
IPAddressDeny=any
LockPersonality=true
MemoryDenyWriteExecute=true
ProtectClock=true
ProtectControlGroups=true
ProtectHome=yes
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectProc=invisible
ProtectSystem=full
ProcSubset=pid
InaccessiblePaths=/boot /root /home
ReadOnlyPaths=/etc /usr
ReadWritePaths=/var/log/dnsmasq /etc/dnsmasq.d
RemoveIPC=true
RestrictAddressFamilies=AF_INET AF_UNIX AF_NETLINK
RestrictNamespaces=~cgroup ipc net mnt pid user uts
RestrictRealtime=true
RestrictSUIDSGID=true
SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallFilter=~@obsolete @mount @resources @privileged
SystemCallErrorNumber=EPERM
UMask=0027
 
[Install]
WantedBy=multi-user.target
sudo systemctl stop dnsmasq.service
sudo systemctl disable dnsmasq.service
sudo cp dnsmasq.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable dnscryptproxy.service

Konfiguration

sudo chown dnsmasq:root /etc/dnsmasq.conf
sudo chmod 440 /etc/dnsmasq.conf
sudo vi /etc/dnsmasq.conf

port=53
interface=lo
listen-address=127.0.0.1
except-interface=nic-name
no-dhcp-interface=lo
bind-interfaces

Dnsmasq lauscht nur lokal am Loopback-Interface (127.0.0.1) und Port 53 auf DNS-Anfragen zur Namenauflösung, DHCP wird nicht bedient.

no-resolv
no-poll

Die Adressen der Nameserver, an die Dnsmasq die Anfragen weiterleitet (DNSCrypt-Proxy2 und Tor), werden direkt in der Dnsmasq Konfiguration definiert und deshalb die Auswertung und Überwachung auf Änderungen der /etc/resolv.conf Datei deaktiviert.

domain-needed
bogus-priv
dns-loop-detect
stop-dns-rebind
rebind-localhost-ok
proxy-dnssec

  • Anfragen, die keine Domainnamen bzw. -anteile enthalten, werden nicht an Nameserver weitergeleitet
  • Anfragen zu Adressen aus dem privaten Adressraum werden nicht an Nameserver weitergeleitet
  • Nameserver, die Weiterleitungs-Loops auslösen, werden nicht weiter angefragt
  • Antworten der Nameserver, die Adressen aus dem privaten Adressraum enthalten, werden verworfen und protokolliert
  • Dnsmasq führt selbst keine DNSSEC Überprüfung durch, sondern cacht Prüfresultate der Nameserver und leitet sie an anfragende Clients weiter

cache-size=n

Bestimmt die maximale Anzahl von n aufgelösten Domainnamen, die im RAM-Zwischenspeicher für erneute Abfragen vorgehalten werden. Standard sind 150 Einträge, aber n sollte >= n bei DNSCrypt-Proxy2 sein.

local=/domainname1/
local=/domainnameN/

Angabe rein lokal existierender Domainnamen und FQDNs, die nur direkt über die Einträge in der /etc/hosts Datei aufgelöst werden bzw. hier die in der /etc/hosts vorhandenen Domainnamen einsetzen.

address=/host.domain.tld1/a.b.c.d
address=/host.domain.tldN/a.b.c.d

Die aufgeführten Domainnamen werden nicht durch Anfragen an Nameserver aufgelöst, sondern ihnen wird direkt eine statische IP-Adressen zugeordnet. Kann ergänzend zur /etc/hosts Datei oder alternativ zur Cloaking Regeldatei von DNCrypt-Proxy2 eingesetzt werden.

server=/.onion/127.0.0.1#1053
server=/.exit/127.0.0.1#1053
server=/.i2p/127.0.0.1#4444
server=/download.dnscrypt.info/127.0.0.1#1053
server=/raw.githubusercontent.com/127.0.0.1#1053
server=127.0.0.1#1153

  • Anfragen zur Auflösung von Domainnamen mit den .onion, .exit Tor TLDs werden an Tor bzw. zu Tors DNSPort weitergeleitet
  • Anfragen zur Auflösung von Domainnamen mit der .i2p I2P TLD werden an den lokalen I2P HTTP-Proxy weitergeleitet
  • Die download.dnscrypt.info und raw.githubusercontent.com Domains, von der die Liste der DNSCrypt-Resolver heruntergeladen wird, wird anonymisiert über Tor aufgelöst – wenn auskommentiert, über den Fallback DNS-Resolver, der in der Konfigurationsdatei von DNSCrypt-Proxy2 angegeben ist
  • Alle weiteren Anfragen zu anderen Domainnamen werden an DNSCrypt-Proxy2 weitergeleitet

Man kann das Modell auch umkehren, wenn man nur spezifische Domainnamen über DNSCrypt-Proxy2 auflösen lassen will und für alle anderen Domainnamen die anonymisierte Namensauflösung über Tor bevorzugt:

Beispiel
server=/domain1/127.0.0.1#1153
server=/domainN/127.0.0.1#1153
server=/.i2p/127.0.0.1#4444
server=127.0.0.1#1053

log-facility=/var/log/dnsmasq/logfile
log-queries

Anfragen und Statusmeldungen von Dnsmasq werden in der angegebenen Logdatei mitprotokolliert.

Tracker- und Ad-Blocking

Die blacklist.txt Blacklist von DNSCrypt-Proxy kann man auch für die Blockierung der Namensauflösung der Domains von Tracker- und Werbe-Dienstleistern direkt in Dnsmasq als DNS Sinkhole verwenden, sofern in der DNSCrypt-Proxy Blacklist nur Domainnamen, aber keine Muster verwendet werden.

Vorgehensweise

Man speichert das folgende „dnsmasq_blocklist“ Skript in /usr/local/bin. Das Skript liest die DNSCrypt-Proxy Blacklist aus (die man mit einem Editor um neue, zu blockierende Tracker-Domains ergänzt) und erstellt die Dnsmasq Blacklist mit address=„/tracker.domain/“ Einträgen für jede Domain, so dass eine Anfrage zu tracker.domain von Dnsmasq mit NXDOMAIN beantwortet wird:

dnsmasq_blocklist
#!/bin/sh
 
dcpblockfile="/etc/dnscryptproxy/blacklist.txt"
dmblockfile="/etc/dnsmasq.d/blacklist.txt"
 
if [ ! -f "$dmblockfile" ]; then
	touch "$dmblockfile"
else
	echo -n "" > "$dmblockfile"
fi
 
while read line; do
    domain="/${line}/"
    echo "address=\"${domain}\"" >> "$dmblockfile"
done < $dcpblockfile
 
exit 0
$ dig @127.0.0.1 -p 53 -t A -4 kissmetrics.com
 
; <<>> DiG 9.11.3-1~bpo9+1-Debian <<>> @127.0.0.1 -p 53 -t A -4 kissmetrics.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 18196
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
 
;; QUESTION SECTION:
;kissmetrics.com.               IN      A

Die dnsmasq.conf Dnsmasq-Konfigurationsdatei wird abgeändert, um die Dnsmasq Blacklist einzulesen:

dnsmasq.conf
conf-dir=/etc/dnsmasq.d/,*.txt

DNS-Resolver/Server Listen

Konfiguration Namensauflösung

Sofern noch nicht installiert, das resolvconf Paket nachinstallieren:

sudo aptitude install resolvconf

Danach ist dafür Sorge zu tragen, dass in der letztendlich genutzten resolv.conf Konfigurationsdatei nur auf localhost und damit Dnsmasq als DNS-Resolver zur Namensauflösung verwiesen wird:

nameserver 127.0.0.1

Bei dynamischer Konfiguration der Netzwerkkarte per DHCP wird die resolv.conf Datei überschreiben und die Adressen der Nameserver eingesetzt, die der DHCP Client vom DHCP Server erhält, so dass man dafür Sorge tragen muss, dass ein Überschreiben der resolv.conf Datei unterbleibt.

Unter Debian erreicht man das durch Entfernung von domain-name-servers in der request Zeile und Auskommentieren von prepend domain-name-servers 127.0.0.1; in /etc/dhcp/dhclient.conf:

request subnet-mask, (…) domain-name-servers
prepend domain-name-servers 127.0.0.1;

Sonstiges

Verweise auf aktuelle Seite