web-dev-qa-db-ja.com

/ etc / network / interfacesを変更した後にresolvconfを取得してresolv.confを再生成するにはどうすればよいですか?

/etc/network/interfacesを以下と非常に類似したもので更新した後、/etc/resolv.confを更新するにはどうすればよいですか? (ルートとして)resolver -uservice 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
90
nslntmnx

service networking restartは、必ずしもすべてのインターフェースをダウンアップする信頼できる方法ではありません。

resolvconf -uコマンドは、resolvconf自身のデータベースからresolv.confのみを更新します。データベースを更新する必要があります。

データベースを更新するには、-aまたは-dオプションを指定してresolvconfを呼び出す必要があります。 ifupまたはifdownを実行すると、バックグラウンドで発生します。そのため、通常、/etc/network/interfacesへの他の変更と同様に、dns- *オプションへの変更を有効にするには、問題のインターフェースをifdownし、再度ifupする必要があります。または、再起動できます。

Ifdownuppingせずにインターフェイスを変更したい場合(おそらく、マシンをリモートで管理していて、そのインターフェイスを介して接続しているため、natch)、コマンドラインから直接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.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

詳細については、resolvconf(8)のマニュアルページとresolvconfパッケージREADMEファイル(/usr/share/doc/resolvconf/README.gz)を参照してください。

106
jdthood

マンページはデフォルトではインストールされませんが、更新スクリプトオプションを介して文書化されていますが、次を実行するだけです:

Sudo resolvconf -u
23
user267617

サーバーをリモートで管理するユーザーは、次のことができます。

  1. dns-nameservers/etc/network/interfaces行を更新します
  2. # ifdown eth01; ifup eth01

これは、;で区切られた1行である必要があることに注意してください。 (Linuxコマンドラインセパレータ)。現在の接続を失うこともありません。例外は、interfacesファイルにタイプミスをすることです。これが発生すると、ifupは失敗し、物理アクセスまたは別のethxx接続が必要になります。

5
sparky

service resolvconf restartは、大騒ぎせずに/etc/resolv.confファイルを再生成します。

2
Kamran

18.04では、以下が確実に機能します(rootとして実行):

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

重要:パッケージresolvconfがインストールされていることを確認してください。
これはデフォルトではないようで、それなしでは/etc/network/interfacesからのいくつかの(!)変更は黙って無視されます(例:dns-*)。

1
Raphael

簡単な答え:

Resolvconfをインストールするだけです。 apt install resolvconf

その後、ifup eth0etc/resolv.conf行に従って、dns-nameservers/etc/network/interfacesのDNSを更新します。

1
trogne

この回答は上記の回答と似ていますが、質問の構成例を使用して質問に回答します。さらに、これは両方のコマンドが必要な理由を説明しています。

編集/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

これらの変更は、構成ファイルをリブートまたは再ロードしない限り行われません。

Interfacesファイルをライブで更新するには、次のコマンドを実行する必要があります。

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にパイプすることにより、実際には最後のコマンドの代わりに機能します。インラインsed解析。これがどのように行われるかを確認するには、コマンドの最初の部分を実行し、/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
1
user3199107

Ubuntuバージョン18.04のデスクトップバージョンでは、networkingサービスがなく、resolvconfがデフォルトでインストールされていないため、resolv.confを再起動することでnetwork-managerを再生成できました

Sudo service network-manager restart
0
Ruslan

これは私のために働いた:

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
jbgeek