====== DNS mit Bind ======
Bind 10 ist da:
* [[http://www.pro-linux.de/news/1/print/19512/bind-10-in-version-100-freigegeben.html]]
* [[http://bind10.isc.org/wiki]]
Er ist (im Gegensatz zu seinen Vorgängern) modular und benötigt eine Python-Installation.
===== Kurz-Info =====
> apt install ldnsutils && apt purge bind9-dnsutils knot-dnsutils
> apt autoremove
> drill -Q heise.de
193.99.144.80
> drill -Qx 193.99.144.80
redirector.heise.de.
===== Beispiele =====
# https://one.one.one.one/help
# IPv4: one.one.one.one -> 1.1.1.1
# IPv6: one.one.one.one -> 2606:4700:4700::1111
# ldnsutils
drill google.com any
drill -Q google.com any
drill -Q google.com a
drill -Q google.com aaaa
drill -Q @one.one.one.one google.com aaaa
# bind9-dnsutils
dig google.com any
dig +short google.com any
dig +short google.com a
dig +short google.com aaaa
dig +short @one.one.one.one google.com aaaa
# bind9-dnsutils
host -a google.com
host google.com
host -t a google.com
host -t aaaa google.com
host -t aaaa google.com one.one.one.one
# bind9-dnsutils
nslookup google.com
nslookup -type=a google.com
nslookup -type=aaaa google.com
nslookup -type=aaaa google.com one.one.one.one
# pwsh
Resolve-DnsName -Type ANY google.com
(Resolve-DnsName google.com).IPAddress
(Resolve-DnsName -Type A google.com).IPAddress
(Resolve-DnsName -Type AAAA google.com).IPAddress
(Resolve-DnsName -Type A_AAAA -Server one.one.one.one google.com).IPAddress
===== Sicherheit (DNS Records) =====
Best practices: [[https://www.m3aawg.org/sites/default/files/m3aawg_parked_domains_bp-2015-12.pdf]]
==== CAA (Certification Authority Authorization) ====
Nur von z.B. Let's Encrypt Zertifikate akzeptieren
example.com. 300 IN CAA 0 issue "letsencrypt.org"
example.com. 300 IN CAA 0 issuewild "letsencrypt.org"
==== Null MX (Mail Exchanger) ====
Wenn man keine E-Mails mit seinem Server versenden möchte.
Priorität auf ''0'' setzen und Wert (Mail Server) auf ''.''
example.com. MX 0 .
*.example.com. MX 0 .
==== DKIM (DomainKeys Identified Mail) ====
[[https://en.wikipedia.org/wiki/DMARC]]
Wenn man keine E-Mails mit seinem Server versenden möchte und vermeiden will, dass jemand die Domain missbraucht.
*._domainkey.example.com. IN TXT "v=DKIM1; p="
==== SPF (Domain-based Message Authentication, Reporting and Conformance) ====
[[https://en.wikipedia.org/wiki/Sender_Policy_Framework]]
Wenn es einen MX und A Record für die Domain gibt, zulassen, ansonsten softfail.
example.com. IN TXT "v=spf1 +mx +a ~all"
Wenn man keine E-Mails mit seinem Server versenden möchte und vermeiden will, dass jemand die Domain missbraucht.
example.com. IN TXT "v=spf1 -all"
==== DMARC (Domain-based Message Authentication, Reporting and Conformance) ====
[[https://en.wikipedia.org/wiki/DMARC]]
Anfordern, dass alle E-Mails, die DKIM oder SPF nicht erfüllen in Spam zugestellt werden. Außderm alle Reports an diese E-Mail senden.
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; sp=quarantine; pct=100; adkim=r; aspf=r; fo=1; rua=mailto:security@example.com; ruf=mailto:security@example.com"
Wenn man keine E-Mails mit seinem Server versenden möchte und vermeiden will, dass jemand die Domain missbraucht.
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; sp=reject; pct=100; adkim=s; aspf=s; fo=1"
===== Caching only DNS =====
[[Caching only DNS]]
===== DHCP-Server und DNS-Server mit automatischem Update (DDNS) =====
* [[https://wiki.ubuntuusers.de/Archiv/DDNS]]
* [[https://www.foteviken.de/?p=1787]]
* [[http://www.online-tutorials.net/internet-netzwerk/dynamische-dns-updates-mit-dhcp/tutorials-t-29-307.html]]
cd /etc/bind/
cat `dnssec-keygen -a HMAC-MD5 -b 265 -n host dhcpkey`.key | cut -d " " -f 7
pBbXhGpya0ouQBfDHZhx1S7TWJnuaYo1ULFwUDG7HpExHQ==
===== Forwarding DNS =====
[[Forwarding DNS]]
===== Abfragen =====
==== nslookup ====
einen Hostnamen in eine IP auflösen:
# nslookup www.heise.de
zur Auflösung eines Hostnamens einen bestimmten DNS-Server (localhost) befragen:
# nslookup www.heise.de localhost
==== dig ====
einen Hostnamen in eine IP auflösen:
# dig www.heise.de
zur Auflösung eines Hostnamens einen bestimmten DNS-Server (localhost) befragen:
# dig @localhost www.heise.de
===== Zone saugen =====
==== nslookup ====
# nslookup -q=axfr www.heise.de localhost
==== dig ====
# dig @localhost www.heise.de axfr
===== Konfiguration =====
Linux mit SystemD
> vi /etc/systemd/resolved.conf
[Resolve]
DNS=191.168.1.1
FallbackDNS=191.168.1.2
> systemctl restart systemd-resolved.service
==== caching-only-DNS ====
(getestet in FreeBSD 4.7 mit BIND 8)
Ein chashing-only-DNS ist ein Name-Server, der die Domainnamen nur für sich speichert.
Das verringert (z.B.: bei Webservern) die Netzlast.
in der Datei "/etc/rc.conf" aktivieren:
named_enable="YES" # Run named, the DNS server (or NO).
named_program="/usr/sbin/named" # path to named, if you want a different one.
named_flags="-u bind -g bind" # Flags for named
# vi /etc/namedb/named.conf:
options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
version "[Secured]";
query-source address * port 53;
auth-nxdomain no;
allow-query {
127.0.0.1;
};
listen-on {
127/8;
};
};
logging {
category lame-servers {null; };
};
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
==== DNS-Server ====
Die IP-Adresse des DNS-Server's ist //192.168.1.1// und er löst alle Namen für das Netz //192.168.1.0/24// auf.
=== named.conf ===
# vi named.conf
options {
directory "/etc";
pid-file "named.pid";
listen-on { 127.0.0.1; 192.168.2.1; };
forwarders {
192.168.1.100;
};
};
zone "domain.de" {
type master;
file "domain.de.db";
notify no;
};
zone "1.168.192.in-addr.arpa" {
type master;
file "192.168.1.rev";
notify no;
};
zone "extern" {
type master;
file "extern.db";
notify no;
check-names ignore;
};
=== forward look-up ===
# vi domain.de.db
$TTL 3600
@ IN SOA ns.domain.de. root.ns.domain.de. (
2010051100 ; serial
3600 ; 1h refresh
900 ; 15M retry
604800 ; 7d expire
3600 ) ; 1h minimum ttl
IN NS ns.domain.de.
install IN A 192.168.1.1
ns CNAME install
server CNAME install
datenbank IN A 192.168.1.10
test IN A 192.168.1.11
web IN A 192.168.1.12
=== reverse look-up ===
# vi 192.168.1.rev
$TTL 3600
@ IN SOA ns.domain.de. root.ns.domain.de. (
2010051100 ; serial
3600 ; 1h refresh
900 ; 15M retry
604800 ; 7d expire
3600 ) ; 1h minimum ttl
IN NS ns.domain.de.
10 IN PTR datenbank.domain.de.
11 IN PTR test.domain.de.
12 IN PTR web.domain.de.
=== Abkürzungen per DNS ===
# vi extern.db
$TTL 3600
@ IN SOA ns.extern. root.ns.extern. (
2010051100 ; serial
3600 ; 1h refresh
900 ; 15M retry
604800 ; 7d expire
3600 ) ; 1h minimum ttl
IN NS ns.extern.
zuhause IN PTR 92.93.94.95
arbeit IN PTR 96.97.98.99
homepage IN PTR 100.101.102.103
kumpel IN PTR 104.105.106.107
==== Client ====
=== /etc/resolv.conf ===
# vi /etc/resolv.conf
search domain.de extern
nameserver 192.168.1.1
==== Slave ====
=== Vorbereitungen auf dem Master ===
Damit der zukünftige DNS-Slave dazu berechtigt ist, einen kompletten Zonen-Transfer durchzuführen, muss dies zunächst noch auf dem Master der DNS Zone erlaubt werden:
Per "allow-transfer" erlaubt man definierten Systemen den Zonen-Transfer aller auf diesem DNS-Server konfigurierten Zonen. Soll dieses nur auf Basis einer Zone erfolgen, so muss dies explitzit bei den Einstellungen der jeweiligen Zone erfolgen. Normalerweise sind Slaves durch NS Resource Records in den Zonendateien aufgelistet. Mit der Option also-notify können weitere Slaves definiert werden, die bei Änderungen per Notify benachrichtigt werden. Da derartige Slaves nicht in den Zonendateien aufgeführt sind, werden sie auch als Stealth Server - also "verborgene Server" - bezeichnet. Falls eine zonenspezifische also-notify-Option vorhanden ist, so überschreibt diese die globale.
# vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
forwarders {
10.10.2.10;
};
allow-query { any; };
allow-transfer { 10.30.1.101; 10.30.1.102; 10.30.1.243; 10.30.1.244; };
notify yes;
also-notify { 10.30.1.101; 10.30.1.102; 10.30.1.243; 10.30.1.244; };
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
=== Bind ===
# aptitude install bind9
# scp root@dnsmaster:/etc/bind/named.conf /etc/bind/
# sed -i 's#master#slave#g' /etc/bind/named.conf.local
# vi /etc/bind/named.conf.local
**alle Zeilen** um einen Master-Eintrag ergänzen...
vorher:
zone "30.10.in-addr.arpa" { type slave; file "/etc/bind/domain.rev.db"; };
nachher:
zone "30.10.in-addr.arpa" { type slave; file "/etc/bind/domain.rev.db"; masters { 10.30.1.1;}; };
In dem Pfad "/etc/bind/" erlaubt AppAmor keinen Schreibzugriffe, statt dessen soll der Pfad "/var/lib/bind/" verwendet werden.
Deshalb verlegen wir die Dateien in das erlaubte Verzeichnis und ändern natürlich auch die Pfade in der Datei "/etc/bind/named.conf.local" entsprechend...
vorher:
zone "30.10.in-addr.arpa" { type slave; file "/etc/bind/domain.rev.db"; masters { 10.30.1.1;}; };
nachher:
zone "30.10.in-addr.arpa" { type slave; file "/var/lib/bind/domain.rev.db"; masters { 10.30.1.1;}; };
hier müssen die DNS-Master als //allow-notify// konfiguriert werden:
# vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
forwarders {
10.30.1.1;
};
allow-notify { 10.30.1.81; 10.30.1.82; };
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
Jetzt muss der NameD nur noch neu gestartet werden.
Und dann sollten die Dateien auch dort erscheinen:
# ls -l /var/lib/bind/
=== DHCP ===
Damit der "neue" zweite DNS auch per DHCP mit verteilt wird, ist noch eine kleine Änderung nötig:
# vi /etc/dhcpd.conf
...
option domain-name-servers 10.30.1.1, 10.30.1.2;
...
Und jetzt noch den DHCPD neu starten und alles wird gut... ;-)
===== SystemD (ab Ubuntu 18.04) =====
wenn in dieser Datei der lokale Rechner als DNS-Server drin steht:
> vi /etc/resolv.conf
nameserver 127.0.0.53
> vi /etc/systemd/resolved.conf
DNS=10.20.30.11 10.20.30.12 10.20.30.13
Domains=domain.net domain.de domain.com
...dann übernimmt SystemD die Aufgabe, so kann man den "echten" NameServer sehen (''DNS Servers:''):
> systemd-resolve --status
Ubuntu 22.04:
> /bin/networkctl status
● State: routable
Online state: online
Address: 10.10.10.2 on ens3
fe81::f817:3efa:fedc:6728 on ens3
Gateway: 10.10.10.1 on ens3
DNS: 10.10.10.100
Search Domains: domain.net
===== Cloudflare =====
IPv4:
DNS: 1.1.1.1
IPv6:
> dig @1.1.1.1 one.one.one.one aaaa
...
;; ANSWER SECTION:
one.one.one.one. 82 IN AAAA 2606:4700:4700::1001
one.one.one.one. 82 IN AAAA 2606:4700:4700::1111
...
also:
DNS: 2606:4700:4700::1001
DNS: 2606:4700:4700::1111