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 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
cache_size = n
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 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;