resolv.confに、再起動時に失われない行を含めるにはどうすればよいですか?


173

最終的に7.10から12.04に移行しました。最後の部分がありますが、困惑しています。各サーバーでPuppetを使用していますが、過去にresolv.confにpuppetmasterのネームサーバーアドレスと検索ドメイン名を含めました。

search puppetmaster.com
nameserver 192.168.1.XXX

12.04では、resolv.confは再起動時に上書きされます。これらに静的IPを使用することはできないため、/ etc / network / interfacesを使用して支援することは無意味です。

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

これをヘッド、テール、またはベースで処理するためにresolvconfを取得する方法はありますか?ある場合、サーバーで調整するために使用できる例はありますか。

どんな助けも大歓迎です。


2
resolvconfは悪いソフトウェアです。削除するだけで、古い方法で/etc/resolv.confを管理できます。
ブロンズマン

回答:


134

DNSサーバーが「パペット」を正しいアドレスに解決できるようにし、DHCPサーバーがDNSネームサーバーアドレスと検索リストを配布するようにするか、(静的IPアドレスがある場合)次のようなものにすることをお勧めします/ 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

ただし、resolvconf構成ファイルを使用して編集する場合は、編集する必要があります/etc/resolvconf/resolv.conf.d/base。そのファイルに、のように情報を入力しますresolv.conf

nameserver 192.168.1.XXX

次に、resolvconfにregenerateを指示しresolv.confます。

sudo resolvconf -u

13
この答えには投票があり、最初の部分は多少正しいですが、答えの2番目の部分は間違っています。(1)/etc/resolvconf/resolv.conf.d/headに「検索」行を入れないでください。そこに「検索」行を配置した場合、resolvconfの動的部分にresolvconfに「検索」行が含まれていると、この行は無視されます。glibcリゾルバは、最後の「検索」または「ドメイン」行を除くすべてを無視します。resolv.conf(5)を参照してください。(2)resolvconfの構成が変更された場合、resolvconfジョブを再起動せずに、単に更新 "resolvconf -u"を実行する必要があります。
jdthood

1
行を削除しました。他のオプションは、頭の代わりに尾を使用することです。
tgm4883

6
@tishma:こんにちは。まず、誤解を防ぐために、ベース、ヘッド、またはテールファイルには何も書き込まれません。実行時に/etc/resolvconf/resolv.conf.d/のファイルには何も書き込まれません。これらのファイルはresolvconfによって読み取られます。resolvconfは、内容を書き込みファイルに組み立てます--- /run/resolvconf/resolv.conf ---シンボリックリンク/etc/resolv.confが指します。第二に、/ etc / network / interfacesのdns- *オプションが変更された後の処理について。「/etc/init.d/networking restart」を実行しないでください。現在は廃止されています。代わりに、問題のインターフェースをifdownし、再度ifupします。
jdthood

4
14.04では、この答えは私にとって何の役にも立ちませんでした。
ジェイサリバン14年

2
他のすべてが失敗した場合。
–MSpreij

35

答えはをチェックすることだと思います/etc/dhcp/dhclient.conf。つまりdns-nameserversdhcpクライアントからリクエストしないでください。

その後、更新します /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

その後、あなたresolv.confが望むように自動設定されます。

に追加してdns-searchからaを実行します/etc/init.d/networking restart (このスクリプトは非推奨ですが、まだ機能します)。


5
dhclientはresolvconfの設定を支配するため、これが最良の答えです。
アレックスR

6
/etc/init.d/networking restart私のマシンでは動作しませんでしたがsudo ifdown -a、その後動作sudo ifup -aしました。(また、dnsserverip次のようなものに置き換える必要があることに気付くのに少し時間がかかりました8.8.8.8。少しばかげていると感じます。)
ジェイソングロス

トライsystemctl restart networking.service
パベルSayekat

20

これは、最初にUbuntuをインストールしたときのDHCP構成が原因である可能性があります。この自動構成の問題を処理するには、この3ステップのプロセスを試してください。

