Skrypty do /etc/NetworkManager/dispatcher.d/ do obsługi resolvconf -u

-1

Istnieją dwa sposoby networkmanager:

  • aktualizacja /etc/resolv.conf
  • nie Aktualizuj /etc/resolv.conf w ogóle

Oba rozwiązania nie są odpowiednie po mojej stronie, ponieważ po mojej stronie potrzebuję /etc/resolv.conf do obsługi przez resolvconftak, że można go zregenerować w dowolnym momencie resolvconf -u.

Potrzebowałbym skryptów /etc/NetworkManager/dispatcher.d/ które poprawnie współpracują z resolvconf.

Nie udało mi się jednak znaleźć odpowiednich skryptów do tego, co moim zdaniem jest dość podstawowym standardowym przypadkiem.

Czy jest w tym celu jakieś standardowe rozwiązanie (proszę podać tutaj zasadniczą część skryptów), czy też wszyscy naprawdę muszą wymyślać koło za każdym razem?

Uwagi:

Najwyraźniej jest coś, ale to nie działa poprawnie.

W moim przypadku mam dnsmasq, VPN i więcej, wszystkie bawią się DNS.

jednak resolvconf -u nie regeneruje się /etc/resolv.conf poprawnie, więc domyślnie brakuje czegoś.

Aby być bardziej rozbudowanym:

  • /etc/NetworkManager/dispatcher.d/01ifupdown połączenia run-parts /etc/network/if-up.d
  • /etc/network/if-up.d/000resolvconf następnie sprawdza $IF_DNS_NAMESERVER i $IF_DNS_NAMESERVERS ale networkmanager nie dostarcza tych i zestawów IP4_NAMESERVERS zamiast tego (zgodnie z instrukcją)

Stąd gdzieś jest brakujące ogniwo. Oto kopia tego, co znajduje się w /etc/NetworkManager/dispatcher.d/01ifupdown:

#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs ifupdown scripts when NetworkManager fiddles with interfaces.
# See NetworkManager(8) for further documentation of the dispatcher events.

if [ -z "$1" ]; then
    echo "$0: called with no interface" 1>&2
    exit 1;
fi

# Fake ifupdown environment
export IFACE="$1"
export LOGICAL="$1"
export ADDRFAM="NetworkManager"
export METHOD="NetworkManager"
export VERBOSITY="0"

# Run the right scripts
case "$2" in
    up|vpn-up)
    export MODE="start"
    export PHASE="post-up"
    exec run-parts /etc/network/if-up.d
    ;;
    down|vpn-down)
    export MODE="stop"
    export PHASE="post-down"
    exec run-parts /etc/network/if-post-down.d
    ;;
# pre-up/pre-down not implemented. See
# https://bugzilla.gnome.org/show_bug.cgi?id=387832
#    pre-up)
#   export MODE="start"
#   export PHASE="pre-up"
#   exec run-parts /etc/network/if-pre-up.d
#   ;;
#    pre-down)
#   export MODE="stop"
#   export PHASE="pre-down"
#   exec run-parts /etc/network/if-down.d
#   ;;
    hostname|dhcp4-change|dhcp6-change)
        # Do nothing
    ;;
    *)
    echo "$0: called with unknown action \`$2'" 1>&2
    exit 1
    ;;
esac

Oto, co znajduje się w /etc/network/if-up.d/000resolvconf

#!/bin/sh
#
# ifup hook script for resolvconf
#
# This file is part of the resolvconf package.
#

[ -x /sbin/resolvconf ] || exit 0

case "$ADDRFAM" in
  inet|inet6) : ;;
  *) exit 0 ;;
esac

R=""
if [ "$IF_DNS_DOMAIN" ] ; then
    R="${R}domain $IF_DNS_DOMAIN
"
fi
if [ "$IF_DNS_SEARCH" ] ; then
    R="${R}search $IF_DNS_SEARCH
"
fi
if [ "$IF_DNS_SORTLIST" ] ; then
    R="${R}sortlist $IF_DNS_SORTLIST
"
fi
for NS in $IF_DNS_NAMESERVER $IF_DNS_NAMESERVERS ; do
    R="${R}nameserver $NS
"
done

echo -n "$R" | /sbin/resolvconf -a "${IFACE}.${ADDRFAM}" || :

FYI to z Ubuntu 14.04

Tino
źródło
Wygląda na to, że ten problem jest dla mnie specyficzny. Dodam odpowiedź, gdy znajdę rozwiązanie tego problemu, w tym analizę przyczyn źródłowych, skąd pochodzi problem. Nie wiem jednak, jak długo to potrwa, zanim znajdę na to czas, ponieważ mam już obejście problemu (które było szybkie, dalekie od poprawnego, ale działającego rozwiązania).
Tino

Odpowiedzi:

0

Skrypty? NetworkManager obsługuje natywną / bin / resolvconf od 2008 r. ( wersja 0.7.0 ). Twoja dystrybucja musi włączyć ją w czasie kompilacji przy użyciu ./configure --with-resolvconf=… ( na przykład ). Nie ma potrzeby stosowania oddzielnych skryptów dispatcher.d - masz tylko kilka efektów ubocznych swojej dystrybucji próbujących zintegrować NM z ifupdown.

Jeśli to nie działa, sprawdź, czy twój NetworkManager.conf wspomina strona podręcznika dns i rc-manager ustawienia (różnią się w zależności od wersji). Normalnie resolvconf działa domyślnie, ale może być konieczne ręczne ustawienie dns=default lub rc-manager=resolvconf lub obie.

grawity
źródło
mam na myśli /etc/network/if-up.d/000resolvconf używa tych zmiennych, które pochodzą z resolvconf
Tino
Nie, nie ma. To skrypt ifupdown, a nie skrypt NetworkManager, i oczekuje zmiennych, które eksportowałby ifupdown. Ale ponieważ Debian chce uruchamiać skrypty ifupdown z NM, wszystko zależy od tego dispatcher.d/01ifupdown aby poprawnie przetłumaczyć środowisko ze zmiennych NM na zmienne ifupdown.
grawity
najwyraźniej nie ma takiego tłumaczenia. Dodam skrypt do mojego pytania powyżej.
Tino
Więc może najlepszym rozwiązaniem jest wyłączenie / usunięcie if-up.d/000resolvconf i użyć wbudowanej obsługi NM w resolvconf? Widzę, że Debian włącza go w czasie kompilacji, nie będąc pewnym innych dystrybucji.
grawity