ネットワーク接続なしで開始されたプロセスは、永久にネットワークを使用できなくなります。

ネットワーク接続なしで開始されたプロセスは、永久にネットワークを使用できなくなります。

簡単に言うと、プロセスが初めて接続を使用しようとしたときに、接続が利用できないために失敗した場合、そのプロセスはネットワークを使用する能力を回復することはできません。そのプロセスを強制終了して再起動する必要があります。

'google.com' を 3 回解決しようとする Ruby スクリプトがあります。NetworkManager 経由でネットワークを無効にするか、物理的な WLAN スイッチをオフにしてスクリプトを起動し、一度失敗させてからネットワークを再度有効にすると、システムの残りの部分にネットワークがあっても、他の 2 つの解決も失敗します。

同様の Python スクリプトでも、ブラウザ Lynx でも同じ結果が示されます。ただし、Firefox ではありません。これらの動作はすべて、最新の Manjaro x64 XFCE を実行している VM と物理マシンの両方でテストされています。最新の Ubuntu x64 では、同じテストが正常に機能します。

なぜこのようなことが起こるのでしょうか? これはバグ、機能、または不具合でしょうか?

編集:

Manjaro では、 の内容は/etc/resolv.confresolvconf によって再生成されます。

  • ネットワークが有効:search lan; nameserver 192.168.1.1
  • ネットワークが無効です: ファイルが空です

Ruby/Python/Lynx はresolv.conf一度だけ読み取る必要があります。そのため、最初のリクエストでは空のファイルが見つかり、それ以降は名前を解決できなくなります。

Ubuntuでは、次のようになります/etc/resolv.conf

  • ネットワークが有効:nameserver 127.0.1.1; search lan
  • ネットワークが無効です:nameserver 127.0.1.1

そのため、Ruby/Python/Lynx が無効なネットワーク上でそれを読み取る場合、接続が回復したときに接続できるネームサーバーがまだあります。Manjaro の設定の問題は、接続がないとネームサーバーがないことです。Ubuntu は 127.0.1.1 に対して dnsmasq を実行しますが、Manjaro は実行しません。

答え1

私の見解では、解決策は 2 つあります。

  1. resolvconf.conf を編集します:name_servers=192.168.1.1または、最も一般的なネームサーバーを編集します。問題: すべてのネームサーバーが私のものと同じではありません。別のネットワークに接続すると、ネームサーバーがそこに存在しない可能性がある192.168.1.1ため、プロセスは壊れたままになります。192.168.1.1
  2. NetworkManager で dnsmasq を設定して使用する数行追加することでNetworkManager.conf

両方試してみましたが、どちらでも症状は回避できました。2 番目の方法の方がすっきりしていてセットアップも簡単ですが、それほど軽量ではありません。

関連情報