最初

次の場所にあるインターフェイス構成を編集します。 /etc/network/interfaces

以下にこの行を追加しますiface lo inet loopback

dns-nameservers yourdns youraltdns

Google DNSの例として、これを使用できます。

dns-nameservers 8.8.8.8 8.8.4.4

第二

次の場所にあるDHCP構成ファイルを編集します。

/etc/dhcp/dhclient.conf

#すべての行で構文をコメントとしてマークするか、すべてのリクエストネームサーバーを削除します。16.04では、ここで変更を行う必要はありません。

三番

次のコマンドを使用して、ネットワークを再起動します。

/etc/init.d/networking restart

16.04で:

sudo ifdown -a
sudo ifup -a

3
/etc/init.d/networking restart私のマシンでは動作しませんでしたがsudo ifdown -a、その後動作sudo ifup -aしました。
ジェイソングロス

これは簡単で、少しハッキングされていても機能します!ubuntuのようなものの問題は、1つのことを1000の方法で行うことです!
ウィラオンワナ16

そして、/ etc / resolv.confに最初の有用な行にこれらの2つの新しいDNSエントリが含まれていることを確認できます。
ROMANIA_engineer 16

8

見てくださいresolvconfのマニュアルページを参照してください。たとえば、/etc/resolvconf/resolv.conf.d/base次を作成することにより、特定のDNS設定を強制的に含めることができます。

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

他の特別なファイル(頭と尾)があり、これらはあなたが望むものを達成するのを助けるかもしれません。


4
/etc/resolvconf/resolv.conf.d/baseに行を追加できますが、すべてのネームサーバーはインターフェースを介してアクセス可能であり、そのインターフェースが起動している場合にのみアクセスできるため、ネームサーバー情報をそのインターフェースに関連付けるのが最善です。インターフェースがifupで構成されている場合、これは、/ etc / network / interfacesスタンザの「dns-search」および「dns-nameservers」行に情報を配置することを意味します。インターフェイスがDHCP経由で構成されている場合、これは次のことを意味します。クライアントに検索名とネームサーバーアドレスを提供するようにDHCPサーバーを構成します。等。「ベース」ファイルは一時的なハックまたは最後の手段としてのみ使用してください。
-jdthood

うん。/etc/resolvconf/resolv.conf.d/baseに「nameserver 1.2.3.4」を追加しました
Bastion

8

他の多くの回答が述べているように、これはresolvconfシステムにインストールされることに関係しています。

したがって、resolv.conf再起動時に失われないものを保持する最良の方法は、次の場所にあるresolvconf構成ファイルに含めることです。

/etc/resolvconf/resolv.conf.d/

そこにheadファイルがあります。あなたがそこに置くものは何でも、の上部に書かれます/etc/resolv.conf

そのため、すべてが次のようになります。

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

これが実際の正解です!最後に!
user77232

6

私にとって、上記の答えは次の理由で不十分でした:

  • 私は使用していませんresolvconf、ただ単純/etc/resolv.confです。
  • chattr +iロックダウンに使用するのresolv.confはあまりにもハッキングのようです。必要なときにPuppetが自由に変更できるようにする必要があります。
  • 知ってのとおり、編集/etc/network/interfacesresolv.conf上書きを防止しません。記述する必要のあるネームサーバーを指定するだけです。私にとって、ネームサーバーを指定することはポイントではありませんでした。ファイルに設定しようoptions timeout:1options attempts:1していresolv.confます。

最善の解決策私が見つけたは、デフォルトの動作より優先されdhclient、その文書のフックを使用します。

/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate次の内容で新しいファイルを作成します。

#!/bin/sh
make_resolv_conf() {
    :
}

次に、ファイルを実行可能にします。

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

これで、dhclientの実行時(再起動時または手動での実行時)に、sudo ifdown -a ; sudo ifup -aこのスクリプトがロードされますnodnsupdate。このスクリプトmake_resolv_conf()は、通常上書きされる内部関数をオーバーライドし、resolv.conf代わりに何もしません。

