Linux NetMag
Titel: DNS-Server für kleine Netzwerke
URL: http://www.linuxnetmag.com/de/issue7/m7dnsmasq1.html
Artikel vom: 2.02.2002
Autor: Ronny Ziegler


Masquerading-DNS Falls Ihr gesamtes LAN mittels eines Masquerading-Servers ins Internet geht, kann es zu langen Wartezeiten kommen, wenn man bei gekappter Leitung einen Rechner im Internet erreichen will...


kein Anschluß unter dieser IP ...

Sehr beliebt bei kleinen Netzwerken ist die Benutzung einer einzigen Internetverbindung (sei es mittels Modem, ISDN, DSL ...) von mehreren Clients innerhalb eines LANs. Schon lange, bevor andere "Betriebssysteme" derartige Techniken angeboten haben, unterstützte Linux das sogenannte Masquerading (tlw. auch NAT -- Network Address Translation genannt, was im Detail zwar nicht exakt das selbe ist, aber den gleichen Zweck erfüllt).

Masquerading ermöglicht es nicht nur, von jedem Client aus auf das WWW zugreifen zu können, wie es auch viele Windows-Proxies anbieten, sondern kann nahezu alle Services weiterleiten (telnet, ftp, finger ...).
Bei den Clients muß dann nur noch der Masquerading-Server als Gateway eingestellt werden, so dass sämtliche Netzwerk-Anfragen, die an Rechner außerhalb des eigenen LANs gerichtet sind, an den Gateway geleitet werden, der diese dann mit einer offiziellen IP-Adresse versorgt und an den gewünschten Rechner im Internet weiterleitet.

Will man eine DNS-Anfrage starten (was eigentlich bei jedem Service automatisch geschieht, wenn man statt der IP-Nummer den Domain-Namen benutzt), wird die Anfrage an die in der Datei /etc/resolv.conf eingestellten Domain-Name-Server gerichtet.
Da ein kleines lokales Netz zumeist keinen eigenen Domain-Server besitzt, wird diese Anfrage vom Masquerading-Server an das Internet weitergeleitet.

Netz-Topologie

Besitzt der Masquerading-Server keine Verbindung zum Internet, da der Rechner gerade nicht eingewählt ist, versucht der Client trotzdem den Name-Server im Internet zu erreichen. Es dauert allerdings, bis der Client erkennt, dass er den Domain-Server nicht erreichen kann; es kommt zum Time-Out.

Dies kann sehr lästig sein, da für die Zeit, in der eine Verbindungsaufnahme zum Name-Server verlangt wird, der benutzte Dienst zumeist nicht auf weitere Anfragen reagiert.

dnsmasq

An dieser Stelle kommt das kleine Programm dnsmasq ins Spiel. Es wird auf dem Masquerading-Server installiert und kann von allen Clients aus als Name-Server eingestellt werden.
Besitzt der Masquerading-Server nun eine Verbindung ins Internet, leitet dnsmasq alle Name-Server Anfragen an einen echten Name-Server im Internet weiter.
Besteht hingegen keine Verbindung ins Internet, so bemerkt dies dnsmasq und gibt dem Client sofort, ohne erst in ein Time-Out laufen zu müssen, die Fehlermeldung zurück, dass der gewünschte Rechner momentan nicht erreichbar ist.

Für das lokale Netzwerk kann dnsmasq außerdem als vollständiger Name-Server-Ersatz benutzt werden. Um im lokalen Netz von jedem Client aus einen anderen Client mit seinem Domain-Namen erreichen zu können, muss man entweder bei jedem einzelnen Rechner diese in der Datei /etc/hosts einstellen, was schon bei mehr als 3 Rechnern unnötigen Auffwand bringt, oder man benutzt für das lokale Netz einen eigenen Name-Server, der nur für die lokalen Rechner zuständig ist.
Der zweite Weg hat hingegen den Nachteil, dass die Konfiguration und Wartung eines richtigen Name-Servers recht aufwändig ist.

dnsmasq hingegen löst dieses Problem geradezu beispielhaft. Auf jedem Client wird nun der Masquerading-Server als (alleiniger) DNS-Rechner in der Datei /etc/resolv.conf eingetragen. Die Datei /etc/hosts hingegen muss bei den Clients nicht konfiguriert werden.

