% <#>-----------------------------------------------------------------------<#>
\section{DNS}%
\label{sec:dns}

% #>------------------------------------------------------------------------<#
\subsection{Aufbau des DNS}%
\label{sec:dns.aufbau}

Die Adressierung der Rechner in IP-basierten Netzen erfolgt über die IP-Adresse
des angesprochenen Rechners. Da der Mensch sich Nummernfolgen schlecht merken
kann, wurde schon früh eine Ersetzung der Nummern durch Namen auf der
Benutzerschnittstelle eingeführt. Die ursprüngliche Zuordnungsmethode wird auch
heute noch in kleinen Netzen angewendet: jeder Rechner im Netz verfügt über eine
Datei mit zuordnungen von Namen zu Nummern. Unter Unix-artigen Betriebssystemen
ist dies die Datei \textit{/etc/hosts}.

\begin{verbatim}
127.0.0.1       localdomain.localhost localhost
::1             localdomain.localhost localhost
\end{verbatim}

\begin{itemize}[label={},itemsep=0pt]
  \item \textbf{Aufgabe 1a:} Überprüfen Sie ihre \textit{hosts} Datei, ob dort
  abweichende Zuordungen zu der obrigen Ausgabe definiert sind
  \item \textbf{Aufgabe 1b:} Welche Website wird ihnen im Browser dargestellt,
  wenn Sie den folgenden Eintrag in die Datei \textit{hosts} aufnehmen und per
  Browser die Seite \textit{hello-world.local} aufrufen? \texttt{198.145.29.83
  hello-world.local}
  \item \textbf{Aufgabe 1c:} In welchem Pfad findet man die entsprechende Datei
  in Windows Systemen?
\end{itemize}

Dieses Verfahren der Namensauflösung führt in großen Netzwerken schnell zu
Problemen. Alle beteiligten Rechner benötigen in ihrer Version der Datei die
Zuordnungen aller Rechner, was die zentrale Verwaltung der Zuordnungen schnell
sehr aufwändig macht. Als Folge dieser Erkenntnis wurde das \acrfull{acr:dns}
entwickelt, das eine verteile Datenbank darstellt, bei der einzelne Server für
genau beschriebene Teilbereiche verantwortlich sind.

Den Namensraum im Internet ist hierarchisch gegliedert, ausgehend von der
höchsten Ebene, den sog. \acrfullpl{acr:tld}, können viele untergeordnete Ebenen
(Domains) eingefügt werden. Da die Internet-Entwicklung in den USA begann,
teilten die ersten \acrshortpl{acr:tld} den amerikanischen Netzbereich auf (z.B.
com, edu und org). Später kamen dann weitere \acrshortpl{acr:tld} für jedes Land
hinzu, die den genormten Länderkürzeln entprechen (ISO 3166), beispielsweise be,
de, nl usw. In der jüngsten Entwicklung wurden weitere allgemeine
\acrshortpl{acr:tld} hinzugefügt. Beispielsweise info, firm, museum, movie und
berlin.

Bei Domänennamen wird die Groß- und Kleinschreibung nicht beachtet, \textbf{edu}
und \textbf{EDU} bedeuten das gleiche. Einzelne Teil-Domainnamen dürfen maximal
63 Zeichen lang sein, der vollständige Domainname, \acrfull{acr:fqdn}, darf
nicht länger als 255 Zeichen sein. Für die Genehmigung eines neuen Domainnamens
ist die Verwaltung der nächst höheren Domain zuständig, für die Root-Zone und
damit die \acrshortpl{acr:tld} ist dies die \acrfull{acr:icann}.

\begin{itemize}[label={},itemsep=0pt]
  \item \textbf{Aufgabe 2a:} Für welche Verwaltungsmaßnahmen ist die
  \acrshort{acr:icann} verantwortlich? Nutzen Sie die Internetpräsenz der
  \acrshort{acr:icann}, um die Frage zu beantworten.
\end{itemize}

% #>------------------------------------------------------------------------<#
\subsection{Betrieb einer Domain}%
\label{sec:dns.betrieb_einer_domain}

Für jede offiziell registrierte Domain müssen mindestens zwei DNS-Server
eingerichtet werden, die in unterschiedlichen Subnetzen stehen müssen. Einer
dieser Server wird dann als Primary, der andere als Replica betrieben.
Änderungen müssen dann nur noch am Primary vorgenommen werden, der oder die
Replicas werden durch den Primary über die Änderungen informiert, worauf ein
Zonentransfer der Daten vom Replica veranlast wird.

