Как мне заставить resolvconf восстановить resolv.conf после изменения /etc/network/interfaces?

service networking restart это не всегда надежный способ понижения уровня всех интерфейсов.

То resolvconf -u команда обновляет только resolv.conf из собственной базы данных resolvconf. Вам необходимо обновить базу данных.

Чтобы обновить базу данных, вы должны вызвать resolvconf с помощью -a или -d вариант. Это происходит за кулисами, когда вы запускаете ifup или ifdown. Таким образом, обычно, как и при любом другом изменении в /etc/network/interfaces, чтобы активировать изменения в параметрах dns-*, вы должны отключить соответствующий интерфейс и снова включить его. Или вы можете перезагрузиться.

Если вы хотите внести изменения в интерфейс, не отключая его (возможно, потому, что вы удаленно администрируете компьютер и подключены через этот интерфейс, естественно), то вы можете добиться того же результата, запустив resolvconf непосредственно из командной строки. Для этого требуется немного больше знаний о семантике resolvconf. Предположим, что соответствующая строфа /e/n/i является

iface IIII FFFF static    address ...    ...    dns-nameservers X.X.X.X Y.Y.Y.Y    dns-search SSSS

где FFFF - это семейство адресов ("inet" или "inet6").

Чтобы активировать эти параметры dns-*, вы запускаете resolvconf следующим образом (да, с новыми строками в строке, передаваемой в resolvconf).

echo "nameserver X.X.X.Xnameserver Y.Y.Y.Ysearch SSSS" | sudo resolvconf -a IIII.FFFF

Для строфы, приведенной в вопросе, это было бы следующим.

echo "nameserver 192.168.3.45nameserver 192.168.8.10search example.com" | sudo resolvconf -a eth0.inet

Обратитесь к странице руководства resolvconf(8) и файлу README пакета resolvconf (/usr/share/doc/resolvconf/README.gz ) для получения дополнительной информации.