Як мені отримати Reslavconcon для відновлення reslav.conf після зміни / etc / network / інтерфейсів?


92

Після оновлення /etc/network/interfacesчимось дуже схожим на наведене нижче, як мені отримати /etc/resolv.confоновлення? Я спробував (як root) resolver -u, service networking restartале вони не спрацювали. Я також виправив симпосилання resolv.confі спробував resolver -uще раз. Нарешті, розчарувавшись, я перезавантажився, що вирішив проблему шляхом відновлення /etc/resolv.conf.

Ubuntu 12.04, 64-бітний сервер, усі найновіші встановлені патчі.

Приклад /etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10


Що ви намагалися зробити, щоб резолюція.conf заважала вам робити це?
kingmilo

Відповіді:


106

service networking restart не завжди є надійним способом оновлення всіх інтерфейсів.

resolvconf -uКоманда оновлює resolv.confз власної бази даних Resolvconf в. Потрібно оновити базу даних.

Щоб оновити базу даних, вам потрібно зателефонувати на резолюцію Reslavconf -aабо -d. Це відбувається за лаштунками, коли ви запускаєте ifup чи ifdown. Таким чином, як правило, як і будь-яка інша зміна /etc/network/interfaces, щоб активувати зміни в параметрах dns- *, вам доведеться перезапустити відповідний інтерфейс і повторно встановити його. Або ви можете перезавантажити.

Якщо ви хочете внести зміни в інтерфейс, не змінюючи його, можливо, через те, що ви віддалено керуєте машиною і підключаєтесь через цей інтерфейс, natch), ви можете домогтися того ж результату, запустивши Resolconf безпосередньо з командного рядка. Для цього потрібно трохи більше знання семантики резолювконфа. Припустимо, відповідна / 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- *, запустіть resoluvconf наступним чином (так, з новими рядками в рядку, перекладеному на резольконф).

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

Для строфи, наведеної у питанні, це було б наступне.

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

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


"Не робіть" перезапуск сервісної мережі "; це не надійний спосіб оновлення всіх інтерфейсів." Добре працює для мене. Хоча добре знати чистий спосіб робити це, хоча.
Акі

11
Якщо ви не повинні робити "перезапуск сервісної мережі", чи можу я запропонувати вам не ставити її в перший рядок цього питання? Коли ми поспішали шукати рішення, перше, що я зробив, - скопіювати та вставити першу, яку я побачив.
Робін Уінслоу

4
@RobinWinslow +1 за те, щоб зробити мій день
Піт

8
Ця відповідь від самої людини, яка розвинулася resolvconf :)
heemayl

2
Щоб перезапустити / перечитати /etc/network/interfaces, ви можете зробити це ifdown eth0 && ifup eth0:; він працює навіть у віддаленому сеансі ssh.
П’єр-Дамієн


5

Для тих, хто керує серверами віддалено, ви можете:

  1. оновити dns-nameserversрядок в/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Зауважте, що це повинно бути в одному рядку, розділеному на; (роздільник командного рядка Linux). Ви навіть не повинні втрачати поточний зв’язок. Виняток - введення помилки у файл інтерфейсів. Якщо цього ifupне вдасться, вам доведеться мати фізичний доступ або інше ethxxз'єднання.


2

service resolvconf restartвідновить /etc/resolv.confфайл без особливої ​​суєти.


2
Я отримуюFailed to restart resolvconf.service: Unit resolvconf.service not found.
Mobigital

Команда виконана, але не відтворена /etc/resolv.confна сервері ubuntu 14.04
Джозеф Харуш

1

Ця відповідь аналогічна наведеній вище, але використовує конфігурацію прикладів питань, щоб відповісти на питання. Плюс це пояснює, чому необхідні обидві команди.

Редагувати /etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

Ці зміни не відбудуться, якщо ви не перезавантажите або не перезавантажте файл конфігурації:

Для того, щоб оновити файл інтерфейсів у прямому ефірі, необхідно виконати таку команду:

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

Це дозволяє оновити інтерфейс без перезавантаження або перезавантаження.

Однак вищезазначені зміни команди будуть втрачені після перезавантаження, якщо зміни в команді не будуть /etc/network/interfacesвнесені.

До речі, остання відповідь BDenis у цьому списку насправді працює замість останньої команди, розбираючи /etc/network/interfacesфайл та передаючи ці рядки в команду. sudo resolvconf -a eth0 Це насправді половина відповіді та справді хороший приклад вбудованого синтаксичного розбору. Якщо ви хочете побачити, як це робиться, просто запустіть першу частину команди і перегляньте, як вона розбере /etc/network/interfacesфайл і виплюне всю необхідну інформацію, необхідну для запуску sudo resolvconf -a eth0команди:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Зверніть увагу, це випустить те саме, що і команда:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

За умови налаштування /etc/network/interfacesфайлу з цією інформацією:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10

На жаль, це не можна використовувати. Моїм інтерфейсом керує менеджер мережі та DHCP, тому додавання його до /etc/network/interfacesне є допустимим варіантом у такому випадку. (Ubuntu 14.04)
Тіно

1

Проста відповідь:

Просто встановіть резолюціюconf. apt install resolvconf

Після цього ifup eth0оновлює dns в etc/resolv.conf, відповідно до dns-nameserversрядка в /etc/network/interfaces.


невідомий інтерфейс. Усі справді знають, як тут приховати деталі ... Я думаю, що ми повинні прагнути скласти всі команди. Повний сценарій для кожної, без прози.
mathtick

1

18.04 наступне працює надійно (запускається як root):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Важливо: Переконайтеся, що у вас встановлений пакет resolvconf.
Це за замовчуванням не здається, і без нього деякі (!) Зміни з /etc/network/interfacesмовчки ігноруються (наприклад dns-*).


0

Це працювало для мене:

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

Відповідно відрегулюйте.


0

У настільній версії Ubuntu 18.04, де немає сервісу networkingта resolvconfне встановлено за замовчуванням, мені вдалося відновити resolv.confшляхом перезавантаження network-manager:

sudo service network-manager restart

-3

Також ви можете спробувати цю команду:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet

3
Чи можете ви пояснити, чому ця команда повинна працювати?
αғsnιη

1
Це не працює належним чином, якщо у вас є декілька IP серверів імен у рядку dns-nameserver IP1 IP2. Після цього рядок потрібно повторити resolv.conf, але це не так.
Тіно

Більше того, /etc/network/interfacesвикористовує dns-nameservers(помічайте sв кінці) при resolvconfвикористанні nameserver. Команда не займається цим. І навіть якби все було правильно, трубопровід, sed | grep | sedбезумовно, не був би найефективнішим способом.
Мелебій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.