Sucht ein Rechner die IP-Nummer zu einem Namen, wird er zuest den DNS-Server,
der voreingestellt ist, befragen. Dies ist meist der Server der eigenen Domain
bzw. des eigenen Providers. Für Heimnetzwerke stellt beispielsweise der Router
einen DNS-Server bereit. Hat dieser Server den gewünschten Datensatz in seiner
Datenbank, so kann er die Anfrage sofort beantworten (Authorative Answer). Ist
der Datensatz nicht vorhanden, kann je nach Konfiguration ein Server aus einer
höheren Ebene befragt werden, der dann den zuständigen Server kennt oder
seinerseits die Anfrage wieder nach oben weiterreicht. Der Server kann jedoch
auch als Antwort dem Client mitteilen, welchen Server er fragen soll, um seine
Anfrage zu beantworten. Jeder DNS-Server muss mindestens die DNS-Server seiner
direkt untergeordneten Domains kennen, um Anfragen hierfür weiterreichen zu
können und er muss die Adressen aller Root-Server kennen.

Für die Verwaltung des Namesraums wird dieser in Zonen aufgeteilt. Ein
DNS-Server kann für eine oder mehrere DNS-Zonen verantwortlich sein. Es gibt
üblicherweise Zonen für die Vorwärtsauflösung (Forward Lookup) und
Rückwärtsauflösung (Reverse Lookup). Vorwärtsauflösung bedeutet, dass für einen
gegebenen Rechnernamen eine IP-Adresse gesucht wird. Rückwärtsauflösung bedeutet
dementsprechend, dass für eine gegebene IP-Adresse ein Rechnername gesucht wird.
Für jede Zone werden die Informationen als sogenannte \acrfullpl{acr:rr}
gespeichert. Dies sind die gängigen \acrshortpl{acr:rr}:

\begin{itemize}[itemsep=0pt]
  \item[\textbf{\acrshort{acr:soa}}] \acrfull{acr:soa} markiert den Start einer
  DNS-Zone mit verschiedenen allgemeinen Informationen
  \item[\textbf{A}] Enthält die IPv4-Adresse zu einem gegebenen Rechnernamen
  \item[\textbf{AAAA}] Enthält die IPv6-Adresse zu einem gegebenen Rechnernamen
  \item[\textbf{NS}] Enthält den Rechnernamen eines für die Domain
  verantwortlichen DNS-Servers. Darf nicht auf einen \textit{CNAME} Eintrag
  verweisen!
  \item[\textbf{MX}] Enthält die Prioritätsangabe und den Rechnernamen eines
  zuständigen Mailservers. Darf nicht auf einen \textit{CNAME} Eintrag
  verweisen!
  \item[\textbf{PTR}] Enthält den Rechnernamen zu einer gegebenen IP-Adresse
  (IPv4 oder IPv6)
  \item[\textbf{SSHFP}] Enthält den Fingerabdruck des privaten SSH-Schlüssels,
  welcher auf dem jeweiligen Rechner beim Verbindungsaufbau abgefragt und
  überprüft wird. Ein Vergleich der Fingerabdrücke aus dem DNS mit dem, welcher
  der entfernte Server anbietet, deckt so einen möglichen Man-in-Middle Angriff
  auf.
\end{itemize}

Clientseitig können die Programme \textbf{dig}, \textbf{resolvectl},
\textbf{nslookup} und \textbf{host} zur Abfrage verwendet werden. Diese Abfragen
werden normalerweise über das Transportprotokoll UDP abgewickelt und sind an den
Port 53 gerichtet.

Lesen Sie die Dokumentation eines der oben genannten Programme oder informieren
Sie sich im Internet, um folgende Fragen zu beantworten:

\begin{itemize}[label={},itemsep=0pt]
  \item \textbf{Aufgabe 2a:} Wann wird bei DNS das Transportprotokoll TCP eingesetzt?
  \item \textbf{Aufgabe 2b:} Fragen Sie mit Hilfe eines der oben genannten
  Programme den \acrshort{acr:rr} \textit{SSHFP} der Domain
  \textit{pontos.cryptic.systems} ab. Welche Informationen werden zurück
  gegeben?
  \item \textbf{Aufgabe 2c:} Welche DNS-Server sind für die DNS-Zone
  \textit{cryptic.systems} verantwortlich?
  \item \textbf{Aufgabe 2d:} Welcher der DNS-Server ist für die Zone
  \textit{cryptic.systems} der Primary und welcher der Replica DNS-Server?
  \item \textbf{Aufgabe 2e:} Welche Mail-Server sind für die Zone
  \textit{cryptic.systems} verantwortlich?
  \item \textbf{Aufgabe 2f:} Welcher Mail-Server wird zur Zustellung von E-Mails
  für die DNS-Zone \textit{cryptic.systems} privorisiert?
  \item \textbf{Aufgabe 2g:} Welcher DNS-Name steht hinter der IP-Adresse
  \textit{45.9.61.170}?