これは、Ubuntu 12.04で機能しました。


1
Debian 8で正常に動作します。エレガントなソリューション!
アルトゥールボデラ

1
完全を期すために、マンページ dhclient-scriptには、上記の回答で言及したDHCPクライアントネットワーク構成スクリプトに関する情報が含まれています。
-hecke

これは16.04では機能しませんでした。/etc/network/interfaces.dにも追加しましたが、効果はありません。ここで推奨するmake_resolv_confの空のオーバーライドを追加しましたが、/ etc / dhcp /は変更しませんでした。 dhclient.conf-これを修正するには、静的構成ファイルを本当に変更する必要がありますか?
silverjam

3

これは私のマシンの奇妙な癖かもしれませんが、他の誰かが同じようなケースを持っているかもしれません。

私はISPネームサーバーを/etc/resolv.confに含めるために多くの方法を試しましたが、成功しませんでした:

  • それら/etc/network/interfacesを組み込み、ネットワークを再起動しました。彼らはに現れませんでした/etc/resolv.conf

  • 私はそれらを/etc/resolv.conf明示的に入れましたが、もちろんそれらは上書きされました。彼らは現れましたが/run/resolvconf/interface/eth0.inet、決して行きませんでした/etc/resolv.conf

  • 動的更新用にresolvconfを構成してみました。変化なし。

最後に/etc/resolv.conf、他のネームサーバーにローカルマシン(127.0.0.1)が表示される場合は含まれていないことをどこかで読みました。

必死に編集して/run/resolvconf/interface/lo.named、その中の唯一の行を削除し(nameserver 127.0.0.1)、再起動しました:ifdown eth0 && ifup eth0

/etc/resolv.confに初めてISPネームサーバーが追加されました!私は走ったservice network-manager restart、それは安定していたかどうかを確認し、/etc/resolv.confまだ私のISPのネームサーバが含まれています。念のためリブートしましたが まだ残っています/run/resolvconf/interface/lo.namedが、リセットされました:nameserver 127.0.0.1

奇妙なことに、ネットワークの再起動はまだ機能します/etc/resolv.conf。ISPネームサーバーがまだ含まれています。これを説明することはできません(誰かできますか?)が、これは誰かが同じ場所で立ち往生するのを助けるかもしれません。


これはおそらくによって引き起こされdnsmasqます。を使用して単純に削除するapt-get remove dnsmasqか、で設定を更新でき/etc/dnsmasq.confます。
トムバート

2

ネームサーバーをファイル/etc/resolvconf/resolv.conf.d/headに追加します。ファイルには、受信したメッセージが含まれています。

8.8.8.8を追加すると、そのファイルは次のようになります。

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8

3
/etc/resolvconf/resolv.conf.d/headに行を追加することは、/ etc / resolvconf / resolv.conf.d / baseに行を追加することよりもさらに悪い解決策です。ifupを使用して設定されたインターフェイスの正しいソリューションは、「dns-search」および「dns-nameservers」行を/ etc / network / interfacesのスタンザに追加することです。他の回答に関する私のコメントも参照してください。
-jdthood

3
それが実際に私のために働いた唯一のことです...そして、なぜ「正しい」解決策のどれも機能していないのかを理解するのは難しいようです。
silverjam

1

最後の行に追加します。例:

nameserver 8.8.8.8

ターミナルを開いて入力します

sudo chattr +i /etc/resolv.conf

+ iは、起動時にファイルがリセットされないように注意します。

上記を取り消すには

sudo chattr -i /etc/resolv.conf

多くのための

man chattr

1

