В двух словах: в первый раз, когда процесс пытается использовать соединение, если он терпит неудачу из-за отсутствия доступных соединений, этот единственный процесс никогда не восстановит возможность использовать сеть. Мне приходится убивать и перезапускать его.
У меня есть скрипт ruby, который пытается разрешить 'google.com' три раза. Если я отключу сеть (через NetworkManager) или выключу физический переключатель WLAN, запущу скрипт, позволю ему один раз дать сбой, а затем снова включу сеть, то два других разрешения также не дадут результата, хотя в остальной части системы есть сеть.
Аналогичный скрипт Python показывает те же результаты, как и браузер lynx. Но не Firefox! Все эти поведения проверены как на виртуальной машине, так и на физической машине с последней версией Manjaro x64 XFCE. На последней версии Ubuntu x64 те же тесты работают нормально.
Почему так происходит? Это баг, фича, причуда?
РЕДАКТИРОВАТЬ:
В Manjaro содержимое /etc/resolv.conf
восстанавливается с помощью resolvconf.
- Сеть включена:
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 запускает dnsmasq для 127.0.1.1, а Manjaro — нет.
решение1
На мой взгляд, есть два решения.
- Измените resolvconf.conf:
name_servers=192.168.1.1
или какие у вас самые распространенные серверы имен. Проблема: не все серверы имен похожи192.168.1.1
на мои. Если вы подключитесь к другой сети, ваш процесс останется сломанным, так как сервер имен192.168.1.1
в там может не существовать. - Позвольте NetworkManager настроить и использовать dnsmasqдобавив несколько строк в
NetworkManager.conf
Я попробовал оба, и симптом был предотвращен с любым из них. Второй кажется более чистым и его легче настроить, но он не такой легкий.