\end{itemize}

% #>------------------------------------------------------------------------<#
\subsection{Konfiguration des Clients}%
\label{sec:dns.konfiguration_des_clients}

Für die Namensauflösung auf der Seite des Clients ist der \textbf{Resolver}
verantwortlich, welcher von den Anwendungsprogrammen bei Bedarf automatisch
aufgerufen wird. Die Konfiguration erfolgt in Unix-Systemen über die Datei
\textit{/etc/resolv.conf}. Die wichtigsten Einträge in dieser Datei sind
\textit{domain} und \textit{nameserver}.

Immer seltener muss die Datei \textit{/etc/resolv.conf} manuell gepflegt werden.
Programme bzw. Dienste wie Beispielsweise der \textit{network-manager} oder
\textit{systemd-resolved} erstellen die Datei automatisch anhand der
Informationen, welche Sie per DHCP erhalten haben. Ändert man direkt den Inhalt
der Datei, kann dies dazu führen, dass das Programm oder der Dienst die
Einstellungen wieder überschreibt. Dem Programm bzw. dem Dienst muss daher
direkt mitgeteilt werden, welchen DNS-Server bzw. Domain der Rechner angehört,
um ein überschreiben zu vermeiden.

Mit dem Eintrag \textit{domain} wird festgelegt, welcher Domainname
standardmäßig an unvollständige Namen angehängt wird, bevor die Anfrage
abgesendet wird. Als unvollständig werden in der Regel Namen betrachtet, die
keinen Punkt enthalten. Es kann hier eine Liste mehrere Domainnamen angegeben
werden.

Mit dem Eintrag \textit{nameserver} wird angegeben, welcher DNS-Server für eine
Anfrage angesprochen wird. Zu Erhöhung der Redundanz ist es möglich, mehrere
Einträge dieser Art vorzunehmen. Ist der erste DNS-Server nicht erreichbar, wird
der nächste aus der Liste gefragt.

Die Datei \textit{/etc/nsswitch.conf} ist eine weitere Konfigurationsdatei aus
dem Bereich der Namensauflösung, in der eingestellt wird, in welcher Reihenfolge
interne und externe Quellen für die Namensauflösung verwendet werden. Wenn
folgende Zeile enthalten ist, wird zuerst in der lokalen Datei
\textit{/etc/hosts} gesucht. Wird dort kein passender Eintrag gefunden, wird das
DNS abfragt.

\begin{verbatim}
  hosts:    files dns
\end{verbatim}

\begin{itemize}[label={},itemsep=0pt]
  \item \textbf{Aufgabe 3a:} In Kapitel \ref{sec:network} haben Sie erfolgreich
  \textit{systemd-networkd} konfiguriert. Passen Sie ihre Konfiguration so an,
  dass primär der DNS-Server \textit{8.8.8.8} und sekundär der DNS-Server
  \textit{8.8.4.4} für ihren Netzwerkadapter verwendet wird.
  \item \textbf{Aufgabe 3b:} Überprüfen Sie die Konfiguration mit dem Aufruf von
  \textit{resolvectl}. Beide DNS-Server sollten unter Ihrem Netzwerkadapter
  gelistet und zusätzlich in der Datei \textit{/etc/resolv.conf} aufgeführt
  sein.
\end{itemize}

% #>------------------------------------------------------------------------<#
\subsection{Einstellen des Rechnernamens}%
\label{sec:dns.einstellen_des_rechnernamens}

Der Rechnername ist in der Datei \textit{/etc/hostname} gespeichert. Nach
Änderung der Datei ist es sinnvoll, den Rechner neu zu starten, um die Änderung
allen Diensten bekannt zu machen.

\begin{itemize}[label={},itemsep=0pt]
  \item \textbf{Aufgabe 4a:} Ändern Sie den Rechnernamen ab und starten Sie das System neu
  \item \textbf{Aufgabe 4b:} Nutzen Sie eines der Programme zur Namensauflösung,
  um die IP-Adresse ihres Rechners anhand des neuen Rechnernamens durch den im
  lokalen Netzwerk befindlichen DNS-Server auflösen zu lassen. Überprüfen Sie,
  ob die IP-Adresse mit der IP-Adresse ihrer Netzwerkkarte übereinstimmt.
\end{itemize}