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


92

/etc/network/interfaces以下に非常に類似したもので更新した後、どのよう/etc/resolv.confに更新しますか?私は(rootで)試してみました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


resolv.confで何ができなかったのですか?
キングミロ

回答:


106

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

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

データベースを更新するには、-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)を参照してください。


「「サービスネットワーキングの再起動」をしないでください。これは、すべてのインターフェイスをダウンアップする信頼できる方法ではありません。」私にとってはうまくいきます。しかし、それを行うクリーンな方法を知っているのは良いことです。
アキ

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

これは、;で区切られた1行である必要があることに注意してください。(Linuxコマンドラインセパレータ)。現在の接続を失うこともありません。例外は、interfacesファイルにタイプミスをすることです。これが発生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で再生成されませんでした
Jossef Harush

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

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

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 にパイプします。これがどのように行われるかを知りたい場合は、コマンドの最初の部分を実行し、/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

簡単な答え:

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

その後、の行に従って ifup eth0、のDNSを更新します。etc/resolv.confdns-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
このコマンドが機能する理由を説明できますか?
αғsнιη

1
行に複数のネームサーバーIPがある場合、これは正しく機能しませんdns-nameserver IP1 IP2。その後、行はで繰り返される必要がありますが、繰り返されresolv.confません。
ティノ

さらに、/etc/network/interfacesuses dns-nameserverss最後に注意)whileをresolvconf使用しnameserverます。コマンドはそれを処理しません。そして、すべてが正しくても、パイプラインはsed | grep | sed間違いなく最も効率的な方法ではありません。
メレビウス16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.