Kurz gesagt: Wenn ein Prozess beim ersten Versuch, eine Verbindung zu verwenden, fehlschlägt, weil keine Verbindungen verfügbar sind, kann dieser einzelne Prozess das Netzwerk nie wieder verwenden. Ich muss ihn beenden und neu starten.
Ich habe ein Ruby-Skript, das dreimal versucht, „google.com“ aufzulösen. Wenn ich die Netzwerkverbindung deaktiviere (über NetworkManager) oder meinen physischen WLAN-Schalter ausschalte, das Skript starte, es einmal fehlschlagen lasse und dann die Netzwerkverbindung wieder aktiviere, schlagen auch die anderen beiden Auflösungen fehl, obwohl der Rest des Systems über eine Netzwerkverbindung verfügt.
Ein ähnliches Python-Skript zeigt dieselben Ergebnisse, ebenso wie der Browser Lynx. Allerdings nicht Firefox! Diese Verhaltensweisen werden alle sowohl auf einer VM als auch auf einer physischen Maschine getestet, auf der das neueste Manjaro x64 XFCE läuft. Auf dem neuesten Ubuntu x64 funktionieren dieselben Tests einwandfrei.
Warum passiert das? Ist das ein Fehler, eine Funktion oder eine Eigenart?
BEARBEITEN:
Unter Manjaro wird der Inhalt /etc/resolv.conf
durch resolvconf neu generiert.
- Netzwerk aktiviert:
search lan; nameserver 192.168.1.1
- Netzwerk deaktiviert: leere Datei
Ruby/Python/Lynx dürfen nur resolv.conf
einmal lesen. Daher findet es bei der ersten Anforderung die leere Datei und kann nie wieder Namen auflösen.
Und unter Ubuntu /etc/resolv.conf
:
- Netzwerk aktiviert:
nameserver 127.0.1.1; search lan
- Netzwerk deaktiviert:
nameserver 127.0.1.1
Wenn Ruby/Python/Lynx es also in einem deaktivierten Netzwerk lesen, haben sie immer noch einen Nameserver, den sie kontaktieren können, wenn die Verbindung wiederhergestellt wird. Das Problem mit Manjaros Setup ist, dass es ohne Verbindung keine Nameserver gibt. Ubuntu führt dnsmasq für 127.0.1.1 aus, Manjaro nicht.
Antwort1
So wie ich das sehe, gibt es zwei Lösungen.
- Bearbeiten Sie resolvconf.conf:
name_servers=192.168.1.1
oder was auch immer Ihre häufigsten Nameserver sind. Problem: Nicht jeder Nameserver ist192.168.1.1
wie meiner. Wenn Sie sich mit einem anderen Netzwerk verbinden, bleibt Ihr Prozess unterbrochen, da192.168.1.1
dort möglicherweise kein Nameserver vorhanden ist. - Lassen Sie NetworkManager dnsmasq einrichten und verwendendurch Hinzufügen einiger Zeilen zu
NetworkManager.conf
Ich habe beides ausprobiert und mit beiden wurde das Symptom vermieden. Die zweite scheint sauberer und einfacher einzurichten, ist aber nicht so leicht.