Mac OS X Yosemite ignoriert DNS Suchdomains

Der lokale DNS Resolver in Mac OS X 10.10 (Yosemite) berücksichtigt die eingetragenen Suchdomains (mal wieder) nicht, wenn der gesuchte Hostname bereits einen Punkt enthält. Leider hat sich auch der Resolver geändert, so dass die Tipps aus 2011 hier auch nicht mehr helfen.

Mit dem Update auf 10.10.1 gibt es aber wieder eine Option, mit der man diese Funktion wieder herstellen kann:

sudo defaults write \
        /System/Library/LaunchDaemons/com.apple.discoveryd.plist \
        ProgramArguments -array-add "--AlwaysAppendSearchDomains"

Danach einfach noch den discoveryd durchstarten

sudo launchctl unload -w \
     /System/Library/LaunchDaemons/com.apple.discoveryd.plist
sudo launchctl load -w \
     /System/Library/LaunchDaemons/com.apple.discoveryd.plist

und danach funktioniert es wieder wie gewünscht.

Alternativer Heimnetzzugang

Da seit Freitag Morgen mein Unitiymedia Zugang gestört zu sein scheint (Kabelmodem bekommt bei der Frequenzsuche immer Timeouts) und Unitymedia natülich über das E-Mail-/Web-Formular nicht reagiert hat, konnte die Störung erst Freitag Nachmittag gemeldet werden. Da ich nicht davon aussgehe, das der Anschluß innerhalb der versprochenen 48 Stunden repariert wird, habe ich mich nach einem alternativen Netzzugang umgesehen. Da ich noch einen Linux Server laufen habe, der u.a DNS, DHCP, DB, IPv6-Tunnelendpunkt und Mediendaten hostet, lagt die Idee nah, diesen via UMTS ans Netz anzubinden und vorübergehend als Router zu nutzen, damit alle Geräte im Heimnetz wieder Netzzugang haben.

Die Anbindung des Mobiltelefons via USB-Tethering war äußerst einfach. Nachdem das Telefon, ein Xperia Pro mit CyanogenMod 10, USB-Tethering aktiviert hatte, wurde dieses als Netzwerkgerät an dem Debian Server erkannt (usb0). Um darüber ein Netzverbindung zu erhalten, muss dieses

  • mit DHCP aktivert konfiguriert,
  • die aktive Defaultroute deaktiviert und
  • Routing und Masquerading aktiviert werden.

Ganz Debian-Like kann man das in /etc/network/interfaces erledigen, wobei 10.0.7.1 die Gateway Adresse von eth0 ist, die normalerweise verwendet wird (genauer ist es die Adresse der FritzBox):

iface usb0 inet dhcp
        pre-up ip route del 0.0.0.0 via 10.0.7.1 || true
        up iptables -t nat -A POSTROUTING -j MASQUERADE
        up sysctl -w net.ipv4.conf.all.forwarding=1
        down sysctl -w net.ipv4.conf.all.forwarding=0
        down iptables -t nat -D POSTROUTING -j MASQUERADE
        post-down ip route add 0.0.0.0 via 10.0.7.1 || true

Mit

ifup usb0

fährt man die alternative Verbidung noch und mit

ifdown usb0

wieder runter.

Jetzt noch im DHCP-Server die Gatewayaddresse auf die Adresse des Servers ändern und schon haben (nach DHCP RENEWAL) alle Heimnetzgeräte wieder Netzzugang.


Leider war die Verbindung so gut, dass nach kurzer Zeit das Freivolumen des Mobiltelefons erschöpft war und nur noch als 56K Modem funktionierte, was wirklich nicht (mehr) sehr gut für eine Heimnetzanbindung taugt 🙂

Da ich aber noch über einen FONIC SurfStick mit Tagesflatrate besitze, muss dieser jetzt angebunden werden. Die Tagsflatrate hat ein Tageslimit von 500MB und ein Monatslimit von 5GB (und falls sich jemand zu einen Stick zulegt, kann er oder sie gerne meine Nummer „017678444083“ als Werbung angeben; damit erhalten beide Seiten je ein 5€ Guthaben).

Zurück zur Konfiguration. Der SurfStick verhält sich wie ein Modem also ist das Paket wvdial eine gute Wahl. Für die Enstsperrung der PIN, ist das Paket comgt eine Möglichkeit, meine Konfiuration kommt aber mitterweile ohne diese Pakt aus.

Die wvdial-Konfiguration liegt in /etc/wvdial.conf und sieht so aus

[Dialer SurfStick]
Modem = /dev/ttyUSB0
ISDN = off
Modem Type = USB Modem
Baud = 115200
Init = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","pinternet.interkom.de"
Init4 = AT^SYSCFG=2,2,3FFFFFFF,2,4
Init5 =
Init6 =
Init7 =
Init8 =
Init9 =
Phone = *99#
Phone1 =
Phone2 =
Phone3 =
Phone4 =
Dial Prefix =
Dial Attempts = 1
Dial Command = ATDT
Ask Password = off
Password = ppp
Username = ppp
Auto Reconnect = on
Abort on Busy = off
Carrier Check = on
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = 0
Check DNS = 0

Da ich das Ganze aber nicht in der Shell starten und dann irgendwie mühsam in den Hintergrund legen möchte, wird diese Verbindung auch via interfaces aktiviert und deaktiviert. Hierzu sind die folgenden Eintragungen nötig:

iface ppp0 inet wvdial
        provider SurfStick
        pre-up ip route del 0.0.0.0 via 10.0.7.1 || true
        pre-up echo AT+CPIN=1111 > /dev/ttyUSB0
        up iptables -t nat -A POSTROUTING -j MASQUERADE
        up sysctl -w net.ipv4.conf.all.forwarding=1
        down sysctl -w net.ipv4.conf.all.forwarding=0
        down iptables -t nat -D POSTROUTING -j MASQUERADE
        post-down ip route add 0.0.0.0 via 10.0.7.1 || true

