/etc/network/interfaces
を以下と非常に類似したもので更新した後、/etc/resolv.conf
を更新するにはどうすればよいですか? (ルートとして)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
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)を参照してください。
マンページはデフォルトではインストールされませんが、更新スクリプトオプションを介して文書化されていますが、次を実行するだけです:
Sudo resolvconf -u
サーバーをリモートで管理するユーザーは、次のことができます。
dns-nameservers
の/etc/network/interfaces
行を更新します# ifdown eth01; ifup eth01
これは、;で区切られた1行である必要があることに注意してください。 (Linuxコマンドラインセパレータ)。現在の接続を失うこともありません。例外は、interfacesファイルにタイプミスをすることです。これが発生すると、ifup
は失敗し、物理アクセスまたは別のethxx
接続が必要になります。
service resolvconf restart
は、大騒ぎせずに/etc/resolv.conf
ファイルを再生成します。
18.04では、以下が確実に機能します(rootとして実行):
systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking
重要:パッケージresolvconf
がインストールされていることを確認してください。
これはデフォルトではないようで、それなしでは/etc/network/interfaces
からのいくつかの(!)変更は黙って無視されます(例:dns-*
)。
簡単な答え:
Resolvconfをインストールするだけです。 apt install resolvconf
その後、ifup eth0
のetc/resolv.conf
行に従って、dns-nameservers
が/etc/network/interfaces
のDNSを更新します。
この回答は上記の回答と似ていますが、質問の構成例を使用して質問に回答します。さらに、これは両方のコマンドが必要な理由を説明しています。
編集/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
Ubuntuバージョン18.04のデスクトップバージョンでは、networking
サービスがなく、resolvconf
がデフォルトでインストールされていないため、resolv.conf
を再起動することでnetwork-manager
を再生成できました
Sudo service network-manager restart
これは私のために働いた:
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
それに応じて調整します。