% <#>-----------------------------------------------------------------------<#> \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 1b:} 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 2c:} Welcher der DNS-Server ist für die Zone \textit{cryptic.systems} der Primary und welcher der Replica DNS-Server? \item \textbf{Aufgabe 2d:} Welche Mail-Server sind für die Zone \textit{cryptic.systems} verantwortlich? \item \textbf{Aufgabe 2e:} Welcher Mail-Server wird zur Zustellung von E-Mails für die DNS-Zone \textit{cryptic.systems} privorisiert? \item \textbf{Aufgabe 2f:} 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}