Dann kann man mit

ifup ppp0

die alternative Verbidung hochfahren und mit

ifdown ppp0

wieder runterfahren.

Lokaler DNS Resolver ignoriert Suchdomains in Mac OS X Lion

Der lokale DNS Resolver in Mac OS X 10.7 (Lion) berücksichtigt die eingetragenen Suchdomains nicht, wenn der gesuchte Hostname bereits einen Punkt enthält.

Enthält der Suchdomaineintrag „example.com“, war es bisher möglich mit ping www.subdomain den Host www.subdomain.example.com zu erreichen. Mit MacOS X Lion ist dies jetzt nicht mehr möglich. Mit einer Änderung der Optionen für den lokalen DNS Resolver ist es möglich, den alten Zustand wieder herzustellen. Hierzu muss die Option -AlwaysAppendSearchDomains aktiviert werden.

Da in der Regel keine Optionen gesetzt sind, kann dies durch den Befehl

sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder \
        ProgramArguments -array-add "-AlwaysAppendSearchDomains"

erreicht werden. Danach muss der mDNSResponder neu gestartet werden.

sudo launchctl unload -w \
           /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w \
           /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Ein weiterer Parameter für den mDNSResponder ist -NoMulticastAdvertisements. Damit kann man verhindern, dass diverse Dienste nicht mehr per Multicast verkündet werden. Allen voran ist hier Bonjour zu nennen.

Ähnlich wie bei -AlwaysAppendSearchDomains kann diese Option mittels

sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder \
        ProgramArguments -array-add "-NoMulticastAdvertisements"

eingestellt werden.

Für den Fall, dass man das Ganze wieder Rückgängig machen will/muss, kann dies durch den Befehl

sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder \
        ProgramArguments -array /usr/sbin/mDNSResponder -launchd

erreicht werden.

Der MAC und die „toten Tasten“

In den Tastatur Layouts eines Macs sind einige Tasten tote Tasten (sog. dead keys). Wenn man weniger häufig akzentuierte Buchtaben benötigt, die man nicht direkt mit der Tastatur eingeben kann (bspw. á,â, ñ, …) und/oder die Zeichen ^,´ oder ~ häufig benötigt, kann es sehr störend sein, immer ~[SPACE] oder ^[SPACE] einzugeben.

Unter Linux ist es einfach. Hier bedient man sich der Option des X-Servers nodeadkeys. Unter Mac OS X ist das so einfach nicht möglich.

Mit Hilfe des Mac OS X Keyboard Layout Editor Ukelele kann man sich ein neues Tastaturlayout erstellen, welches über keinerlei tote Tasten mehr verfügt.

Ein Tastaturlayout für eine deutsche Tastatur ohne dead keys findet man als keyboardlayout bundle in Deutsch – NoDeadKeys.bundle.

Es gibt mehrere verschiedene Plätze, an denen man dieses Bundle installieren kann (Sollte das Verzeichnis nicht existieren, muss man es anlegen):

~/Library/Keyboard Layouts             -> Layout nur für den Benutzer verfügbar
/Library/Keyboard Layouts               -> Layout für alle Benutzer des Computers verfügbar
/Network/Library/Keyboard Layouts -> Layout für alle Benutzer im Netzwerk verfügbar

Ist das Bundle installiert, muss man sich einmal ab- und wieder anmelden. Danach findet man in den Systemeinstellungen Sprache & Text einen neuen Eintrag Deutsch – NoDeadKeys.

Ich habe in den Einstellungen beide Layouts und die Option Engabequellen in der Menüleiste anzeigen aktiviert und kann jetzt über die Landesfahne in der Menüleiste das Layout jederzeit schnell ändern.

Erweiterte Dateiattribute nicht kopieren

Kopiert man unter Mac OS Dateien, so kopieren sich die erweiterten Dateiattribute mit, auch wenn das Zieldateisystem diese nicht unterstützt. Die erweiterten Attribute werden dabei in Dateien festgehalten, denen ein ._ vorangestellt ist.

Meist kann dies sehr nützlich sein, allerdings nervt es in tar-Archiven oder auf MP3 Sticks.

Verhindern lässt sich dies im Terminal durch das setzten einer Umgebungsvariable:

COPYFILE_DISABLE=true

Vor Mac OS Leopard lautete die Variable

COPY_EXTENDED_ATTRIBUTES_DISABLED=true

was der Sache irgendwie näher kam.

ldd / strace unter Mac OS X

Für die Fehlersuche unter *NIX sind ldd und strace sehr nützlich um Abhängigkeiten von dynamischen Bibliotheken zu finden. Leider hatte ich ein Problem auf einem Mac OS X 10.6, wo es diese beiden Tools nicht gibt.

Nach einiger Suche (die meist nur ktrace als Alternative für Mac OS brachte) fand ich eine ganz brauchbare Alternative für beide Tools:

Um die Abhängigkeiten von dyn. Bibliotheken zu finden, kann man als Alternative zu ldd

otool -L <binary>

benutzen. Eine Alternative für strace ist

dtruss <binary>

brauchbar. Nachteil bei letzterem ist, dass es keine Möglichkeit gibt, die Ausgabe per Kommandozeilenoption in eine Datei umzuleiten. Statt dessen gibt dtruss die Informationen immer auf STDERR aus.

Die beiden Alternativen sind brauchbar (bzw. besser als nix), man vermisst aber bei dtruss doch schnell die Optionsvielfalt von strace (vor allem -ff und -o bei komplizierteren Pro{grammen,blemen}).