Скрипты для /etc/NetworkManager/dispatcher.d/ для обработки resolvconf -u

1980
Tino

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

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

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

Что мне нужно, это сценарии, для /etc/NetworkManager/dispatcher.d/которых правильно работать вместе с resolvconf.

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

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

Заметки:

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

В моем случае у меня dnsmasqVPN и многое другое, все возится с 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="$domain $IF_DNS_DOMAIN " fi if [ "$IF_DNS_SEARCH" ] ; then R="$search $IF_DNS_SEARCH " fi if [ "$IF_DNS_SORTLIST" ] ; then R="$sortlist $IF_DNS_SORTLIST " fi for NS in $IF_DNS_NAMESERVER $IF_DNS_NAMESERVERS ; do R="$nameserver $NS " done  echo -n "$R" | /sbin/resolvconf -a "$.$" || : 

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

-1
Похоже, эта проблема специфична для меня. Я добавлю ответ, когда найду решение, включая анализ первопричины возникновения проблемы. Однако я не знаю, сколько времени это займет, пока я не найду время для этого, поскольку у меня уже есть обходной путь (который был быстрым, далеко не правильным, но работающим решением). Tino 8 лет назад 0

1 ответ на вопрос

0
grawity

Сценарии? 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или оба.

Я имею в виду, что `/ etc / network / if-up.d / 000resolvconf` использует те переменные, которые поставляются с` resolvconf` Tino 8 лет назад 0
Нет, это не так. Это скрипт ifupdown, а не скрипт NetworkManager, и он ожидает переменные, которые ifupdown будет экспортировать. Но так как Debian хочет запускать сценарии ifupdown из NM, это зависит от `dispatcher.d / 01ifupdown`, чтобы правильно преобразовать среду из переменных NM в переменные ifupdown. grawity 8 лет назад 0
видимо нет такого перевода. Я добавлю сценарий к моему вопросу выше. Tino 8 лет назад 0
Тогда, возможно, ваш лучший вариант - отключить / удалить `if-up.d / 000resolvconf` и использовать встроенную поддержку resolvconf в NM? Я вижу, что Debian включает его во время сборки, не уверенный в других дистрибутивах. grawity 8 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/35813/discussion-between-tino-and-grawity). Tino 8 лет назад 0

Похожие вопросы