-1

Есть два способа для networkmanager:

  • обновить /etc/resolv.conf
  • вообще не обновляйте /etc/resolv.conf

Оба решения не подходят на моей стороне, так как на моей стороне мне требуется /etc/resolv.conf для обработки resolvconf , так что он может быть восстановлен в любое время с resolvconf -u .

Мне нужны скрипты для /etc/NetworkManager/dispatcher.d/ которые корректно работают вместе с resolvconf .

Однако я не смог найти подходящих сценариев для того, что, на мой взгляд, является довольно простым стандартным случаем.

Так есть ли какое-то стандартное решение для этого (пожалуйста, предоставьте основную часть сценариев здесь) или каждый действительно должен заново изобретать колесо?

Заметки:

Там, по-видимому, что-то есть, но это, кажется, не работает правильно.

В моем случае у меня есть dnsmasq , VPN и многое другое, все возится с DNS.

Однако resolvconf -u не восстанавливает /etc/resolv.conf правильно, поэтому в настройках по умолчанию чего-то не хватает.

Чтобы быть более сложным:

  • /etc/NetworkManager/dispatcher.d/01ifupdown вызывает run-parts /etc/network/if-up.d
  • /etc/network/if-up.d/000resolvconf затем проверяет $IF_DNS_NAMESERVER и $IF_DNS_NAMESERVERS но networkmanager не предоставляет их и вместо этого устанавливает IP4_NAMESERVERS (согласно руководству)

Отсюда и где-то недостающее звено. Вот копия того, что находится в /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

Вот что находится в /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}" || :

К вашему сведению, это из Ubuntu 14.04

1 ответ1

0

Сценарии? NetworkManager имеет собственную поддержку /bin /resolvconf с 2008 года (версия 0.7.0). Ваш дистрибутив должен включить его во время компиляции, используя ./configure --with-resolvconf=… (например). Здесь нет необходимости в отдельных сценариях dispatcher.d - у вас есть побочный эффект в том, что ваш дистрибутив пытается интегрировать NM с ifupdown.

Если это не работает для вас, проверьте, упоминает ли ваша страница руководства NetworkManager.conf настройки dns и rc-manager (они различаются в зависимости от версии). Обычно resolvconf работает по умолчанию, но может потребоваться вручную установить dns=default или rc-manager=resolvconf или оба.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .