Inhaltsverzeichnis
DNS ISC bind CentOS 7
DNS ISC bind ist ein DNS-Server, welcher die Namensauflösung in einem Netzwerk realisieren kann. Der DNS-Server des ISC (Internet System Consortium) ist einer der meist eingesetzten Namensserver weltweit und ebenfalls der bei den weltweiten Root-Nameservern verwendete DNS-Server.
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Überblick
Im nachfolgenden soll die Konfiguration eines primary DNS-Servers welcher als interner agierender DNS-Server für ein privates Netzwerk mit drei Zonen durchgeführt werden. Nachfolgende Zonen werden dabei verwaltet:
- IDMZ - Domain: idmz.tachtler.net - IP-Adressbereich: 192.168.0.0/24
- EDMZ - Domain: edmz.tachtler.net - IP-Adressbereich: 192.168.1.0/24
- Intranet - Domain: intra.tachtler.net - IP-Adressbereich: 192.168.2.0/24
Des weiteren sollen views
zum Einsatz kommen, die ja nach anfragendem client bzw. dessen IP-Adresse das ein oder andere, je nach view
Ergebnis zurück liefern. D.h. je nach IP-Adresse des client, kann die Antwort auf eine DNS-Anfrage unterschiedlich ausfallen!
view
- Intranetview
- IDMZview
- EDMZview
- Rest
HINWEIS - IPv6 soll NICHT genutzt werden!!!
Installation
Zur Installation eines DNS-Servers wird nachfolgendes Paket benötigt:
installiert werden.
Um DNS-Abfragen optimiert gegen den DNS-Server durchführen zu können, kann das Paket
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete bind
installiert:
# yum install bind Loaded plugins: changelog, priorities 39 packages excluded due to repository priority protections Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 32:9.9.4-14.el7 will be installed --> Finished Dependency Resolution Changes in packages about to be updated: Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: bind x86_64 32:9.9.4-14.el7 base 1.8 M Transaction Summary ================================================================================ Install 1 Package Total download size: 1.8 M Installed size: 4.3 M Is this ok [y/d/N]: y Downloading packages: bind-9.9.4-14.el7.x86_64.rpm | 1.8 MB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 32:bind-9.9.4-14.el7.x86_64 1/1 Verifying : 32:bind-9.9.4-14.el7.x86_64 1/1 Installed: bind.x86_64 32:9.9.4-14.el7 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket bind
installiert wurden:
# rpm -qil bind Name : bind Epoch : 32 Version : 9.9.4 Release : 14.el7 Architecture: x86_64 Install Date: Thu 16 Oct 2014 04:02:08 PM CEST Group : System Environment/Daemons Size : 4488923 License : ISC Signature : RSA/SHA256, Fri 04 Jul 2014 02:47:46 AM CEST, Key ID 24c6a8a7f4a80eb5 Source RPM : bind-9.9.4-14.el7.src.rpm Build Date : Tue 10 Jun 2014 10:14:10 AM CEST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://www.isc.org/products/BIND/ Summary : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS (Domain Name System) protocols. BIND includes a DNS server (named), which resolves host names to IP addresses; a resolver library (routines for applications to use when interfacing with DNS); and tools for verifying that the DNS server is operating properly. /etc/NetworkManager/dispatcher.d/13-named /etc/logrotate.d/named /etc/named /etc/named.conf /etc/named.iscdlv.key /etc/named.rfc1912.zones /etc/named.root.key /etc/rndc.conf /etc/rndc.key /etc/rwtab.d/named /etc/sysconfig/named /etc/tmpfiles.d/named.conf /run/named /usr/lib/systemd/system/named-setup-rndc.service /usr/lib/systemd/system/named.service /usr/lib64/bind /usr/libexec/generate-rndc-key.sh /usr/sbin/arpaname /usr/sbin/ddns-confgen /usr/sbin/dnssec-checkds /usr/sbin/dnssec-coverage /usr/sbin/dnssec-dsfromkey /usr/sbin/dnssec-keyfromlabel /usr/sbin/dnssec-keygen /usr/sbin/dnssec-revoke /usr/sbin/dnssec-settime /usr/sbin/dnssec-signzone /usr/sbin/dnssec-verify /usr/sbin/genrandom /usr/sbin/isc-hmac-fixup /usr/sbin/lwresd /usr/sbin/named /usr/sbin/named-checkconf /usr/sbin/named-checkzone /usr/sbin/named-compilezone /usr/sbin/named-journalprint /usr/sbin/nsec3hash /usr/sbin/rndc /usr/sbin/rndc-confgen /usr/share/doc/bind-9.9.4 /usr/share/doc/bind-9.9.4/Bv9ARM.ch01.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch02.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch03.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch04.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch05.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch06.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch07.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch08.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch09.html /usr/share/doc/bind-9.9.4/Bv9ARM.ch10.html /usr/share/doc/bind-9.9.4/Bv9ARM.html /usr/share/doc/bind-9.9.4/Bv9ARM.pdf /usr/share/doc/bind-9.9.4/CHANGES /usr/share/doc/bind-9.9.4/README /usr/share/doc/bind-9.9.4/isc-logo.pdf /usr/share/doc/bind-9.9.4/man.arpaname.html /usr/share/doc/bind-9.9.4/man.ddns-confgen.html /usr/share/doc/bind-9.9.4/man.dig.html /usr/share/doc/bind-9.9.4/man.dnssec-checkds.html /usr/share/doc/bind-9.9.4/man.dnssec-coverage.html /usr/share/doc/bind-9.9.4/man.dnssec-dsfromkey.html /usr/share/doc/bind-9.9.4/man.dnssec-keyfromlabel.html /usr/share/doc/bind-9.9.4/man.dnssec-keygen.html /usr/share/doc/bind-9.9.4/man.dnssec-revoke.html /usr/share/doc/bind-9.9.4/man.dnssec-settime.html /usr/share/doc/bind-9.9.4/man.dnssec-signzone.html /usr/share/doc/bind-9.9.4/man.dnssec-verify.html /usr/share/doc/bind-9.9.4/man.genrandom.html /usr/share/doc/bind-9.9.4/man.host.html /usr/share/doc/bind-9.9.4/man.isc-hmac-fixup.html /usr/share/doc/bind-9.9.4/man.named-checkconf.html /usr/share/doc/bind-9.9.4/man.named-checkzone.html /usr/share/doc/bind-9.9.4/man.named-journalprint.html /usr/share/doc/bind-9.9.4/man.named.html /usr/share/doc/bind-9.9.4/man.nsec3hash.html /usr/share/doc/bind-9.9.4/man.nsupdate.html /usr/share/doc/bind-9.9.4/man.rndc-confgen.html /usr/share/doc/bind-9.9.4/man.rndc.conf.html /usr/share/doc/bind-9.9.4/man.rndc.html /usr/share/doc/bind-9.9.4/named.conf.default /usr/share/doc/bind-9.9.4/sample /usr/share/doc/bind-9.9.4/sample/etc /usr/share/doc/bind-9.9.4/sample/etc/named.conf /usr/share/doc/bind-9.9.4/sample/etc/named.rfc1912.zones /usr/share/doc/bind-9.9.4/sample/var /usr/share/doc/bind-9.9.4/sample/var/named /usr/share/doc/bind-9.9.4/sample/var/named/data /usr/share/doc/bind-9.9.4/sample/var/named/my.external.zone.db /usr/share/doc/bind-9.9.4/sample/var/named/my.internal.zone.db /usr/share/doc/bind-9.9.4/sample/var/named/named.ca /usr/share/doc/bind-9.9.4/sample/var/named/named.empty /usr/share/doc/bind-9.9.4/sample/var/named/named.localhost /usr/share/doc/bind-9.9.4/sample/var/named/named.loopback /usr/share/doc/bind-9.9.4/sample/var/named/slaves /usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.ddns.internal.zone.db /usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.slave.internal.zone.db /usr/share/man/man1/arpaname.1.gz /usr/share/man/man5/named.conf.5.gz /usr/share/man/man5/rndc.conf.5.gz /usr/share/man/man8/ddns-confgen.8.gz /usr/share/man/man8/dnssec-checkds.8.gz /usr/share/man/man8/dnssec-coverage.8.gz /usr/share/man/man8/dnssec-dsfromkey.8.gz /usr/share/man/man8/dnssec-keyfromlabel.8.gz /usr/share/man/man8/dnssec-keygen.8.gz /usr/share/man/man8/dnssec-revoke.8.gz /usr/share/man/man8/dnssec-settime.8.gz /usr/share/man/man8/dnssec-signzone.8.gz /usr/share/man/man8/dnssec-verify.8.gz /usr/share/man/man8/genrandom.8.gz /usr/share/man/man8/isc-hmac-fixup.8.gz /usr/share/man/man8/lwresd.8.gz /usr/share/man/man8/named-checkconf.8.gz /usr/share/man/man8/named-checkzone.8.gz /usr/share/man/man8/named-compilezone.8.gz /usr/share/man/man8/named-journalprint.8.gz /usr/share/man/man8/named.8.gz /usr/share/man/man8/nsec3hash.8.gz /usr/share/man/man8/rndc-confgen.8.gz /usr/share/man/man8/rndc.8.gz /var/log/named.log /var/named /var/named/data /var/named/dynamic /var/named/named.ca /var/named/named.empty /var/named/named.localhost /var/named/named.loopback /var/named/slaves
Mit nachfolgendem Befehl, wird das Pakete bind-utils
installiert:
Loaded plugins: changelog, priorities 39 packages excluded due to repository priority protections Resolving Dependencies --> Running transaction check ---> Package bind-utils.x86_64 32:9.9.4-14.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: bind-utils x86_64 32:9.9.4-14.el7 base 198 k Transaction Summary ================================================================================ Install 1 Package Total download size: 198 k Installed size: 434 k Is this ok [y/d/N]: y bind-utils-9.9.4-14.el7.x86_64.rpm | 198 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 32:bind-utils-9.9.4-14.el7.x86_64 1/1 Verifying : 32:bind-utils-9.9.4-14.el7.x86_64 1/1 Installed: bind-utils.x86_64 32:9.9.4-14.el7 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket bind-utils
installiert wurden:
# rpm -qil bind-utils Name : bind-utils Epoch : 32 Version : 9.9.4 Release : 14.el7 Architecture: x86_64 Install Date: Mon 13 Oct 2014 06:51:35 AM CEST Group : Applications/System Size : 444749 License : ISC Signature : RSA/SHA256, Fri 04 Jul 2014 02:48:21 AM CEST, Key ID 24c6a8a7f4a80eb5 Source RPM : bind-9.9.4-14.el7.src.rpm Build Date : Tue 10 Jun 2014 10:14:10 AM CEST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://www.isc.org/products/BIND/ Summary : Utilities for querying DNS name servers Description : Bind-utils contains a collection of utilities for querying DNS (Domain Name System) name servers to find out information about Internet hosts. These tools will provide you with the IP addresses for given host names, as well as other information about registered domains and network addresses. You should install bind-utils if you need to get information from DNS name servers. /etc/trusted-key.key /usr/bin/dig /usr/bin/host /usr/bin/nslookup /usr/bin/nsupdate /usr/share/man/man1/dig.1.gz /usr/share/man/man1/host.1.gz /usr/share/man/man1/nslookup.1.gz /usr/share/man/man1/nsupdate.1.gz
Dienst/Deamon-Start einrichten
Um einen DNS-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable named.service ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'
Eine Überprüfung, ob beim Neustart des Server der named
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e ^named.service named.service enabled
bzw.
# systemctl is-enabled named.service enabled
IPv6 deaktivieren
Der Einsatz von IPv6 soll nicht durchgeführt werden. Deshalb müssen nachfolgende Konfigurationsdateien wie folgt angepasst werden:
/etc/sysconfig/named
/etc/named.conf
Folgende Ergänzung in der Konfigurationsdatei /etc/sysconfig/named
muss durchgeführt werden, um den named
-Dienst/Daemon ohne die Nutzung von IPv6 zu starten (komplette Konfigurationsdatei):
# BIND named process options # ~~~~~~~~~~~~~~~~~~~~~~~~~~ # # OPTIONS="whatever" -- These additional options will be passed to named # at startup. Don't add -t here, enable proper # -chroot.service unit file. # Tachtler OPTIONS="-4"
Effektiv werden am Ende der Konfigurationsdatei nachfolgende Zeilen angefügt:
# Tachtler OPTIONS="-4"
Folgende Änderung in der Konfigurationsdatei /etc/named.conf
muss durchgeführt werden, um den named
-Dienst/Daemon ohne die Nutzung von IPv6 zu starten (komplette Konfigurationsdatei):
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; }; // Tachtler // default: listen-on-v6 port 53 { ::1; }; // listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { localhost; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
Effektiv werden in der Konfigurationsdatei nachfolgende Zeilen geändert, sprich das „lauschen“ auf Port 53 via IPv6 wird auskommentiert:
// Tachtler // default: listen-on-v6 port 53 { ::1; }; // listen-on-v6 port 53 { ::1; };
Um die Unterstützung von IPv6 in CentOS zu deaktivieren, kann die Beschreibung unter nachfolgendem Link genutzt werden:
iptables Regel
Damit der DNS-Server auch erreichbar ist und nicht die Weitergabe der Namensauflösungsinformationen vom Paketfilter iptables
blockiert wird, muss nachfolgende Regel zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
und hier die Befehle:
# iptables -I INPUT 5 -p tcp --dport 53 -j ACCEPT # iptables -I INPUT 5 -p udp --dport 53 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 7 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 6 packets, 936 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 5 und Postition 6 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/iptables-save > /etc/sysconfig/iptables
Erster Start
Falls alle voranstehenden Schritte wie beschrieben durchgeführt wurden, Installation, IPv6 deaktivieren, sollte dem ersten Start nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:
# systemctl start named.service
DNS-Server Überprüfung
Ob der DNS-Server, sprich der named
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwf | grep named root 4998 0.0 0.0 112640 928 pts/0 S+ 18:15 0:00 \_ grep --color=auto named named 4993 0.8 1.3 160288 13452 ? Ssl 18:15 0:00 /usr/sbin/named -u named -4
Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht der LOG-Dateien
/var/named/data/named.run
/var/log/messages
durchgeführt werden.
Ausgabe der LOG-Datei /var/named/data/named.run
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
# cat /var/named/data/named.run managed-keys-zone: loaded serial 0 zone 0.in-addr.arpa/IN: loaded serial 0 zone localhost.localdomain/IN: loaded serial 0 zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 zone localhost/IN: loaded serial 0 all zones loaded running
Ausgabe der LOG-Datei /var/log/messages
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
Oct 16 18:15:50 server20 systemd: Starting Generate rndc key for BIND (DNS)... Oct 16 18:15:50 server20 generate-rndc-key.sh: Generating /etc/rndc.key:[ OK ] Oct 16 18:15:50 server20 systemd: Started Generate rndc key for BIND (DNS). Oct 16 18:15:50 server20 systemd: Starting Berkeley Internet Name Domain (DNS)... Oct 16 18:15:50 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0 Oct 16 18:15:50 server20 named-checkconf: zone localhost/IN: loaded serial 0 Oct 16 18:15:50 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 Oct 16 18:15:50 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 Oct 16 18:15:50 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0 Oct 16 18:15:50 server20 systemd: Started Berkeley Internet Name Domain (DNS). Oct 16 18:15:50 server20 systemd: Starting Host and Network Name Lookups. Oct 16 18:15:50 server20 systemd: Reached target Host and Network Name Lookups.
Lokale DNS-Abfrage
Ob der DNS-Server auch auf DNS-Anfragen auf dem lokalen loopback
Interface lauscht bzw. diese Beantwortet, kann mit nachfolgendem Befehl Überprüft werden:
# dig @127.0.0.1 tachtler.net ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 tachtler.net ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1539 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;tachtler.net. IN A ;; ANSWER SECTION: tachtler.net. 3600 IN A 88.217.171.167 ;; AUTHORITY SECTION: tachtler.net. 172799 IN NS server1-ns3.udagdns.net. tachtler.net. 172799 IN NS server1-ns2.udagdns.net. tachtler.net. 172799 IN NS server1-ns1.udagdns.net. ;; ADDITIONAL SECTION: server1-ns1.udagdns.net. 172799 IN A 62.146.28.82 server1-ns2.udagdns.net. 172799 IN A 62.146.33.101 server1-ns3.udagdns.net. 172799 IN A 62.146.33.102 ;; Query time: 1938 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Oct 16 18:27:20 CEST 2014 ;; MSG SIZE rcvd: 191
Interface Überprüfung
Ob und an welchen Interface der DNS-Server „lauscht“, bzw. DNS-Anfragen beantwortet, kann mit nachfolgendem Befehl überprüft werden:
# netstat -tulpen | grep named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 25 44432 4993/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 25 44429 4993/named udp 0 0 127.0.0.1:53 0.0.0.0:* 25 44428 4993/named
Basis-Konfiguration
Zur Steuerung des DNS-Server kommt das Programm
rndc
zum Einsatz.
rndc
benötigt eine Konfigurationsdatei, seitdem jegliche Kommunikation mit dem DNS-Server nur noch über die Authentifizierung über eine digitale Signatur erfolgt, die wiederum auf einem geteilten Schlüssel beruht. Es gibt keine andere Möglichkeit als diesen Schlüssel in einer Konfigurationsdatei zu hinterlegen und damit zur Verwendung zu bringen.
rndc-confgen
Mit dem Befehl
rndc-confgen
und der Anwendung einiger zusätzlicher Parametern, können die Dateien
/etc/rndc.conf
und der Syntax zur Einbindung in die Konfigurationsdatei
/etc/named.conf
erstellt werden.
Der Aufruf erfolgt wie nachfolgen dargestellt:
# rndc-confgen -b 512 -k rndc-key -r "keyboard" -u named
und erzeugt nachfolgende Bildschirmausgabe:
start typing: ............................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... stop typing. # Start of rndc.conf key "rndc-key" { algorithm hmac-md5; secret "SBgojrgNCHrQcPC7IT92RVcATCHPwtrXioToz2pT0/GKHSHguORYSJddLfINuy+ELgCtoZgn9adEBuTB4M0pxw=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; }; # End of rndc.conf # Use with the following in named.conf, adjusting the allow list as needed: # key "rndc-key" { # algorithm hmac-md5; # secret "SBgojrgNCHrQcPC7IT92RVcATCHPwtrXioToz2pT0/GKHSHguORYSJddLfINuy+ELgCtoZgn9adEBuTB4M0pxw=="; # }; # # controls { # inet 127.0.0.1 port 953 # allow { 127.0.0.1; } keys { "rndc-key"; }; # }; # End of named.conf
ACHTUNG - Diese Ausgabe sollte so NICHT verwendet werden, da hier der Schlüssel rndc-key
doppelt in den Dateien /etc/rndc.conf
und /etc/named.conf
eingebettet werden muss. Besser ist es hier, den Schlüssel in eine eigene Datei /etc/myrndc.key
auszulagern und via include
diese Datei dann jeweils zu importieren!
HINWEIS - Ein optimiertes Vorgehen, soll nachfolgend dargestellt werden!
/etc/rndc.key
nach der Installation des DNS-Servers ist eine Datei mit einem Schlüssel unter
/etc/rndc.key
vorhanden.
HINWEIS - Der Name für die Datei die den Schlüssel enthält darf nicht /etc/rndc.key
lauten, da sonst beim Einsatz von /etc/rndc.conf
und dem Vorhandensein der Datei /etc/rndc.key
ein Warnhinweis, wie nachfolgend gezeigt, erscheint !
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
Deshalb sollte die Datei mit einem Schlüssel unter /etc/rndc.key
mit nachfolgendem Befehl gelöscht werden:
# rm /etc/rndc.key rm: remove regular file ‘/etc/rndc.key’? y
Um die Sicherheit zu erhöhen, sollte ein eigener Schlüssel, welcher in der Datei /etc/rndc.key
beinhaltet ist, erstellt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# rndc-confgen -a -b 512 -c /etc/rndc.key -k rndc-key -r "keyboard" -u named start typing: ............................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... stop typing. wrote key file "/etc/rndc.key"
Anschließend kann mit nachfolgendem Befehl überprüft werden, ob die Generierung einer neuen Datei mit dem Namen /etc/rndc.key
erfolgreich war:
# cat /etc/rndc.key key "ns1.tachtler.net-key" { algorithm hmac-md5; secret "NvVzfoFWdyDHvca87zRuMu+x49VzfyaKDiDHvca87zkRe8YoEhzfoFWdyDHvca87zkRu9v5DQpEzfoFWdyDHvc=="; };
Abschließend sollten die Besitzrecht noch einmal verschärft werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# chown root:named /etc/rndc.key
Ein Überprüfung, ob die Besitzrechte korrekt gesetzt wurden, kann mit nachfolgendem Befehl durchgeführt werden:
# ll /etc/rndc.key -rw-r----- 1 root named 153 Oct 17 13:06 /etc/rndc.key
/etc/rndc.conf
Die Konfigurationsdatei für rndc
ist unter nachfolgendem Verzeichnis mit nachfolgendem Namen zu erstellen:
/etc/rndc.conf
Der Inhalt der Datei sollte, wie nachfolgend darstellt, aussehen:
include "/etc/rndc.key"; options { default-key "ns1.tachtler.net-key"; default-server 127.0.0.1; default-port 953; };
/var/named/named.ca
nach der Installation des DNS-Servers ist eine Datei mit den 13 ROOT nameservern unter
/var/named/named.ca
vorhanden.
Um die Aktualität zu erhöhen, sollte mit nachfolgendem Befehl die Datei aktualisiert werden:
# dig +bufsize=1200 +norec NS . @a.root-servers.net > /var/named/named.ca
Anschließend kann mit nachfolgendem Befehl überprüft werden, ob die Aktualisierung der Datei mit dem Namen /var/named/named.ca
erfolgreich war:
# cat /var/named/named.ca ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> +bufsize=1200 +norec NS . @a.root-servers.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14893 ;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 25 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 518400 IN NS j.root-servers.net. . 518400 IN NS a.root-servers.net. . 518400 IN NS k.root-servers.net. . 518400 IN NS m.root-servers.net. . 518400 IN NS c.root-servers.net. . 518400 IN NS e.root-servers.net. . 518400 IN NS b.root-servers.net. . 518400 IN NS h.root-servers.net. . 518400 IN NS i.root-servers.net. . 518400 IN NS l.root-servers.net. . 518400 IN NS f.root-servers.net. . 518400 IN NS g.root-servers.net. . 518400 IN NS d.root-servers.net. ;; ADDITIONAL SECTION: j.root-servers.net. 3600000 IN A 192.58.128.30 j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30 a.root-servers.net. 3600000 IN A 198.41.0.4 a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30 k.root-servers.net. 3600000 IN A 193.0.14.129 k.root-servers.net. 3600000 IN AAAA 2001:7fd::1 m.root-servers.net. 3600000 IN A 202.12.27.33 m.root-servers.net. 3600000 IN AAAA 2001:dc3::35 c.root-servers.net. 3600000 IN A 192.33.4.12 c.root-servers.net. 3600000 IN AAAA 2001:500:2::c e.root-servers.net. 3600000 IN A 192.203.230.10 b.root-servers.net. 3600000 IN A 192.228.79.201 b.root-servers.net. 3600000 IN AAAA 2001:500:84::b h.root-servers.net. 3600000 IN A 128.63.2.53 h.root-servers.net. 3600000 IN AAAA 2001:500:1::803f:235 i.root-servers.net. 3600000 IN A 192.36.148.17 i.root-servers.net. 3600000 IN AAAA 2001:7fe::53 l.root-servers.net. 3600000 IN A 199.7.83.42 l.root-servers.net. 3600000 IN AAAA 2001:500:3::42 f.root-servers.net. 3600000 IN A 192.5.5.241 f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f g.root-servers.net. 3600000 IN A 192.112.36.4 d.root-servers.net. 3600000 IN A 199.7.91.13 d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d ;; Query time: 37 msec ;; SERVER: 198.41.0.4#53(198.41.0.4) ;; WHEN: Fri Oct 17 13:14:08 CEST 2014 ;; MSG SIZE rcvd: 755
Zonen-Dateien
Um den DNS-Server betreiben zu können, ist es erforderlich auch die entsprechenden Zonen-Dateien zu erstellen und dem DNS-Server bekannt zu machen.
Dabei ist eine Zonen-Datei für die z.B. für die Zone
- intra.tachtler.net
zu erstellen, welche jedoch aus zwei Zonen-Dateien bestehen sollte,
- Zonen-Datei für die Forward-Auflösung -
/var/named/master/intra.tachtler.net.zone.db
- Zonen-Datei für die Reverse-Auflösung -
/var/named/master/2.168.192.zone.db
HINWEIS - Nachfolgendes Beispiel soll dies für nur eine Zonen-Datei exemplarisch zeigen.
Natürlich können diese Dateien im Verzeichnis
/var/named
erstellt werden, jedoch kann auch der Übersicht halber eine Unterordner mit nachfolgendem Pfad und Namen, mit nachfolgendem Befehl angelegt werden:
# mdkir /var/named/master
Nachfolgend sollten nun auch noch die Besitzrechte und die Dateirechte entsprechend angepasst werden, was mit nachfolgenden Befehlen durchgeführt werden kann:
Besitzrechte:
# chown -R named:named /var/named/master
Dateirechte:
# chmod -R 770 /var/named/master
Anschließend können nun die Zonen-Dateien im Verzeichnis /var/named/master
erstellt werden.
/var/named/master/intra.tachtler.net.zone.db
Nachfolgend ein Beispiel, wie eine Zonen-Datei für die Forward-Auflösung aussehen könnte:
$TTL 3H @ IN SOA ns1 hostmaster.tachtler.net. ( 2014101901 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns1.intra.tachtler.net. MX 10 mx1.tachtler.net. ns1 A 192.168.2.20 rechner10 A 192.168.2.10 rechner20 A 192.168.2.20
Um die syntaktische Korrektheit einer Zonen-Datei zu überprüfen, kann nachfolgender Befehl verwendet werden:
# /usr/sbin/named-checkzone intra.tachtler.net /var/named/master/intra.tachtler.net.zone.db zone home.tachtler.net/IN: loaded serial 2014101901 OK
/var/named/master/2.168.192.zone.db
Nachfolgend ein Beispiel, wie eine Zonen-Datei für die Reverse-Auflösung aussehen könnte:
$TTL 3H @ IN SOA ns1.intra.tachtler.net. hostmaster.tachtler.net. ( 2014101901 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns1.intra.tachtler.net. MX 10 mx1.tachtler.net. 10 PTR rechner10.intra.tachtler.net. 20 PTR rechner20.intra.tachtler.net.
Um die syntaktische Korrektheit einer Zonen-Datei zu überprüfen, kann nachfolgender Befehl verwendet werden:
# /usr/sbin/named-checkzone 2.168.192 /var/named/master/2.168.192.zone.db zone home.tachtler.net/IN: loaded serial 2014101901 OK
/etc/named.conf
Die jeweiligen Kommentare erklären die nachfolgend durchgeführten Einstellung (komplette Konfigurationsdatei):
// // named.conf // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // ================================================================================ // ACL. // ================================================================================ acl primary { 192.168.0.20/32; }; // Without unbound as resolver in front of bind acl interfaces { 192.168.0.20/32; 192.168.1.20/32; }; // With unbound as resolver in front of bind //acl interfaces { // 192.168.1.20/32; //}; acl pdmz { 88.217.171.167/32; }; acl edmz { 192.168.1.0/24; }; acl idmz { 192.168.0.0/24; }; acl home { 192.168.2.0/24; }; // ================================================================================ // Keys. // ================================================================================ include "/etc/rndc.key"; // ================================================================================ // Controls. // ================================================================================ controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "ns1.tachtler.net-key"; }; }; // ================================================================================ // Logging. // ================================================================================ logging { // Channels. ------------------------------------------------------------- // Default startup messages. channel default_debug { file "data/named.run"; severity dynamic; print-category yes; print-severity yes; print-time yes; }; // Approval and denial of requests. channel custom_security { file "data/named.security"; severity info; print-category yes; print-severity yes; print-time yes; }; // Lame servers. These are misconfigurations in remote servers, discovered // by BIND 9 when trying to query those servers during resolution. channel custom_lame-servers { file "data/named.lame-servers"; severity info; print-category yes; print-severity yes; print-time yes; }; // Categories. ----------------------------------------------------------- category security { custom_security; default_syslog; default_debug; }; category lame-servers { custom_lame-servers ; default_syslog; default_debug; }; }; // ================================================================================ // Options. // ================================================================================ options { // The working directory of the server. directory "/var/named"; // The directory where the public and private DNSSEC key files should be // found. key-directory "/var/named"; // The directory which to store the files that track managed DNSSEC keys. managed-keys-directory "/var/named/dynamic"; // The pathname of the file the server dumps the database to when // instructed. dump-file "/var/named/data/cache_dump.db"; // The pathname of the file the server writes memory usage statistics to // on exit. memstatistics-file "/var/named/data/named_mem_stats.txt"; // The pathname of the file the server writes its process ID in. pid-file "/run/named/named.pid"; // The pathname of the file the server dumps the queries that are currently // recursing when instructed. recursing-file "/var/named/data/named_recursing.db"; // The pathname of the file the server dumps security roots to when // instructed to do so with rndc secroots statistics-file "/var/named/data/named_stats.txt"; // The pathname of a file to override the built-in trusted keys provided // by named. Path to ISC DLV key. bindkeys-file "/etc/named.root.key"; // The pathname of the file the server dumps security roots to when // instructed. secroots-file "/var/named/data/named_secroots.db"; // The pathname of the file into which to write a TSIG session key // generated by named for use by nsupdate -l. session-keyfile "/run/named/session.key"; // ------------------------------------------------------------------------ // Boolean options. // ------------------------------------------------------------------------ // If yes, then when generating responses the server will only add records // to the authority and additional data sections when they are required. // Tachtler - default: minimal-responses no; minimal-responses no; // If yes, and a DNS query requests recursion, then the server will attempt // to do all the work required to answer the query. If recursion is off and // the server does not already know the answer, it will return a referral // response. The default is yes. Note that setting recursion no does not // prevent clients from getting data from the server’s cache; it only // prevents new data from being cached as an effect of client queries. /* - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface . */ // IMPORTANT: Use of access control: allow-recursion is required! recursion yes; // DNSSEC. --------------------------------------------------------------- // Enable DNSSEC support in named. dnssec-enable yes; // Enable DNSSEC validation in named and compare to root-certs (auto). // yes: DNSSEC validation is enabled, but a trust anchor must be manually // configured. No validation will actually take place until you have // manually configured at least one trusted key. This is the default. // no: DNSSEC validation is disabled, and recursive server will behave // in the "old fashioned" way of performing insecure DNS lookups. // auto: DNSSEC validation is enabled, and a default trust anchor // (included as part of BIND) for the DNS root zone is used. // Tachtler - DISABLED - // dnssec-validation auto; dnssec-validation yes; // When set, dnssec-lookaside provides the validator with an alternate // method to validate DNSKEY records at the top of a zone. // If dnssec-lookaside is set to auto, then built-in default values for the // DLV domain and trust anchor will be used, along with a built-in key for // validation. // Tachtler - DEPRECATED - Service was shutdown. //dnssec-lookaside auto; // Checks. --------------------------------------------------------------- // This option is used to restrict the character set and syntax of certain // domain names in master files and/or DNS responses received from the // network. // Tachtler - Warn only, if names not correct, like DKIM for e-mail. check-names master warn; // ------------------------------------------------------------------------ // Forwarding. // ------------------------------------------------------------------------ /* Tachtler - DISABLED - * * With problems, while censorship with ISP, no forwards will be defined. * Asking always the root-server! * * // Route the questions to the Forwarders first, not only. * forward first; * // DNS-Server which will asked when local answers not found. * forwarders { 212.18.3.5; 212.18.0.5; }; */ // ------------------------------------------------------------------------ // Dual-stack servers. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // Access control. // ------------------------------------------------------------------------ // Specifies which hosts are allowed to notify this server, a slave, of // zone changes in addition to the zone masters. allow-notify { 127.0.0.1; }; // Specifies which hosts are allowed to ask ordinary DNS questions. allow-query { 127.0.0.1; tdmz; edmz; idmz; home; }; // Specifies which hosts are allowed to make recursive queries through this // server. allow-recursion { 127.0.0.1; tdmz; edmz; idmz; home; }; // Specifies which hosts are allowed to receive zone transfers from the // server. allow-transfer { 127.0.0.1; primary; }; // Specifies a list of addresses that the server will not accept queries // from or use to resolve a query. Queries from these addresses will not // be responded to. blackhole { none; }; // ------------------------------------------------------------------------ // Interfaces. // ------------------------------------------------------------------------ // The interfaces and ports that the server will answer queries from may // be specified using the listen-on option. listen-on port 53 { 127.0.0.1; interfaces; }; // ------------------------------------------------------------------------ // Query address. // ------------------------------------------------------------------------ // If the server doesn’t know the answer to a question, it will query other // name servers. query-source specifies the address and port used for such // queries. /* * If there is a firewall between you and nameservers you want * to talk to, you might need to use the query-source directive. */ query-source address * port *; // ------------------------------------------------------------------------ // Zone transfer. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // UDP port lists. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // OS resource limits. // ------------------------------------------------------------------------ // The maximum size of a core dump. coresize default; // The maximum amount of data memory the server may use. datasize default; // The maximum number of files the server may have open concurrently. files unlimited; // The maximum amount of stack memory the server may use. stacksize default; // ------------------------------------------------------------------------ // Server resource limits. // ------------------------------------------------------------------------ // Sets a maximum size for each journal file. // The default is unlimited, which also means 2 gigabytes. max-journal-size unlimited; // he maximum number of simultaneous recursive lookups the server will // perform on behalf of clients. The default is 1000. recursive-clients 1000; // The maximum number of simultaneous client TCP connections that the // server will accept. The default is 100. tcp-clients 100; // The maximum amount of memory to use for the server’s cache, in bytes. // A value of 0 is special, meaning that records are purged from the cache // only when their TTLs expire. Another special keyword unlimited means // the maximum value of 32-bit unsigned integers (0xffffffff), which may // not have the same effect as 0 on machines that support more than 32 bits // of memory space. Any positive values less than 2MB will be ignored reset // to 2MB. In a server with multiple views, the limit applies separately to // the cache of each view. The default is 0. max-cache-size 0; // The listen queue depth. The default and minimum is 10. If the kernel // supports the accept filter connections that will be queued in kernel // space waiting for some data before being passed to accept. Nonzero // values less than 10 will be silently raised. A value of 0 may also be // used; on most platforms this sets the listen queue length to a // system-defined default value. tcp-listen-queue 10; // ------------------------------------------------------------------------ // Periodic task intervals. // ------------------------------------------------------------------------ // The server will scan the network interface list every interface-interval // minutes. The default is 60 minutes. The maximum value is 28 days // (40320 minutes). If set to 0, interface scanning will only occur when // the configuration file is loaded. After the scan, the server will begin // listening for queries on any newly discovered interfaces (provided they // are allowed by the listen-on configuration), and will stop listening on // interfaces that have gone away. // Tachtler - NOT default - interface-interval 0; // ------------------------------------------------------------------------ // Topology. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // The sortlist statement. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // RRset ordering. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // Tuning. // ------------------------------------------------------------------------ // Sets the number of seconds to cache a lame server indication. 0 disables // caching. (This is NOT recommended.) The default is 600 (10 minutes) and // the maximum value is 1800 (30 minutes). lame-ttl 600; // To reduce network traffic and increase performance, the server stores // negative answers. max-ncache-ttl is used to set a maximum retention time // for these answers in the server in seconds. The default max-ncache-ttl // is 10800 seconds (3 hours). max-ncache-ttl cannot exceed 7 days and will // be silently truncated to 7 days if set to a greater value. max-ncache-ttl 10800; // Sets the maximum time for which the server will cache ordinary // (positive) answers. The default is one week (7 days). A value of zero // may cause all queries to return SERVFAIL, because of lost caches of // intermediate RRsets (such as NS and glue AAAA/A records) in the // resolution process. max-cache-ttl 604800; // Sets the advertised EDNS UDP buffer size in bytes to control the size of // packets received. Valid values are 512 to 4096 (values outside this // range will be silently adjusted). The default value is 4096. The usual // reason for setting edns-udp-size to a non-default value is to get UDP // answers to pass through broken firewalls that block fragmented packets // and/or block UDP packets that are greater than 512 bytes. // named will fallback to using 512 bytes if it get a series of timeout at // the initial value. 512 bytes is not being offered to encourage sites to // fix their firewalls. Small EDNS UDP sizes will result in the excessive // use of TCP. edns-udp-size 4096; // Sets the maximum EDNS UDP message size named will send in bytes. Valid // values are 512 to 4096 (values outside this range will be silently // adjusted). The default value is 4096. The usual reason for setting // max-udp-size to a non-default value is to get UDP answers to pass // through broken firewalls that block fragmented packets and/or block UDP // packets that are greater than 512 bytes. This is independent of the // advertised receive buffer (edns-udp-size). // Setting this to a low value will encourage additional TCP traffic to // the nameserver. max-udp-size 4096; // Set the initial value (minimum) number of recursive simultaneous // clients for any given query (<qname,qtype,qclass>) that the server will // accept before dropping additional clients. named will attempt to self // tune this value and changes will be logged. The default values are 10. clients-per-query 10; // Set the initial value (maximum) number of recursive simultaneous // clients for any given query (<qname,qtype,qclass>) that the server will // accept before dropping additional clients. named will attempt to self // tune this value and changes will be logged. The default values are 100. max-clients-per-query 100; // ------------------------------------------------------------------------ // Build-in server information zones. // ------------------------------------------------------------------------ // The version the server should report via a query of the name // version.bind with type TXT, class CHAOS. The default is the real version // number of this server. Specifying version none disables processing of // the queries. version none; // The hostname the server should report via a query of the name // hostname.bind with type TXT, class CHAOS. This defaults to the hostname // of the machine hosting the name server as found by the gethostname() // function. // Tachtler - NOT default - // hostname "ns1.tachtler.net"; // The ID the server should report when receiving a Name Server Identifier // (NSID) query, or a query of the name ID.SERVER with type TXT, class // CHAOS. The primary purpose of such queries is to identify which of a // group of anycast servers is actually answering your queries. Specifying // server-id none; disables processing of the queries. Specifying server-id // hostname; will cause named to use the hostname as found by the // gethostname() function. The default server-id is none. server-id none; // ------------------------------------------------------------------------ // Build-in empty zones. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // Additional section caching. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // Content filtering. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // Response policy zone (RPZ) rewriting. // ------------------------------------------------------------------------ // - empty - // ------------------------------------------------------------------------ // Response rate limiting. // ------------------------------------------------------------------------ // - empty - }; // ================================================================================ // Views and Zones. // ================================================================================ // // IMPORTANT: The order of the view statements is significant. A client request // will be resolved in the context of the first view that it matches! // view "home" IN { // Match for the client IP address. match-clients { home; }; // IMPORTANT: A zone can be updated either by editing zone files and // reloading the server or by dynamic update, but not both. If you have // enabled dynamic update for a zone using the "allow-update" option, you // are not supposed to edit the zone file by hand, and the server will not // attempt to reload it. // Zone: root server. ----------------------------------------------------- zone "." IN { type hint; file "named.ca"; }; // Zone: localhost. ------------------------------------------------------- include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; // Zone: home.tachtler.net ------------------------------------------------ zone "home.tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_home/home.tachtler.net.view_home.zone.db"; // nsupdate allow-update { key "home.tachtler.net"; }; }; zone "2.168.192.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_home/0.168.192.in-addr.arpa.view_home.zone.db"; // nsupdate allow-update { key "0.168.192.in-addr.arpa"; }; }; // Zone: idmz.tachtler.net ------------------------------------------------ zone "idmz.tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_home/idmz.tachtler.net.view_home.zone.db"; // nsupdate allow-update { key "idmz.tachtler.net"; }; }; zone "0.168.192.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_home/0.7.10.in-addr.arpa.view_home.zone.db"; // nsupdate allow-update { key "0.7.10.in-addr.arpa"; }; }; // Zone: tachtler.net (HOME) ---------------------------------------------- zone "tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_home/tachtler.net.idmz.view_home.zone.db"; // nsupdate allow-update { key "tachtler.net.idmz"; }; }; }; view "idmz" IN { // Match for the client IP address. match-clients { localhost; idmz; key "tachtler.net.idmz"; !key "tachtler.net"; !key "tachtler.net.edmz"; }; // IMPORTANT: A zone can be updated either by editing zone files and // reloading the server or by dynamic update, but not both. If you have // enabled dynamic update for a zone using the "allow-update" option, you // are not supposed to edit the zone file by hand, and the server will not // attempt to reload it. // Zone: root server. ----------------------------------------------------- zone "." IN { type hint; file "named.ca"; }; // Zone: localhost. ------------------------------------------------------- include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; // Zone: home.tachtler.net ------------------------------------------------ zone "home.tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_idmz/home.tachtler.net.view_idmz.zone.db"; // nsupdate allow-update { key "home.tachtler.net"; }; }; zone "2.168.192.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_idmz/0.168.192.in-addr.arpa.view_idmz.zone.db"; // nsupdate allow-update { key "0.168.192.in-addr.arpa"; }; }; // Zone: idmz.tachtler.net ------------------------------------------------ zone "idmz.tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_idmz/idmz.tachtler.net.view_idmz.zone.db"; // nsupdate allow-update { key "idmz.tachtler.net"; }; }; zone "0.168.192.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_idmz/0.7.10.in-addr.arpa.view_idmz.zone.db"; // nsupdate allow-update { key "0.7.10.in-addr.arpa"; }; }; // Zone: edmz.tachtler.net ------------------------------------------------ zone "edmz.tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_idmz/edmz.tachtler.net.view_idmz.zone.db"; // nsupdate allow-update { key "edmz.tachtler.net"; }; }; zone "1.168.192.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_idmz/1.7.10.in-addr.arpa.view_idmz.zone.db"; // nsupdate allow-update { key "1.7.10.in-addr.arpa"; }; }; // Zone: tachtler.net (IDMZ) ---------------------------------------------- zone "tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_idmz/tachtler.net.idmz.view_idmz.zone.db"; // nsupdate allow-update { key "tachtler.net.idmz"; }; }; }; view "edmz" IN { // Match for the client IP address. match-clients { edmz; key "tachtler.net.edmz"; !key "tachtler.net"; !key "tachtler.net.idmz"; }; // IMPORTANT: A zone can be updated either by editing zone files and // reloading the server or by dynamic update, but not both. If you have // enabled dynamic update for a zone using the "allow-update" option, you // are not supposed to edit the zone file by hand, and the server will not // attempt to reload it. // Zone: root server. ----------------------------------------------------- zone "." IN { type hint; file "named.ca"; }; // Zone: localhost. ------------------------------------------------------- include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; // Zone: edmz.tachtler.net ------------------------------------------------ zone "edmz.tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_edmz/edmz.tachtler.net.view_edmz.zone.db"; // nsupdate allow-update { key "edmz.tachtler.net"; }; }; zone "1.168.192.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_edmz/1.7.10.in-addr.arpa.view_edmz.zone.db"; // nsupdate allow-update { key "1.7.10.in-addr.arpa"; }; }; // Zone: tachtler.net (EDMZ) ---------------------------------------------- zone "tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_edmz/tachtler.net.edmz.view_edmz.zone.db"; // nsupdate allow-update { key "tachtler.net.edmz"; }; }; }; view "pdmz" IN { // Match for the client IP address. match-clients { any; key "tachtler.net"; !key "tachtler.net.idmz"; !key "tachtler.net.edmz";}; // If recursion is off and the server does not already know the answer, // it will return a referral response. recursion no; // Specifies which hosts are allowed to make recursive queries through this // server. allow-recursion { none; }; // IMPORTANT: A zone can be updated either by editing zone files and // reloading the server or by dynamic update, but not both. If you have // enabled dynamic update for a zone using the "allow-update" option, you // are not supposed to edit the zone file by hand, and the server will not // attempt to reload it. // Zone: root server. ----------------------------------------------------- zone "." IN { type hint; file "named.ca"; }; // Zone: localhost. ------------------------------------------------------- include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; // Zone: tachtler.net (PDMZ) ---------------------------------------------- zone "tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_pdmz/tachtler.net.view_pdmz.zone.db"; // nsupdate allow-update { key "tachtler.net"; }; }; zone "171.217.88.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/view_pdmz/171.217.88.in-addr.arpa.view_pdmz.zone.db"; // nsupdate allow-update { key "171.217.88.in-addr.arpa"; }; }; }; // ================================================================================ // Includes. // ================================================================================
Erster Neustart
Zonen-Datei Überprüfung
Mit nachfolgendem Befehl kann die syntaktische Richtigkeit von Zonen-Dateien überprüft werden. Nachfolgende Beispiel zeigen eine Überprüfung der Zonen-Dateien für die Zone:
intra.tachtler.net
und zwar für die Zonen-Dateien:
- Zonen-Datei für die Forward-Auflösung -
/var/named/master/intra.tachtler.net.zone.db
- Zonen-Datei für die Reverse-Auflösung -
/var/named/master/2.168.192.zone.db
# /usr/sbin/named-checkzone intra.tachtler.net /var/named/master/intra.tachtler.net.zone.db zone home.tachtler.net/IN: loaded serial 2014101901 OK
# /usr/sbin/named-checkzone 2.168.192 /var/named/master/2.168.192.zone.db zone 0.168.192/IN: loaded serial 2014101901 OK
Konfigurationsdatei Überprüfung
Mit nachfolgendem Befehl kann die syntaktische Richtigkeit der Konfigurationsdatei:
/etc/named.conf
durchgeführt werden und sollte keine Meldungen ausgeben, wenn die Konfigurationsdatei syntaktische richtig ist:
# /usr/sbin/named-checkconf
Neustart
Falls die Basis-Konfiguration wie oben beschrieben durchgeführt wurde, sollte dem ersten Neustart nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:
# systemctl restart named.service
DNS-Server Überprüfung
Ob der DNS-Server, sprich der named
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwf | grep named root 9811 0.0 0.0 112640 932 pts/0 S+ 21:20 0:00 \_ grep --color=auto named named 9806 10.0 3.4 174588 34616 ? Ssl 21:20 0:00 /usr/sbin/name -u named -4
Eine weitere Überprüfung, ob der erste Neustart erfolgreich war, kann durch Einsicht der LOG-Dateien
/var/named/data/named.lame-servers
/var/named/data/named.run
/var/named/data/named.security
/var/log/messages
durchgeführt werden.
Ausgabe der LOG-Datei /var/named/data/named.run
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
# cat /var/named/data/named.run 19-Oct-2014 21:20:49.866 general: info: managed-keys-zone/home: loaded serial 71 19-Oct-2014 21:20:49.867 general: info: managed-keys-zone/idmz: loaded serial 71 19-Oct-2014 21:20:49.867 general: info: managed-keys-zone/edmz: loaded serial 71 19-Oct-2014 21:20:49.868 general: info: managed-keys-zone/pdmz: loaded serial 71 19-Oct-2014 21:20:49.873 general: info: zone 0.in-addr.arpa/IN/home: loaded serial 0 19-Oct-2014 21:20:49.876 general: info: zone 1.0.0.127.in-addr.arpa/IN/home: loaded serial 0 19-Oct-2014 21:20:49.879 general: info: zone localhost.localdomain/IN/home: loaded serial 0 19-Oct-2014 21:20:49.880 general: info: zone tachtler.net/IN/home: loaded serial 4 19-Oct-2014 21:20:49.880 general: info: zone 0.168.192.in-addr.arpa/IN/idmz: loaded serial 4 19-Oct-2014 21:20:49.881 general: info: zone home.tachtler.net/IN/home: loaded serial 4 19-Oct-2014 21:20:49.882 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/home: loaded serial 0 19-Oct-2014 21:20:49.886 general: info: zone 2.168.192.in-addr.arpa/IN/home: loaded serial 4 19-Oct-2014 21:20:49.886 general: info: zone 1.168.192.in-addr.arpa/IN/idmz: loaded serial 4 19-Oct-2014 21:20:49.888 general: info: zone 0.in-addr.arpa/IN/idmz: loaded serial 0 19-Oct-2014 21:20:49.888 general: info: zone localhost/IN/home: loaded serial 0 19-Oct-2014 21:20:49.890 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/idmz: loaded serial 0 19-Oct-2014 21:20:49.891 general: info: zone idmz.tachtler.net/IN/idmz: loaded serial 5 19-Oct-2014 21:20:49.892 general: info: zone 1.0.0.127.in-addr.arpa/IN/idmz: loaded serial 0 19-Oct-2014 21:20:49.893 general: info: zone localhost.localdomain/IN/idmz: loaded serial 0 19-Oct-2014 21:20:49.893 general: info: zone edmz.tachtler.net/IN/idmz: loaded serial 5 19-Oct-2014 21:20:49.895 general: info: zone 0.in-addr.arpa/IN/edmz: loaded serial 0 19-Oct-2014 21:20:49.896 general: info: zone 1.0.0.127.in-addr.arpa/IN/edmz: loaded serial 0 19-Oct-2014 21:20:49.901 general: info: zone home.tachtler.net/IN/idmz: loaded serial 4 19-Oct-2014 21:20:49.902 general: info: zone 2.168.192.in-addr.arpa/IN/idmz: loaded serial 4 19-Oct-2014 21:20:49.903 general: info: zone tachtler.net/IN/idmz: loaded serial 4 19-Oct-2014 21:20:49.905 general: info: zone 1.168.192.in-addr.arpa/IN/edmz: loaded serial 4 19-Oct-2014 21:20:49.906 general: info: zone localhost/IN/idmz: loaded serial 0 19-Oct-2014 21:20:49.908 general: info: zone tachtler.net/IN/edmz: loaded serial 4 19-Oct-2014 21:20:49.909 general: info: zone 1.0.0.127.in-addr.arpa/IN/pdmz: loaded serial 0 19-Oct-2014 21:20:49.910 general: info: zone localhost/IN/edmz: loaded serial 0 19-Oct-2014 21:20:49.915 general: info: zone tachtler.net/IN/pdmz: loaded serial 4 19-Oct-2014 21:20:49.916 general: info: zone edmz.tachtler.net/IN/edmz: loaded serial 5 19-Oct-2014 21:20:49.916 general: info: zone 0.in-addr.arpa/IN/pdmz: loaded serial 0 19-Oct-2014 21:20:49.917 general: info: zone localhost.localdomain/IN/pdmz: loaded serial 0 19-Oct-2014 21:20:49.917 general: info: zone localhost/IN/pdmz: loaded serial 0 19-Oct-2014 21:20:49.917 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/pdmz: loaded serial 0 19-Oct-2014 21:20:49.918 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/edmz: loaded serial 0 19-Oct-2014 21:20:49.918 general: info: zone localhost.localdomain/IN/edmz: loaded serial 0 19-Oct-2014 21:20:49.918 general: info: zone 171.217.88.in-addr.arpa/IN/pdmz: loaded serial 4 19-Oct-2014 21:20:49.918 general: notice: all zones loaded 19-Oct-2014 21:20:49.919 general: notice: running
Ausgabe der LOG-Datei /var/log/messages
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
Oct 19 21:20:49 server20 systemd: Starting Generate rndc key for BIND (DNS)... Oct 19 21:20:49 server20 systemd: Started Generate rndc key for BIND (DNS). Oct 19 21:20:49 server20 systemd: Starting Berkeley Internet Name Domain (DNS)... Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone home.tachtler.net/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone 2.168.192.in-addr.arpa/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone home.tachtler.net/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone 2.168.192.in-addr.arpa/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone idmz.tachtler.net/IN: loaded serial 5 Oct 19 21:20:49 server20 named-checkconf: zone 0.168.192.in-addr.arpa/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone edmz.tachtler.net/IN: loaded serial 5 Oct 19 21:20:49 server20 named-checkconf: zone 1.168.192.in-addr.arpa/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone edmz.tachtler.net/IN: loaded serial 5 Oct 19 21:20:49 server20 named-checkconf: zone 1.168.192.in-addr.arpa/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0 Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4 Oct 19 21:20:49 server20 named-checkconf: zone 171.217.88.in-addr.arpa/IN: loaded serial 4 Oct 19 21:20:49 server20 systemd: Started Berkeley Internet Name Domain (DNS).
Lokale DNS-Abfrage
Ob der DNS-Server auch auf DNS-Anfragen auf dem lokalen loopback
Interface lauscht bzw. diese Beantwortet, kann mit nachfolgendem Befehl Überprüft werden:
# dig @127.0.0.1 tachtler.net ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 tachtler.net ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40640 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;tachtler.net. IN A ;; ANSWER SECTION: tachtler.net. 10800 IN A 88.217.171.167 ;; AUTHORITY SECTION: tachtler.net. 10800 IN NS ns1.idmz.tachtler.net. ;; ADDITIONAL SECTION: ns1.idmz.tachtler.net. 10800 IN A 192.168.0.20 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Oct 19 21:27:32 CEST 2014 ;; MSG SIZE rcvd: 96
Interface Überprüfung
Ob und an welchen Interface der DNS-Server „lauscht“, bzw. DNS-Anfragen beantwortet, kann mit nachfolgendem Befehl überprüft werden:
# netstat -tulpen | grep named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 25 83532 9806/named tcp 0 0 192.168.1.20:53 0.0.0.0:* LISTEN 25 83529 9806/named tcp 0 0 192.168.0.20:53 0.0.0.0:* LISTEN 25 83527 9806/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 25 83525 9806/named udp 0 0 192.168.1.20:53 0.0.0.0:* 25 83528 9806/named udp 0 0 192.168.0.20:53 0.0.0.0:* 25 83526 9806/named udp 0 0 127.0.0.1:53 0.0.0.0:* 25 83524 9806/named
Chroot
Um den DNS-Server in eine sogenannte chroot
-Umgebung zu bringen, ist eine Möglichkeit, die Installation des rpm
-Pakets
bind-chroot
durchzuführen.
Installation
Mit nachfolgender Befehl, kann das Paket bind-chroot
installiert werden:
# yum install bind-chroot Loaded plugins: changelog base | 3.6 kB 00:00 extras | 3.4 kB 00:00 updates | 3.4 kB 00:00 Resolving Dependencies --> Running transaction check ---> Package bind-chroot.x86_64 32:9.9.4-14.el7 will be installed --> Finished Dependency Resolution Changes in packages about to be updated: Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: bind-chroot x86_64 32:9.9.4-14.el7 base 81 k Transaction Summary ================================================================================ Install 1 Package Total download size: 81 k Installed size: 3.1 k Is this ok [y/d/N]: y Downloading packages: bind-chroot-9.9.4-14.el7.x86_64.rpm | 81 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 32:bind-chroot-9.9.4-14.el7.x86_64 1/1 Verifying : 32:bind-chroot-9.9.4-14.el7.x86_64 1/1 Installed: bind-chroot.x86_64 32:9.9.4-14.el7 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket bind-chroot
installiert wurden.
# rpm -qil bind-chroot Name : bind-chroot Epoch : 32 Version : 9.9.4 Release : 14.el7 Architecture: x86_64 Install Date: Sun 19 Oct 2014 09:51:53 PM CEST Group : System Environment/Daemons Size : 3198 License : ISC Signature : RSA/SHA256, Fri 04 Jul 2014 02:47:49 AM CEST, Key ID 24c6a8a7f4a80eb5 Source RPM : bind-9.9.4-14.el7.src.rpm Build Date : Tue 10 Jun 2014 10:14:10 AM CEST Build Host : worker1.bsys.centos.org Relocations : /var/named/chroot Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://www.isc.org/products/BIND/ Summary : A chroot runtime environment for the ISC BIND DNS server, named(8) Description : This package contains a tree of files which can be used as a chroot(2) jail for the named(8) program from the BIND package. Based on the code from Jan "Yenya" Kasprzak <kas@fi.muni.cz> /usr/lib/systemd/system/named-chroot-setup.service /usr/lib/systemd/system/named-chroot.service /usr/libexec/setup-named-chroot.sh /var/named/chroot /var/named/chroot/dev /var/named/chroot/dev/null /var/named/chroot/dev/random /var/named/chroot/dev/zero /var/named/chroot/etc /var/named/chroot/etc/localtime /var/named/chroot/etc/named /var/named/chroot/etc/named.conf /var/named/chroot/etc/pki /var/named/chroot/etc/pki/dnssec-keys /var/named/chroot/run /var/named/chroot/run/named /var/named/chroot/usr /var/named/chroot/usr/lib64 /var/named/chroot/usr/lib64/bind /var/named/chroot/var /var/named/chroot/var/log /var/named/chroot/var/named /var/named/chroot/var/run /var/named/chroot/var/tmp
Vorbereitung: rsyslog
Die einzige Konfiguration, welche von Hand nachträglich durchgeführt werden muss, die zum Betrieb einer chroot
-Umgebung nötig ist, ist die Konfiguration des SYSLOG-Dienstes/Deamons
rsyslog
Alle Anpassungen in der nachfolgenden Konfigurationsdatei sind durch nachfolgende Zeichenkette gekennzeichnet:
# Tachtler
Die nachfolgende Konfigurationsdatei
/etc/rsyslog.conf
muss wie nachfolgend dargestellt, erweitert werden (nur relevanter Ausschnitt):
... #### GLOBAL DIRECTIVES #### # Where to place auxiliary files $WorkDirectory /var/lib/rsyslog # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf # Turn off message reception via local log socket; # local messages are retrieved through imjournal now. $OmitLocalLogging on # File to store the position in the journal $IMJournalStateFile imjournal.state # Tachtler - new - $AddUnixListenSocket /var/named/chroot/dev/log #### RULES #### ...
WICHTIG - Um die voranstehenden Änderungen wirksam werden zu lassen, ist ein Neustart des SYSLOG-Dienstes/Daemons - rsyslog
notwendig!!!
Ein Neustart des SYSLOG-Dienstes/Daemons kann durch nachfolgenden Befehl ausgeführt werden:
# systemctl restart rsyslog.service
Vorbereitung: mount
Das Geheimnis, wie unter CentOS in der Version 7.x eine chroot
-Umgebung realisiert wurde, liegt in der Art und Weise, wie bestehende Konfigurationen unter z.B. /var/named
oder auch die z.B. Konfigurationsdateien /etc/named.conf
in der chroot
-Umgebung verfügbar gemacht werden.
HINWEIS - Es wird beim Starten des named
-Dienstes/Daemons das „mounten“ der Mount-Points durchgeführt!
HINWEIS - Beim Stoppen des named
-Dienstes/Daemons, werden die Mount-Points wieder „unmounted“!
Es wird mit dem Befehl mount
und der Befehls-Option –bind
das „mounten“ in die chroot
-Umgebung realisiert. Nachfolgende Konfigurationsdatei beschreibt, wie und vor allem welche mount
-Points beim starten gesetzt und beim stoppen nicht mehr gesetzt werden sollen:
/usr/libexec/setup-named-chroot.sh
(Nur relevanter Ausschnitt)
#!/bin/bash ROOTDIR_MOUNT='/etc/named /etc/pki/dnssec-keys /etc/named.root.key /etc/named.conf /etc/named.dnssec.keys /etc/named.rfc1912.zones /etc/rndc.conf /etc/rndc.key /usr/lib64/bind /usr/lib/bind /etc/named.iscdlv.key /run/named /var/named' ...
WICHTIG - Beim Einsatz eines eigenen Schlüssels anstelle von /etc/rndc.key
ist ein symbolischer Link, wie nachfolgend dargestellt, zu erzeugen!
Nachfolgende Anpassungen sollten nun durchgeführt werden:
(Nur relevanter Ausschnitt)
# ln -sf /etc/myrndc.key /etc/rndc.key
HINWEIS - Es wurde ein symbolischer Link /etc/rndc.key
auf /etc/myrndc.key
erzeugt!
Konfiguration
Nachfolgend soll kurz erläutert werden, welche Konfigurationen mir der Installation des Paketes bind-chroot
manuell durchgeführt werden müssen.
Dienst/Deamon-Start einrichten
Um einen DNS-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers in einer chroot
-Umgebung zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable named-chroot.service ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service'
Eine Überprüfung, ob beim Neustart des Server der named-chroot
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e ^named-chroot.service named-chroot.service enabled
bzw.
# systemctl is-enabled named-chroot.service enabled
Dienst/Deamon-Stopp einrichten
Um einen DNS-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, nach einem Neustart des Servers nur ohne die chroot
-Umgebung nicht mehr zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server nicht mehr mit gestartet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl disable named.service rm '/etc/systemd/system/multi-user.target.wants/named.service'
Eine Überprüfung, ob beim Neustart des Server der named
-Dienst/Deamon wirklich nicht mehr mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e ^named.service named.service disabled
bzw.
# systemctl is-enabled named.service disabled
Stop: named.service
Zuerst sollte nun der DNS-Sever, welcher nur ohne die chroot
-Umgebung gestartet ist und auch werden kann, mit nachfolgendem Befehl beendet werden:
# systemctl stop named.service
Start: named-chroot.service
Falls die Konfigurationen rsyslog
und mount
wie oben beschrieben durchgeführt wurden, sollte dem Start nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:
# systemctl start named-chroot.service
DNS-Server Überprüfung
Ob der DNS-Server, sprich der named-chroot
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwf | grep named root 10403 0.0 0.0 112640 932 pts/0 S+ 22:57 0:00 \_ grep --color=auto named named 10308 0.0 2.9 170032 30424 ? Ssl 22:48 0:00 /usr/sbin/named -u named -t /var/named/chroot -4
WICHTIG - In der zweiten Zeile muss -t /var/named/chroot
vorkommen, damit chroot
aktiv ist!
Mount-Point Überprüfung
Mit nachfolgendem Befehl kann überprüft werden, ob alle benötigten Mount-Points für den DNS-Server in der chroot
-Umgebung richtig gesetzt wurden:
# mount | grep named /dev/mapper/server20-root on /var/named/chroot/etc/named type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/server20-root on /var/named/chroot/etc/named.root.key type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/server20-root on /var/named/chroot/etc/named.conf type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/server20-root on /var/named/chroot/etc/named.rfc1912.zones type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/server20-root on /var/named/chroot/etc/rndc.conf type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/server20-root on /var/named/chroot/etc/myrndc.key type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/server20-root on /var/named/chroot/usr/lib64/bind type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/server20-root on /var/named/chroot/etc/named.iscdlv.key type xfs (rw,relatime,attr2,inode64,noquota) tmpfs on /var/named/chroot/run/named type tmpfs (rw,nosuid,nodev,mode=755) /dev/mapper/server20-root on /var/named/chroot/var/named type xfs (rw,relatime,attr2,inode64,noquota)
Auch sollten nachfolgende Abfragen der nun „gemounteten“ Verzeichnisse und Dateien, Ausgaben wie die nachfolgenden zum Vorschein bringen:
# ls -l /var/named/chroot/ total 4 drwxr-x--- 2 root named 51 Oct 19 22:48 dev drwxr-x--- 4 root named 4096 Oct 19 22:50 etc drwxr-x--- 3 root named 18 Oct 19 21:51 run drwxrwx--- 3 named named 18 Oct 19 21:51 usr drwxr-x--- 5 root named 48 Oct 19 21:51 var
# ls -l /var/named/chroot/etc/ total 48 -rw-r--r-- 1 root root 2309 Oct 19 21:51 localtime drwxr-x--- 2 root named 6 Jun 10 10:13 named -rw-r----- 1 root named 23129 Oct 19 21:12 named.conf -rw-r--r-- 1 root named 2389 Jun 10 10:13 named.iscdlv.key -rw-r----- 1 root named 931 Jun 21 2007 named.rfc1912.zones -rw-r--r-- 1 root named 487 Jul 19 2010 named.root.key -rw-r----- 1 root named 153 Oct 17 13:06 myrndc.key drwxr-x--- 3 root named 24 Oct 19 21:51 pki -rw-r--r-- 1 root root 140 Oct 17 16:07 rndc.conf
# ls -l /var/named/chroot/var/named/ total 28 drwxr-x--- 7 root named 56 Oct 19 21:51 chroot drwxrwx--- 2 named named 68 Oct 19 22:48 data drwxrwx--- 2 named named 4096 Oct 19 22:35 dynamic drwxrwx--- 2 named named 4096 Oct 19 20:55 master -rw-r----- 1 root named 2162 Oct 17 13:14 named.ca -rw-r----- 1 root named 2076 Jan 28 2013 named.ca.orig -rw-r----- 1 root named 152 Dec 15 2009 named.empty -rw-r----- 1 root named 152 Jun 21 2007 named.localhost -rw-r----- 1 root named 168 Dec 15 2009 named.loopback drwxrwx--- 2 named named 6 Jun 10 10:13 slaves
DNSsec
DNSSEC gibt es bereits 1997 mit einer ersten Definition der Domain Name System Security Extensions (DNSsec) im RFC 4034. Diese Fassung funktionierte jedoch nur in kleinen Netzen; bei großen überforderte das geschwätzige Protokoll die Domain Name Server. Nach verschiedenen Überarbeitungen liegt seit März 2005 die aktuelle Version vor, bekannt auch unter der Bezeichnung DNSsec-bis.
Mit DNSsec signiert der Administrator einer Domain die Namenseinträge in seinem Nameserver kryptografisch.
Dafür werden zusätzliche Ressource Records angelegt, sodass DNSsec-Antworten länger sind als herkömmliche DNS-Antworten. Die zusätzlichen DNS-Records werden bei Anfragen als Bestandteile des DNS-Response versendet, sodass Empfänger zunächst prüfen können, ob der Response integer, also unverfälscht ist. Weil der Response auch ein Zertifikat enthält (einen signierten kryptografischen Schlüssel), kann der Empfänger in einem zweiten Schritt auch den Absender verifizieren und so feststellen, ob die im Paket enthaltene Information vertrauenswürdig ist.
Dazu kommen zwei verschiedene Typen von Schlüsseln zum Einsatz,
- ein langen Key Signing Key von langer Lebensdauer (KSK)
- ein kurzen Zone Signing Key von kurzer Lebensdauer (ZSK, zum Signieren der DNS-Records)
jeweils als privat und öffentlich Schlüssel erstellt.
Mithin hat eine Domain mindestens vier Schlüssel. Um den gleitenden Wechsel von einem abgelaufenen zu einem neuen Schlüssel zu gewährleisten, hat eine Domain in der Regel sogar mehrere Exemplare gleichzeitig, auch mehrere KSK (können sinnvoll sein, um unterschiedliche Signieralgorithmen nutzen zu können)
Wenn der Domain-Betreiber seinen aktuellen KSK dem Administrator der übergeordneten Domain bekannt gegeben hat, kann er mit diesem anschließend alle Schlüssel der eigenen Zone signieren und nutzen.
Alle anderen Daten der Zone werden mit dem aktuellen ZSK signiert. Neue ZSK kann man nach Gutdünken erzeugen und ohne Meldung gegenüber der Registry nutzen. Die übergeordnete Domain erkennt selbstständig, dass sie gültig sind, wenn man sie mit dem aktuellen KSK signiert hat, weil ihr dieser ja gemeldet worden ist. Ist ein Nameserver auf DNSsec umgestellt, liefert er ausschließlich signierte Antworten.
(Quelle: Heise.de - Artikel - Domain Name System absichern mit DNSsec
Vorbereitung
Zuerst ist es erforderlich nachfolgendes Verzeichnis anzulegen, welches den KSK (Key Signing Key) und den ZSK (Zone Signing Key) aufnehmen wird, was mit nachfolgendem Befehl durchgeführt werden kann:
# mkdir /etc/pki/dnssec-keys
KSK (Key Signing Key)
Nachfolgende Befehle erstellen einen KSK (Key Signing Key) für die FORWARD - Zone - tachtler.net
:
# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -f KSK -n ZONE tachtler.net Generating key pair.......................................................................+++ .............................................................+++ Ktachtler.net.+010+41592
und die REVERSE - Zone - 171.217.88.in-addr.arpa
:
# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -f KSK -n ZONE 171.217.88.in-addr.arpa Generating key pair..................................+++ .......................+++ K171.217.88.in-addr.arpa.+010+05364
HINWEIS - Dies muss für alle Zonen durchgeführt werden, welche mit DNSsec abgesichert werden sollen!
HINWEIS - Je nachdem wie viel Entropie auf dem System vorhanden sind, kann die Erzeugung der Schlüsselpaare durchaus mehrere Stunden beanspruchen!
HINWEIS - Um mehr „Entropien“ zur Beschleunigung der Generierung von Schlüsseln zur Verfügung zu haben, kann die Erzeugung der Zufallszahlen durch das Starten von Systemaktivitäten positiv beeinflusst werden. Nachfolgender Befehl, in einer zweiten shell
auf dem selben Rechner aufgerufen, kopiert dazu den Inhalt einer Festplatte, hier /dev/sda
nach /dev/null
(Null Device).
# dd if=/dev/sda of=/dev/null 20480000+0 records in 20480000+0 records out 10485760000 bytes (10 GB) copied, 53.8159 s, 195 MB/s
Abschließend ist es noch erforderlich, das der DNS-Server die privaten Schlüssel lesen kann, was durch Zuweisung der Besitzrechte an den privaten Schlüsseln erfolgen kann, da grundsätzlich die privaten Schlüssel nur durch den Besitzer der Datei gelesen werden können, was mit nachfolgendem Befehl realisiert werden kann:
# chown named:named /etc/pki/dnssec-keys/*.private
ZSK (Zone Signing Key)
Nachfolgende Befehle erstellen einen ZSK (Zone Signing Key) für die FORWARD - Zone - tachtler.net
:
# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -n ZONE tachtler.net Generating key pair............................................................+++ ...................+++ Ktachtler.net.+010+33395
und die REVERSE - Zone - 171.217.88.in-addr.arpa
:
# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -n ZONE 171.217.88.in-addr.arpa Generating key pair...........+++ ............+++ K171.217.88.in-addr.arpa.+010+01877
HINWEIS - Dies muss für alle Zonen durchgeführt werden, welche mit DNSsec abgesichert werden sollen!
HINWEIS - Je nachdem wie viel Entropie auf dem System vorhanden sind, kann die Erzeugung der Schlüsselpaare durchaus mehrere Stunden beanspruchen!
HINWEIS - Um mehr „Entropien“ zur Beschleunigung der Generierung von Schlüsseln zur Verfügung zu haben, kann die Erzeugung der Zufallszahlen durch das Starten von Systemaktivitäten positiv beeinflusst werden. Nachfolgender Befehl, in einer zweiten shell
auf dem selben Rechner aufgerufen, kopiert dazu den Inhalt einer Festplatte, hier /dev/sda
nach /dev/null
(Null Device).
# dd if=/dev/sda of=/dev/null 20480000+0 records in 20480000+0 records out 10485760000 bytes (10 GB) copied, 53.8159 s, 195 MB/s
Abschließend können dem DNS-Server die Besitzrechte an den öffentlichen Schlüsseln zugewiesen werden, was mit nachfolgendem Befehl realisiert werden kann:
# chown named:named /etc/pki/dnssec-keys/*.key
Überprüfung: Schlüssel
Mit nachfolgendem Befehl kann überprüft werden, ob die Schlüssel alle erstellt worden sind und die Ausgabe des nachfolgenden Befehls sollte in etwa wie folgt aussehen:
# ls -l /etc/pki/dnssec-keys total 32 -rw-r--r-- 1 named named 630 Nov 2 07:57 K171.217.88.in-addr.arpa.+010+01877.key -rw------- 1 named named 1777 Nov 2 07:57 K171.217.88.in-addr.arpa.+010+01877.private -rw-r--r-- 1 named named 629 Nov 2 07:31 K171.217.88.in-addr.arpa.+010+05364.key -rw------- 1 named named 1777 Nov 2 07:31 K171.217.88.in-addr.arpa.+010+05364.private -rw-r--r-- 1 named named 609 Nov 2 07:52 Ktachtler.net.+010+33395.key -rw------- 1 named named 1777 Nov 2 07:52 Ktachtler.net.+010+33395.private -rw-r--r-- 1 named named 608 Nov 2 07:24 Ktachtler.net.+010+41592.key -rw------- 1 named named 1777 Nov 2 07:24 Ktachtler.net.+010+41592.private
Eine einfache Art um herauszufinden, welcher Schlüssel nun welcher ist
- KSK (Key signing key)
- ZSK (Zone signing key)
können nachfolgende Befehle genutzt werden, welche auf Dateiebene agieren:
KSK:
# grep key-signing /etc/pki/dnssec-keys/* /etc/pki/dnssec-keys/K171.217.88.in-addr.arpa.+010+05364.key:; This is a key-signing key, keyid 5364, for 171.217.88.in-addr.arpa. /etc/pki/dnssec-keys/Ktachtler.net.+010+41592.key:; This is a key-signing key, keyid 41592, for tachtler.net.
und
ZSK:
# grep zone-signing /etc/pki/dnssec-keys/* /etc/pki/dnssec-keys/K171.217.88.in-addr.arpa.+010+01877.key:; This is a zone-signing key, keyid 1877, for 171.217.88.in-addr.arpa. /etc/pki/dnssec-keys/Ktachtler.net.+010+33395.key:; This is a zone-signing key, keyid 33395, for tachtler.net.
Konfiguration
Es gibt die Möglichkeit den DNS-Server ISC (Internet System Consortium) so zu konfigurieren, das dieser die DNSsec Verwaltung voll automatisch übernimmt.
Dafür gibt es die Option
auto-dnssec
welche zwei mögliche Einstellungen haben kann:
allow
maintain
Bei der Einstellung allow
wird der DNS-Server ISC (Internet System Consortium) das angegeben Schlüssel-Verzeichnis durchsuchen um die passenden Schlüssel zu finden und diese zur Zone hinzufügen um diese dann anschließend auch zu signieren. Dies geschieht allerdings nur, wenn der Befehl rndc sign <Zonemname>
manuell abgesetzt wird.
Bei der Einstellung maintain
wird der DNS-Server ISC (Internet System Consortium) alle Funktionalitäten wie bei der Einstellung allow
durchführen, jedoch ohne das manuelle Anstoßen des entsprechenden Befehls, sondern vollkommen automatisiert die Schlüsselverwaltung selbst durchführen.
/etc/named.conf
Nachfolgende Anpassungen der Konfigurationsdatei /etc/named.conf
müssen durchgeführt werden um DNSsec voll automatisiert durch den DNS-Server ISC (Internet System Consortium) einzurichten.
(Nur relevanter Ausschnitt)
... // DNSSEC. --------------------------------------------------------------- // Enable DNSSEC support in named. dnssec-enable yes; // Enable DNSSEC validation in named and compare to root-certs (auto). // yes: DNSSEC validation is enabled, but a trust anchor must be manually // configured. No validation will actually take place until you have // manually configured at least one trusted key. This is the default. // no: DNSSEC validation is disabled, and recursive server will behave // in the "old fashioned" way of performing insecure DNS lookups. // auto: DNSSEC validation is enabled, and a default trust anchor // (included as part of BIND) for the DNS root zone is used. dnssec-validation auto; // When set, dnssec-lookaside provides the validator with an alternate // method to validate DNSKEY records at the top of a zone. // If dnssec-lookaside is set to auto, then built-in default values for the // DLV domain and trust anchor will be used, along with a built-in key for // validation. // Tachtler - DEPRECATED - Service was shutdown. //dnssec-lookaside auto; ...
Im Bereich der Zonen-Konfiguration, bei der jeweiligen Zonen-Definition:
(Nur relevanter Ausschnitt)
... view "pdmz" IN { // Match for the client IP address. match-clients { any; }; // If recursion is off and the server does not already know the answer, // it will return a referral response. recursion no; // Specifies which hosts are allowed to make recursive queries through this // server. allow-recursion { none; }; // IMPORTANT: A zone can be updated either by editing zone files and // reloading the server or by dynamic update, but not both. If you have // enabled dynamic update for a zone using the "allow-update" option, you // are not supposed to edit the zone file by hand, and the server will not // attempt to reload it. // Zone: root server. ----------------------------------------------------- zone "." IN { type hint; file "named.ca"; }; // Zone: localhost. ------------------------------------------------------- include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; // Zone: tachtler.net (PDMZ) ---------------------------------------------- zone "tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/tachtler.net.zone.db"; }; zone "171.217.88.in-addr.arpa" in { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/171.217.88.in-addr.arpa.zone.db"; }; }; ...
Nachfolgende drei Konfigurationszeilen müssen bei der jeweiligen Zonen-Definition hinzugefügt werden:
... inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; ...
HINWEIS - Der DNS-Server ISC (Internet System Consortium) wird nach den entsprechenden Schlüsseln unter dem angegeben Pfad selbständig suchen!
Konfigurationsdatei Überprüfung
Mit nachfolgendem Befehl kann die syntaktische Richtigkeit der Konfigurationsdatei:
/etc/named.conf
durchgeführt werden und sollte keine Meldungen ausgeben, wenn die Konfigurationsdatei syntaktische richtig ist:
# /usr/sbin/named-checkconf
Neustart
Falls die Basis-Konfiguration wie oben beschrieben durchgeführt wurde, sollte dem einem Neustart nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:
# systemctl restart named.service
bzw. in einer chroot
-Umgebung
# systemctl restart named-chroot.service
Überprüfung DNSsec
Folgende Abfrage sollte nun eine Ausgabe in etwa wie die nachfolgende zur Anzeige bringen:
# dig @127.0.0.1 tachtler.net +dnssec +multi ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 tachtler.net +dnssec +multi ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30323 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;tachtler.net. IN A ;; ANSWER SECTION: tachtler.net. 10800 IN A 192.168.0.90 tachtler.net. 10800 IN RRSIG A 10 2 10800 ( 20141202073530 20141102072325 33395 tachtler.net. boZ7udpgEplvLHwkIj+mS27okutxITMMD3HxLZOf8sOZ yh2H4pjxcsNzrFyCpkJBFTBcimHR3GQ0Gykzgif7zupV U30MKZM7/h2fUcc+ZJq7XVwjDtXrB8WumoEFUq85xXUX hOUD1kgicyHIpyZ8yE7Kwu+tcrpQE7r2PF1SBZPVBsAJ jloNfkikR93VtBaDWIziJAOv1gTQCBAcL85Qt41Y1k6g ob/mFa+vbFU3eBWdvagyPMyQqN79OTZIxz4s3indXbi5 UGFN20XZvTAY3PQukt7QSkJ2+2sF9707BagXSxhJZ2yo H2m7VFdwlfKpkBnaZ9Ex0JEGHIClGT906g== ) ;; AUTHORITY SECTION: tachtler.net. 10800 IN NS ns1.idmz.tachtler.net. tachtler.net. 10800 IN RRSIG NS 10 2 10800 ( 20141202073530 20141102072325 33395 tachtler.net. Z49+KRmLIrvP+xWR/ob8/3QLZ08KiO9iciAgcLewQITS PwxVzcAE7q99Z8fdAD/gZj1UkVLuuWXAyW0qh3BYnxSC XVUhTegflkJc/PKO/QBMaz4f278KeGEUh8MGi+M11qbs eiWr0rHMLnH1OQOdGyT+g/hWeR6CyXBrhBRZ0Frnx92C SpZbIBOEi3fsrqkIlhBxbycq6Zz3RTmNlBl6q/xhC1yS aJfIlcFb9hl8kglHqyX5du3KFNsa5/ZyFNWyjR0pMuxH akqLPISrsi1/JWoup/6vh7PHIadz8ftb9byb1rG6oWka lk1fLnw/LXrjSlZPL5NluC6+R291DvJnWg== ) ;; ADDITIONAL SECTION: ns1.idmz.tachtler.net. 10800 IN A 192.168.0.20 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Nov 02 09:23:42 CET 2014 ;; MSG SIZE rcvd: 696
HINWEIS - Das Flag: ad
ist bei Authoritativen DNS-Servern NICHT gesetzt! Nur bei rekursiven „resolvern“ ist das Flag: ad
gesetzt, da diese die „Kette des Vertrauens“ abfragen und auflösen!
Nachfolgende Abfrage bringt den DNSKEY zum Vorschein:
# dig @127.0.0.1 +cd +multi tachtler.net dnskey ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 +cd +multi tachtler.net dnskey ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27553 ;; flags: qr aa rd ra cd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;tachtler.net. IN DNSKEY ;; ANSWER SECTION: tachtler.net. 10800 IN DNSKEY 256 3 10 ( AwEAAdieNs0rYbP84RKAaWn1lNsbc+DOxqb3UkzqXH+q fkHaijK2WFr763SeSwiPsBgnM3T44CVYJYOz3UnCSfep VeTLTaT4AJcICy4yoKGkSGAoEpf2zOv7Wm1vDUkqI5FF Ui1lYE+SpeSKrp8SoRZ/3OFc3npIHDkQzSfPMfoQ245z bWHY0+oNsnwQtUWi1FuVSIaprrS3Q6XHjV7Yx8fRv3fD ujSAf5DM8sYJI/rqSdoiuiwx3mCMq+r2eZQNw3aQPjQd CDzWAn2fUxrvdS/lOaVbsg0fAb+PmKNYkpEndrAR6pe/ A5PU67UcaGoDWkeEw6ri4w6aWqoVq6Qm92bZeo0= ) ; ZSK; alg = RSASHA512; key id = 33395 tachtler.net. 10800 IN DNSKEY 257 3 10 ( AwEAAdYoLcd1WceIuJ8pG6pem5axl1py/721l/diXmmt J6sTMlMXtwDWbSz3+oFKf3KAhOyuT6wxoGZsdMhc4CTs xpPUN9VyqlLDCNP32LYAtcfG9mHkkKuL6UqruVbuo6YN g6rGzbcLeU55Be++z9VT6IACf7wGgCWOnprlqZe0Cz0W 9zV7YB5I1MZXPP2x+SPwiNcK/ig+KNs5nDEeGfryummK 5cRgPcQwE9Tzi3cDxktGM7us6B9n3tuPs7LWHqUbDeMr aeDd7gIY/Euk6OZ6twVwbF+Z0wc0zQwx2k02Cldc7hd4 8v5FGiNvj4ezmhRJ9fRe2oUIKqBHxxpausxdtuU= ) ; KSK; alg = RSASHA512; key id = 41592 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Nov 03 06:32:14 CET 2014 ;; MSG SIZE rcvd: 593
Manuelle Zone-Datei Updates
Wenn sowohl DNSSec als auch dynamische Updates aktiviert sind, funktioniert das Aktualisieren von Zonendaten/Zonendateien genauso wie bei herkömmlichem (unsicheren) DNS-Server, jedoch mit einer kleinen Einschränkung.
Sollen die Zonendaten/Zonendateien eines dynamischen DNS-Servers im laufenden Betrieb editiert werden, führt dies beim nächsten Start des named zu der Fehlermeldung
journal rollforward failed: journal out of sync with zone
und die Änderungen an den Zonendaten/Zonendateien wurden unter Umständen nicht übernommen.
Um auf Dateiebene die Zonendaten/Zonendateien manuell editieren zu können, muss zwingend nachfolgender Befehl VOR dem Editieren der Zonendaten/Zonendateien ausgeführt werden, um für die Zeit in der die Zonendaten/Zonendateien editiert werden, das automatische signieren der DNSSec gesicherten Zonen zu deaktivieren:
# rndc freeze intra.tachtler.net
Durch den Befehl rndc freeze [ZONE]
werden die dynamischen Updates abgeschaltet und die Journal
-Dateien werden in die Zonendateien übertragen.
Nachdem die Zonendaten/Zonendateien nun manuell editiert wurden, muss mit nachfolgendem Befehl die Erstellung von dynamischen Updates wieder eingeschaltet werden:
# rndc thaw intra.tachtler.net
nsupdate
/etc
Nachfolgende Schritte sind erforderlich um Zonen-Dateien via nsupdate
bearbeiten zu können.
Bevor mit dem Einsatz von nsupdate
begonnen werden kann, sollte ein Schlüsselpaar für den Einsatz von nsupdate
pro Zone erstellt werden.
Die soll im Verzeichnis
/etc
durchgeführt werden. Nachfolgender Befehl wechselt ist das angegebene Verzeichnis:
# cd /etc
Dies kann mit nachfolgendem Befehl durchgeführt werden:
# dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 512 -n HOST tachtler.net
Die Erstellung erfolgt mit dem Algorithmus HMAC-MD5
, welcher der Standard ist.
Anschließend sollten nachfolgende Dateien erstellt worden sein:
# ls -l /etc/*157* -rw------- 1 root root 121 Feb 17 14:21 /etc/Ktachtler.net.+157+19706.key -rw------- 1 root root 229 Feb 17 14:21 /etc/Ktachtler.net.+157+19706.private
Anschließend sollten noch die richtigen Besitz- und Dateirechte mit nachfolgenden Befehlen gesetzt werden:
# chown root:named /etc/*157*
und
# chmod 640 /etc/*157*
/etc/named.root.key
Der Inhalt der Datei sollte dann wie folgt aussehen:
managed-keys { # DNSKEY for the root zone. # Updates are published on root-dnssec-announce@icann.org . initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0="; };
/etc/named.conf
Nachfolgend muss noch die Haupt-Konfigurationsdatei wie folgt erweitert werden, um die einzelnen Zonen entsprechend via nsupdate
updaten zu dürfen.
Nur relevanter Ausschnitt:
... // Zone: tachtler.net ------------------------------------------------ zone "tachtler.net" IN { inline-signing yes; auto-dnssec maintain; key-directory "/etc/pki/dnssec-keys"; type master; file "master/tachtler.net.zone.db"; // nsupdate allow-update { key "tachtler.net"; }; }; ...
Wichtig ist hier die Zeile:
allow-update { key "tachtler.net"; }
Für den Inhalt des jeweiligen Zonen-Schlüssels, kann mit nachfolgendem Befehl der Schlüssel ausgegeben werden:
# cat /etc/Ktachtler.net.+157+19706.private Private-key-format: v1.3 Algorithm: 157 (HMAC_MD5) Key: K3EaOD3IysiC/D7lIXp+4hrYGDLyIq6la9oDBSuH2FMlE4kZ3O1ZFxKS/uS547TN5MHfwG5YvUkYE7gxMHCmCg== Bits: AAA= Created: 20160217132139 Publish: 20160217132139 Activate: 20160217132139
Der Inhalt der Datei sollte dann wie folgt erweitert werden:
(Nur relevanter Ausschnitt)
... // ================================================================================ // Includes. // ================================================================================ key "tachtler.net" { algorithm hmac-md5; secret "K3EaOD3IysiC/D7lIXp+4hrYGDLyIq6la9oDBSuH2FMlE4kZ3O1ZFxKS/uS547TN5MHfwG5YvUkYE7gxMHCmCg=="; };
Neu ist hier der Bereich:
key "tachtler.net" { algorithm hmac-md5; secret "K3EaOD3IysiC/D7lIXp+4hrYGDLyIq6la9oDBSuH2FMlE4kZ3O1ZFxKS/uS547TN5MHfwG5YvUkYE7gxMHCmCg=="; };
Beispiel: nsupdate
Nachfolgendes Beispiel fügt einen A-Record
der Zone tachtler.net
hinzu:
# nsupdate -k /etc/tachtler.net.+157+19706.key > server localhost > zone tachtler.net > update add test.tachtler.net 600 A 192.168.0.120 > send > quit
Anschließend Abfrage zeigt sogleich das Ergebnis:
# dig test.tachtler.net ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> test.tachtler.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39236 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;test.home.tachtler.net. IN A ;; ANSWER SECTION: test.tachtler.net. 600 IN A 192.168.0.120 ;; AUTHORITY SECTION: tachtler.net. 10800 IN NS ns1.idmz.tachtler.net. ;; ADDITIONAL SECTION: ns1.idmz.tachtler.net. 10800 IN A 192.168.0.20 ;; Query time: 0 msec ;; SERVER: 192.168.0.20#53(192.168.0.20) ;; WHEN: Wed Feb 17 15:27:53 CET 2016 ;; MSG SIZE rcvd: 106
Anschließend kann der Eintrag mit nachfolgenden Befehlen wieder Rückgängig gemacht werden:
# nsupdate -k /etc/Ktachtler.net.+157+19706.key > server localhost > zone tachtler.net > update delete test.tachtler.net A > send > quit
Anschließend Abfrage zeigt sogleich das Ergebnis:
# dig test.tachtler.net ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> test.tachtler.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29468 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;test.tachtler.net. IN A ;; AUTHORITY SECTION: tachtler.net. 10800 IN SOA ns1.idmz.tachtler.net. hostmaster.tachtler.net. 620 86400 3600 604800 10800 ;; Query time: 0 msec ;; SERVER: 192.168.0.20#53(192.168.0.20) ;; WHEN: Wed Feb 17 15:45:03 CET 2016 ;; MSG SIZE rcvd: 107
rndc sync
Mit nachfolgendem Befehl können nun die durch nsupdate
durchgeführten Änderungen, welche sich nur im Hauptspeicher des Servers befinden und in einer Datei die den Namen der Zone trägt und um den Zusatz:
jnl
erweitert ist, auch in die Zonen-Datei übernommen werden:
# rndc sync
Anschließend kann dies durch Ausgaben im der LOG-Datei
/var/log/named.log
durch nachfolgende Einträge nachvollzogen werden:
(Nur relevanter Ausschnitt)
... ... named[6801]: client 127.0.0.1#24307/key tachtler.net: view idmz: signer "tachtler.net" approved ... named[6801]: client 127.0.0.1#24307/key tachtler.net: view idmz: updating zone 'tachtler.net/IN': adding an RR at 'test.tachtler.net' A ... named[6801]: zone tachtler.net/IN/idmz (signed): serial 619 (unsigned 601) ... named[6801]: received control channel command 'sync' ... named[6801]: dumping all zones: success
Ebenfalls kann die Zonen-Datei überprüft werden:
(Nur relevanter Ausschnitt)
... $TTL 600 ; 10 minutes test A 192.168.0.120 ...
Nützlich Befehle
Nachfolgend befindet sich eine Liste mit nützlichen Befehlen rund um DNS- und die DNS-Server-Verwaltung. Die Liste erhebt keinen Anspruch auf Vollständigkeit:
DNS-Server Konfigurationsdatei auf Fehler überprüfen:
# /usr/sbin/named-checkconf /etc/named.conf
HINWEIS - Der Parameter /etc/named.conf
kann weggelassen werden, wenn die „default“ Konfigurationsdatei /etc/named.conf
verwendet wird.
DNS-Server Konfigurationsdatei auf Fehler überprüfen: in chroot
-Umgebung:
# /usr/sbin/named-checkconf -t /var/named/chroot /etc/named.conf
DNS-Server Konfigurationsdatei auf Fehler überprüfen - und Ausgabe der Konfigurationsdatei, mit „includes“ und ohne Kommentare:
# /usr/sbin/named-checkconf -p /etc/named.conf
DNS-Server Zonenkonfigurationsdatei auf Fehler überprüfen:
Zonen-Datei für die Forward-Auflösung - /var/named/master/intra.tachtler.net.zone.db
# named-checkzone intra.tachtler.net /var/named/master/intra.tachtler.net.zone.db
Zonen-Datei für die Reverse-Auflösung - /var/named/master/2.168.192.zone.db
# named-checkzone 2.168.192 /var/named/master/2.168.192.zone.db
DNS-Server alle Zonenkonfigurationsdateien neu einlesen, ohne den DNS-Server neu starten zu müssen:
# rndc reload
Neue Zonendatei für hint
- root
-Nameserver holen und abspeichern:
# dig +bufsize=1200 +norec NS . @a.root-servers.net > /var/named/named.ca
Komplette Zonendatei der root
- Zone holen und abspeichern zur ggf. späteren Einbindung nach dem Motto - „DNS-Root-Zone zu Hause“ der root
-Zone. Siehe auch nachfolgende externe Links:
# dig +bufsize=1200 +norec AXFR . @lax.xfr.dns.icann.org > /var/named/rootzone.ca
Version des Verwendeten DNS-Servers abfragen (bind):
# dig txt chaos version.bind.
Auflisten aller DNS-Einträge einer Zone - hier z.B. tachtler.net:
# dig axfr tachtler.net
Logging für jede Anfrage einschalten und ausschalten:
# rndc querylog
Debugging Befehl für ein Abfrage via dig
:
dig @127.0.0.1 +trace +recurse +all +qr -t NS google.de
HINWEIS Es kann nach dem einschalten ein tail -f /var/named/data/named.run
durchgeführt werden, um jede Abfrage zu sehen!
Problemlösungen
bad udp cksum
Falls die DNS-Abfragen nicht so performant durchgeführt werden, wie das der Fall sein sollte, so kann dies daran liegen das die Netzwerkkarte im offload
-Modus geschaltet ist.
Dies kann z.B. mit der Analyse durch das Programm tcpdump
mit nachfolgendem Befehl zum Vorschein kommen:
# tcpdump -vvv -s 0 -l -n port 53 | grep bad.udp.chksum
Ausgabe:
192.168.0.30.46595 > 192.168.0.20.domain: [bad udp cksum 0xcb75 -> 0x04f2!] 25986+ A? google.com. (28)
Dies kann daran liegen, das das offloading
(gerade in virtuellen Umgebungen) der Netzwerkkarte hier zu fehlerhaften Prüfsummen führt.
Wie die Netzwerkkarte eingestellt ist, kann mit nachfolgendem Befehl überprüft werden:
# ethtool --show-offload eth0 Features for eth0: rx-checksumming: on [fixed] tx-checksumming: on tx-checksum-ipv4: off [fixed] tx-checksum-ip-generic: on tx-checksum-ipv6: off [fixed] tx-checksum-fcoe-crc: off [fixed] tx-checksum-sctp: off [fixed] scatter-gather: on tx-scatter-gather: on tx-scatter-gather-fraglist: off [fixed] tcp-segmentation-offload: on tx-tcp-segmentation: on tx-tcp-ecn-segmentation: on tx-tcp6-segmentation: on tx-tcp-mangleid-segmentation: off udp-fragmentation-offload: on generic-segmentation-offload: on generic-receive-offload: on large-receive-offload: off [fixed] rx-vlan-offload: off [fixed] tx-vlan-offload: off [fixed] ntuple-filters: off [fixed] receive-hashing: off [fixed] highdma: on [fixed] rx-vlan-filter: on [fixed] vlan-challenged: off [fixed] tx-lockless: off [fixed] netns-local: off [fixed] tx-gso-robust: off [fixed] tx-fcoe-segmentation: off [fixed] tx-gre-segmentation: off [fixed] tx-ipip-segmentation: off [fixed] tx-sit-segmentation: off [fixed] tx-udp_tnl-segmentation: off [fixed] tx-mpls-segmentation: off [fixed] fcoe-mtu: off [fixed] tx-nocache-copy: off loopback: off [fixed] rx-fcs: off [fixed] rx-all: off [fixed] tx-vlan-stag-hw-insert: off [fixed] rx-vlan-stag-hw-parse: off [fixed] rx-vlan-stag-filter: off [fixed] busy-poll: off [fixed] tx-gre-csum-segmentation: off [fixed] tx-udp_tnl-csum-segmentation: off [fixed] tx-gso-partial: off [fixed] tx-sctp-segmentation: off [fixed] l2-fwd-offload: off [fixed] hw-tc-offload: off [fixed]
HINWEIS - Wichtig sind hier nachfolgende Zeilen:
rx-checksumming: on [fixed] tx-checksumming: on
und
tcp-segmentation-offload: on tx-tcp-segmentation: on tx-tcp-ecn-segmentation: on tx-tcp6-segmentation: on tx-tcp-mangleid-segmentation: off
Die Lösung für dieses Problem kann durch nachfolgende Konfiguration erreicht werden.
Es muss pro Netzwerkkarte ein neuer Service im Verzeichnis
/etc/systemd/system
unter systemd
z.B. für die Netzwerkkarte eth0
mit nachfolgendem Namen angelegt werden:
# touch /etc/systemd/system/ethtool-eth0.service
Der Inhalt dieser Konfigurationsdatei für den neuen Service kann dann wie folgt aussehen:
[Unit] Description=ethtool-eth0 Service Requires=network.target After=network.target [Service] ExecStart=/usr/sbin/ethtool --offload eth0 rx off tx off gso off Type=oneshot [Install] WantedBy=multi-user.target
Anschließend muss mit nachfolgendem Befehl dieser Service gegenüber systemd
noch bekannt gemacht werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl daemon-reload
Zum Abschluss soll der Service bei einem Neustart des Rechners, automatisch ausgeführt werden, was mit nachfolgendem Befehl eingerichtet werden kann:
# systemctl enable ethtool-eth0.service Created symlink from /etc/systemd/system/multi-user.target.wants/ethtool-eth0.service to /etc/systemd/system/ethtool-eth0.service.
Eine Überprüfung, ob beim Neustart des Server der ethtool-eth0
-Service wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e ^ethtool-eth0.service ethtool-eth0.service enabled
bzw.
# systemctl is-enabled ethtool-eth0.service enabled
Um die Ausführung sofort, auch in einem laufendem Rechner durchzuführen, kann nachfolgender Befehl verwendet werden:
# systemctl start ethtool-eth0.service
Nach dem Start sollte mit nachfolgendem Befehl überprüft werden, ob die Ausführung auch den gewünschten Effekt gebracht hat:
# ethtool --show-offload eth0 Features for eth0: rx-checksumming: on [fixed] tx-checksumming: off tx-checksum-ipv4: off [fixed] tx-checksum-ip-generic: off tx-checksum-ipv6: off [fixed] tx-checksum-fcoe-crc: off [fixed] tx-checksum-sctp: off [fixed] scatter-gather: on tx-scatter-gather: on tx-scatter-gather-fraglist: off [fixed] tcp-segmentation-offload: off tx-tcp-segmentation: off [requested on] tx-tcp-ecn-segmentation: off [requested on] tx-tcp6-segmentation: off [requested on] tx-tcp-mangleid-segmentation: off udp-fragmentation-offload: off [requested on] generic-segmentation-offload: off generic-receive-offload: on large-receive-offload: off [fixed] rx-vlan-offload: off [fixed] tx-vlan-offload: off [fixed] ntuple-filters: off [fixed] receive-hashing: off [fixed] highdma: on [fixed] rx-vlan-filter: on [fixed] vlan-challenged: off [fixed] tx-lockless: off [fixed] netns-local: off [fixed] tx-gso-robust: off [fixed] tx-fcoe-segmentation: off [fixed] tx-gre-segmentation: off [fixed] tx-ipip-segmentation: off [fixed] tx-sit-segmentation: off [fixed] tx-udp_tnl-segmentation: off [fixed] tx-mpls-segmentation: off [fixed] fcoe-mtu: off [fixed] tx-nocache-copy: off loopback: off [fixed] rx-fcs: off [fixed] rx-all: off [fixed] tx-vlan-stag-hw-insert: off [fixed] rx-vlan-stag-hw-parse: off [fixed] rx-vlan-stag-filter: off [fixed] busy-poll: off [fixed] tx-gre-csum-segmentation: off [fixed] tx-udp_tnl-csum-segmentation: off [fixed] tx-gso-partial: off [fixed] tx-sctp-segmentation: off [fixed] l2-fwd-offload: off [fixed] hw-tc-offload: off [fixed]
HINWEIS - Wichtig sind hier nachfolgende Zeilen:
rx-checksumming: on [fixed] tx-checksumming: off
und
tcp-segmentation-offload: off tx-tcp-segmentation: off [requested on] tx-tcp-ecn-segmentation: off [requested on] tx-tcp6-segmentation: off [requested on] tx-tcp-mangleid-segmentation: off