Скрипты для /etc/NetworkManager/dispatcher.d/ для обработки resolvconf -u
Есть два способа 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 ответ
Сценарии? 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
или оба.