Prozesse, die ohne Netzwerkverbindung gestartet werden, können diese dauerhaft nicht nutzen

Prozesse, die ohne Netzwerkverbindung gestartet werden, können diese dauerhaft nicht nutzen

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.confdurch resolvconf neu generiert.

  • Netzwerk aktiviert:search lan; nameserver 192.168.1.1
  • Netzwerk deaktiviert: leere Datei

Ruby/Python/Lynx dürfen nur resolv.confeinmal 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.

  1. Bearbeiten Sie resolvconf.conf: name_servers=192.168.1.1oder was auch immer Ihre häufigsten Nameserver sind. Problem: Nicht jeder Nameserver ist 192.168.1.1wie meiner. Wenn Sie sich mit einem anderen Netzwerk verbinden, bleibt Ihr Prozess unterbrochen, da 192.168.1.1dort möglicherweise kein Nameserver vorhanden ist.
  2. Lassen Sie NetworkManager dnsmasq einrichten und verwendendurch Hinzufügen einiger Zeilen zuNetworkManager.conf

Ich habe beides ausprobiert und mit beiden wurde das Symptom vermieden. Die zweite scheint sauberer und einfacher einzurichten, ist aber nicht so leicht.

verwandte Informationen