Dies braucht ausschließlich auf dem Masquerading-Server zu erfolgen. Dort trägt man in der /etc/hosts alle Rechner des lokalen Netzes ein, und dnsmasq benutzt diese Datei, um Name-Server-Anfragen des lokalen Netzes zu beantworten.

Ändert sich nun die IP-Adresse eines Clients, oder kommt ein weiterer Client zum Netzwerk hinzu, reicht eine Änderung der /etc/hosts auf dem Masquerading-Server, und schon ist die IP-Adresse auch allen anderen Clients im Netz bekannt.

Installation

Die Installation ist sehr einfach. Nach dem Download der Software von http://www.thekelleys.org.uk/dnsmasq/doc.html und dem Entpacken

  >> tar zxvf densmasq-1.xxx -C /tmp/
  >> cd /tmp/dnsmasq-1.xxx
  
kann die Software sogleich kompiliert werden
  >> make
  
Danach kann man dnsmasq mittels
  >> make install
  
systemweit installieren oder auch einfach nur das gesamte Verzeichnis nach /usr/local kopieren.

Danach sollte man dnsmasq auf dem Masquerading-Server probeweise starten:

  >> /pfad/zu/dnsmasq
  
Die einzige Ausgabe des Programms erfolgt in der Log-Datei /var/log/messages und sollte etwa folgendermaßen aussehen:
  dnsmasq[1334]: started, version 1.0 cachesize 300
  

Client Konfiguration

Auf den Client-Rechnern sollte nun die DNS-Einstellungen an die neuen Gegebenheiten angepasst werden. Zuerst muss der Masquerading-Server als alleiniger DNS-Server eingestellt werden, da ansonsten die Vorteile von dnsmasq nicht genutzt werden würden.

Die Konfiguration der DNS-Server erfolgt bei SuSE z.B. über Yast, oder man editiert gleich die Konfigurationsdatei per Hand. Yast macht im Endeffekt auch nichts anderes.
Zum Umstellen der DNS-Einstellungen entfernt man aus der Datei /etc/resolv.conf alle DNS-Server und trägt nur die IP-Adresse des Masquerading-Rechners ein:

/etc/resolv.conf
  search meindomainname.de
  nameserver 192.168.0.1
  


Die erste gibt den Domainnamen des lokalen Netzes an, und sollte ungeändert bleiben. In die zweite Zeile wird die IP-Adresse des Masquerading-Rechners eingetragen (diese kann bei Ihnen natürlich auch anders lauten).

Als nächstes sollten alle vielleicht bereits gemachten Einträge der /etc/hosts gelöscht werden, und die Rechnernamen des lokalen Netzes auflösen.

/etc/hosts
   #
   # hosts         This file describes a number of hostname-to-address
   #               mappings for the TCP/IP subsystem.  It is mostly
   #               used at boot time, when no name servers are running.
   #               On small systems, this file can be used instead of a
   #               "named" name server.
   # Syntax:
   #    
   # IP-Address  Full-Qualified-Hostname  Short-Hostname
   #
  
  
   127.0.0.1	localhost
   192.168.0.11   hal2000.meindominname.de 	hal2000
  


Die Einträge für localhost, sowie die IP- und zugehöriger Hostname des Clients-Rechners sollten aber in der Datei bestehen bleiben.

Testen

Nun kann man die Konfiguration von einem Client-Rechner aus testen:
Mittels nslookup suchen wir zuerst nach einem anderen Rechner des lokalen Netzwerkes (in unserem Beispiel der Rechner "paul"):

  >> nslookup paul
  Server:  masquerade.meindomainname.de
  Address:  192.168.0.1
  
  Non-authoritative answer:
  Name:    paul.meindomainname.de
  Address:  192.168.0.15
  
Der erste Block zeigt an, welcher DNS-Server angefragt wurde. Hier steht, genau wie es sein sollte, der eben gestartete dnsmasq-Server, der von nun an alle Anfragen bearbeitet.

Der zweite Block zeigt die Antwort des DNS-Servers an, also die gesuchte IP-Auflösung des Rechnernamens "paul".

Diese Namensauflösung erfolgt also von nun an mittels der /etc/hosts auf dem Masquerading-Server. Einträge in den /etc/hosts-Dateien werden von nun an auf den einzelnen Clients nicht mehr benötigt.