Fedora 20システムでは、他のソリューションは機能しませんでした。私の特定の問題は、/ etc / resolv.confの「検索」行が上書きされていたことです。これが修正されたものです。(これは、NetworkManagerが回線search rn.yourcompany.com を生成していることを前提と しています search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

1.「ifconfig」コマンドを使用して、関心のあるインターフェイスを見つけます。

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2. rootになり、システム構成ネットワークデバイスディレクトリに移動します。

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. 使用可能なお気に入りのエディターを使用して、Domain検索する追加のドメインを含む行を追加します。

DOMAIN="yourcompany.com intnet.yourcompany.com"

保存、ログアウト、ログインし直します。NetworkManagerに\etc\resolve.conf次の行が表示されます。

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

3
パレードで雨が降らないようにしますが、これはAsk Ubuntuなので、Fedoraは話題外です。
フリム14

1

にエントリを追加 /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

そして、次のコマンドを実行します

sudo resolvconf -u

1

Ubuntu Server 18の場合、Netplanはネットワークを構成するための新しいユーティリティです。

# cd /etc/netplan

次に、yamlファイルのネームサーバーアドレスエントリを編集します(正しいインデントを使用します)。たとえば、GoogleのDNSサーバーを使用している場合:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

サービスを再起動するには

# netplan apply

https://netplan.io/を参照してください

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/


0

DHCPを使用している場合は、編集/etc/dhcp/dhclient.confしてDNSサーバーを追加します。

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

DHCPクライアントはdns-nameserversinを上書きしますetc/network/interfacesを、私を考え/etc/resolvconf/resolv.conf.d/baseます。

これは、Ubuntuサーバー14.04.3で機能しました。

詳細については、Debian NetworkConfiguration Wikiをご覧ください。


0

resolve.confをバックアップし、resolvconfパッケージを削除して、/ etc / resolv.confファイルを必要に応じて編集します。

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

resolvconfのような悪いソフトウェアを使用しないことを選択する権利が必要です。

ところで、/ etc / resolv.confの検索フィールドは役に立ちません。


0

使用resolvconfと無効化systemd-resolved.service(これは私にとってはubuntu 19.04):

  1. インストール resolvconf

    sudo apt install resolvconf
    
  2. ネームサーバーの追加

    /etc/resolvconf/resolv.conf.d/baseテキストエディタで開きますvim

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    次に、開いたファイル内にネームサーバーを追加します。例:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. 更新中 resolv.conf

    sudo resolvconf -u
    
  4. 無効にsystemd-resolved.serviceして再起動します。nameserver 127.0.0.53に書き込まれません/etc/resolv.conf

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

できた!

ソース


これを行ったUbuntuバージョンを指定できますか?元の質問は、長い間廃止されているため、ubuntu 12.04を参照しています。
マークヴァンフーミッセン

0

これが最も簡単な修正であることがわかりました。あなたがファイルを持っている場合resolv.confresolvconf彼らはお互いに踏みつけます。resolv.conf再起動するたびに取得して上書きするファイルを削除する必要があります。

入れてnameserver 1.1.1.1 1.0.0.1はresolvconfファイルの一番下にしてから実行します

sudo rm /etc/resolv.conf

ファイルを取り除きます。その後、再起動するとすべてが機能します。


0

12.04のMiソリューション:

名前解決サーバーを使用しないインターフェイスにdns-nameserverを追加すると、

resolvconfのmanページ

ターミナルで手動で編集してもresolv.confが変更されないようにするには、次のようにします。

sudo resolvconf –disable-updates

後:

sudo resolvconf -a eth0 # or your network interface

次に/run/resolvconf/resolv.conf、最大2つのDNSサーバーを追加して手動で編集します。

次に、サービスを再起動します。

sudo /etc/init.d/networking restart

4
これは問題を解決する正しい方法ではありません
-jdthood

1
@jdthoodこれを閲覧している誰かとして、なぜこれが正しい方法ではないのかを詳しく説明できますか?私には理にかなっているようですが、これについては何も知りません。
ErikPerik 14年

-1

置くだけ

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

/etc/network/interfaces設定のコマンド。その後、ネットワークを再起動します。

動作するはずです。


-2

その構成は /etc/default/bind9

RESOLVCONF=no|yes

no =の条件を適用しませんinit.d bind9

yes、または他の値= overrideresolv.conf

この問題は、インストール時に発生し、bind9すべての設定を確認する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.