Lokaler Nameserver unter Mac OS X

Für einige Entwicklungsaufgaben ist es ungemein praktisch, wenn man mit virtuellen Maschinen arbeitet. Nur kann man sich oft nicht alle IP-Adressen merken, wenn man mehrere davon benutzen muss.
Da wünscht man sich einen lokalen Nameserver, der die Namensauflösung für eine virtuelle Top Level Domain (TLD) übernimmt.
Mit Bind, den Mac OS X von Haus aus mitbringt, konnte ich mich noch nie richtig anfreunden: Das Setup ist zu kompliziert.
Aber dank dnsmasq steht eine sehr leichtgewichtige Alternative zur Verfügung – und die ist sogar mit DHCP kompatibel.


Zunächst muss man dnsmaq installieren. Mit homebrew ist das ganz einfach möglich:

gerrits-mbp:~ gbeine$ brew install dnsmasq
==> Downloading http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.68.tar.gz
...
==> Summary
/opt/homebrew/Cellar/dnsmasq/2.68: 7 files, 464K, built in 13 seconds

Nach der Installation muss der dnsmasq noch als Daemon registriert werden.
Das geschieht mit der von homebrew vorgeschlagenen Befehlszeile:

gerrits-mbp:~ gbeine$ sudo cp -fv /opt/homebrew/opt/dnsmasq/*.plist /Library/LaunchDaemons

Als nächstes benötigt dnsmasq eine modifizierte Konfiguration, um den Mac als DHCP-Client nutzen zu können.
Die Konfiguraton bewirkt, dass dnsmasq die Dateien /etc/resolv.conf und /etc/hosts nicht auswertet.
Stattdessen soll dnsmasq IP-Adressen für die TLD .dev auflösen:

# If you don't want dnsmasq to read /etc/resolv.conf or any other
# file, getting its servers from this file instead (see below), then
# uncomment this.
no-resolv

# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
no-hosts

address=/mediawiki.dev/192.168.79.129

In dieser Beispiel-Konfiguration habe ich die IP-Adresse meiner virtuelle Maschine für MediaWiki-Entwicklung angegeben.
Die Datei muss im homebrew-Verzeichnis unter /etc/dnsmasq.conf abgespeichert werden.
Bei mir ist das das Verzeichnis /opt/homebrew/etc/dnsmasq.conf, normalerweise ist es /usr/local/etc/dnsmasq.conf.

Danach kann der dnsmasq gestartet werden, auch hier kann die Kommandozeile von homebrew übernommen werden:

gerrits-mbp:~ gbeine$ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

Jetzt muss man Mac OS X nur noch mitteilen, dass die TDL .dev von dnsmasq verwaltet wird.
Mac OS X bietet dazu einen ziemlich eleganten Mechanismus an, nämlich die Konfiguration von Resolvern für bestimmte TLDs.
Dazu benötigt man eine Datei, die den gleichen Namen wie die TLD hat, im Verzeichnis /etc/resolver:

gerrits-mbp:~ gbeine$ sudo mkdir /etc/resolver
gerrits-mbp:~ gbeine$ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/dev'

Diese Datei folgt dem Beispiel der /etc/resolv.conf und enthält die Einträge für die Nameserver, die Domains unter der entsprechenden TLD auflösen können.

Ein anschließender Test beweist: Es funktioniert.

gerrits-mbp:~ gbeine$ ping -c 1 mediawiki.dev
PING mediawiki.dev (192.168.79.129): 56 data bytes
64 bytes from 192.168.79.129: icmp_seq=0 ttl=64 time=0.630 ms

--- mediawiki.dev ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.630/0.630/0.630/0.000 ms

Was man nicht tun sollte, ist die Domain .local auf diese Weise zu manipulieren. Das kann unerwünschte Effekte haben.
Möchte man echte TLDs auf diese Weise manipulieren, muss man dnsmasq erlauben, die Resolver aus der /etc/resolv.conf zu befragen. Würde man Hostnamen von .com mit dnsmasq lokal verwalten, könnten sonst alle anderen Domains unterhalb von .com nicht mehr aufgelöst werden. Das Manipulieren von echten TLDs ist also nichts, was ich empfehlen würde!

Quellen:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.