Sollte der DNS-Server nicht laufen, erhalten Sie stattdessen folgende Ausgabe

  >> nslookup paul
  *** Can't find server name for address 192.168.0.1: No response from server
  *** Default servers are not available
  
Lautet die Antwort aber
  >> nslookup paul
  Server:  masquerade.meindomainname.de
  Address:  192.168.0.1
  
  *** masquerade.meindomanname.de can't find paul: Non-existent host/domain
  
bedeutet dies, dass der DNS-Server zwar läuft, der gesuchte Rechnername ihm aber nicht bekannt ist.
Es existiert kein entsprechender Eintrag in der /etc/hosts-Datei auf dem Masquerading-Server.

Sollten der Masquerading-Server nun eine offene Verbindung ins Internet besitzen, können Sie auch die IP-Auflösung von Internet-Rechnern ausprobieren. dnsmasq leitet dann alle Anfragen über externe Rechner an die DNS-Server weiter, die in der /etc/resolv.conf-Datei des Masquerading-Servers eingetragen sind.

  >> nslookup www.yahoo.com
  Server:  masquerade.meindomainname.de
  Address:  192.168.0.1
  
  Non-authoritative answer:
  Name:    www2.vip.lng.yahoo.com
  Address:  217.12.3.11
  Aliases:  www.yahoo.de
  

Da nun alles funktioniert, sollte der DNS-Server bei jedem Start des Masquerading-Servers automatisch mitgestartet werden. Dafür eignet sich am ehesten ein Init-Skript auf dem Masquerading-Server (mehr zur Benutzung von Init-Skripten finden Sie im Artikel Init-Skripte der 6. Ausgabe) oder ein Eintrag der Form

  /pfad/zu/dnsmasq &
  
in der Datei /sbin/init.d/boot.local.

Ein sehr einfaches Init-Skript könnte beispielsweise folgendermaßen aussehen

/sbin/init.d/dnsmasq
   #! /bin/sh
  
  case "$1" in
      start)
          echo -n "Starting DNSMASQ daemon"
          /usr/local/dnsmasq-1.0/dnsmasq         
          ;;
      stop)
          echo -n "Shutting down DNSMASQ daemon"
          killall dnsmasq 
          ;;
      restart)
          $0 stop && $0 start
          ;;
      *)
          echo "Usage: $0 {start|stop|restart}"
          exit 1
  esac
  exit 0
  


Besser wäre es aber, wenn Sie eine ihrer jeweiligen Distribution angepasste Init-Datei verwenden.

Featureritis

Damit ist aber noch lange nicht Schluß mit den hilfreichen Funktionen von dnsmasq.
Das Programm bietet noch weitere Funktionen:
Es kann beispielsweise auch als Mail-Hub dienen und herausgehende E-mails zwischenspeichern, falls kurzfristig keine Internetverbindung bestehen sollte. Wählt sich der Masquerading-Server dann ins Internet ein, werden alle zwischengespeicherten Adressen an die jeweiligen Empfänger zugestellt. Dies alles läuft vollkommen unbemerkt vom Benutzer des Mailprogramms ab.
Gleiches ließe sich zwar auch mit geeigneter sendmail-Konfiguration erreichen, erzeugt aber bei Administratoren gewöhnlich wesentlich mehr Angstschweiß, da niemand ernsthaft an seine Siegeschancen gegen die ungetümen Konfigurationsdateien von sendmail glaubt.

Weitere nützliche Eigenschaft ist ein automatisches Mitbenutzen der Konfiguration eines DHCP-Servers. Somit wird vermieden, dass die Rechner des lokalen Netzes sowohl in die DHCP-Konfigurationsdatei als auch in die /etc/hosts eingetragen werden müssen, und so doppelte Arbeit entsteht.

Auch DNS-Caching wird unterstützt. Hierbei werden Ergebnisse bereits getätigter DNS-Anfragen für einige Zeit zwischengespeichert und müssen, sollte die selbe Anfrage erneut getätigt werden, nicht jedesmal wieder ins Internet weitergeleitet werden. Das kann bei langsamen Verbindungen einiges an Zeit sparen.

Leider sind die zusätzlichen Möglichkeiten von dnsmasq immer noch etwas knapp in der Dokumentation beschrieben.


Homepage: http://www.thekelleys.org.uk/dnsmasq/doc.html