web-dev-qa-db-ja.com

resolv.confが上書きされているときにDNSを設定するにはどうすればよいですか?

オンラインで見るほとんどの情報は/etc/resolv.confを編集するように言われていますが、そこで行った変更はすべて上書きされます。

$ cat /etc/resolv.conf 
# 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.1.1

127.0.1.1はdnsmasqのローカルインスタンスのようです。 dnsmasqドキュメントは/etc/resolv.confを編集するように言っています。カスタムネームサーバーを/etc/resolv.conf.d/baseに配置しようとしましたが、/etc/resolv.confを実行した後、変更がSudo resolvconf -uに表示されませんでした。

ちなみに、接続ごとにDNSを変更したくありません。特に指定がない場合は、すべての接続に使用するデフォルトのDNS設定を設定します。

UPDATE:

私はこの質問に自分で回答しました: https://unix.stackexchange.com/a/163506/67024

私はそれが以来の最良の解決策だと思います:

  1. できます。
  2. 変更が最小限で済み、
  3. それはそれをバイパスするのではなく、それでもdnsmasqのDNSキャッシュと連携して動作します。
302
Seán Hayes

次の行を/etc/dnsmasq.confに追加すると、dnsmasqが使用するネームサーバーを変更できることがわかりました。

server=8.8.8.8
server=8.8.4.4

/etc/dnsmasq.confファイルはdnsmasqパッケージによってインストールされたため、私にはありませんでしたが、Ubuntuにはdnsmasq-baseしか付属していません。私はSudo apt-get install dnsmasqを実行し、次に/etc/dnsmasq.conf、次にSudo service dnsmasq restartおよびSudo service network-manager restartを編集しました。

Sudo tail -n 200 /var/log/syslogを実行してsyslogをチェックし、dnsmasqが指定したネームサーバーを使用していたことを確認しました。

Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53
60
Seán Hayes

DNSネームサーバーを上書きしたい場合は、resolv.conf.dの下のbaseファイルに次のような行を追加するだけです。

$ Sudo vim /etc/resolvconf/resolv.conf.d/base

次に、ネームサーバーリストを次のように記述します。

nameserver 8.8.8.8
nameserver 8.8.4.4

最後にresolvconfを更新します。

$ Sudo resolvconf -u

resolvconfのmanページを見ると、/etc/resolvconf/resolv.conf.d/の下にあるさまざまなファイルが説明されています。

   /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.

   /etc/resolvconf/resolv.conf.d/head
          File to be prepended to the dynamically generated resolver 
          configuration file.  Normally this is just a comment line.

   /etc/resolvconf/resolv.conf.d/tail
          File to be appended to the dynamically generated resolver 
          configuration file.  To append nothing, make this  an  empty  
          file.   This file is a good place to put a resolver options line 
          if one is needed, e.g.,

              options inet6

headファイルの上部に警告がありますが、

$ 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

この警告はそこにあるので、これらのファイルが構築されると、警告は最終的に、これらのファイルを使用して生成されるresolv.confファイルに機能します。したがって、上記のnameserverファイルのbase行をheadファイルに追加することも簡単にできます。

参考文献

262
slm

私もこの質問に興味があり、@ simで提案された解決策を試しました。

テストするために、

nameserver 8.8.8.8

/etc/resolvconf/resolv.conf.d/baseおよび

nameserver 8.8.4.4

/etc/resolvconf/resolv.conf.d/head

それから私はネットワークを再起動しました

Sudo service network-manager restart

結果は/etc/resolv.confは次のようになります

# 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.4.4
nameserver 127.0.1.1

およびnm-toolは、dnsserverが

DNS:             208.67.222.222
DNS:             208.67.220.220

これは私のルーターが提供するものです。一方、アドレスを掘ると、

;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)

私が正しければ、私はこのすべてから結論します

  1. 「ヘッド」部分のみがresolvonfによって読み取られます。「ベース」部分は、どういうわけかdnsmasqによって制御されます
  2. dnsserverは、dhcpによって提供されるサーバーに関係なく、実際には8.8.4.4に強制されますが、要求は常に8.8.4.4に送信されるため、dnsmasqによって提供されるキャッシュが失われます。
  3. dnsmasqはまだdhcpが提供するdnsserverのみを使用しています。

全体として、それは機能しますが、それが求められた意図した結果であるとは思いません。私が思うより近い解決策は次のとおりです。編集する

Sudo vim /etc/dhcp/dhclient.conf

それから加えて

supersede domain-name-servers 8.8.8.8;

結果は次のとおりです。resolv.confには127.0.0.1のみが含まれています。これは、dnsmasqキャッシュが呼び出され、nm-toolが言うことを意味します。

DNS:             8.8.8.8

つまり、検索された名前がキャッシュにない場合は、dhcpが提供するサーバーではなく、8.8.8.8で要求されます。

別の(おそらくより良い)オプションは、「supersede」の代わりに「prepend」を使用することです。このようにして、名前が8.8.8.8によって解決されない場合、要求は他のサーバーにフォールバックします。実際、nm-toolは言う

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
80
brad

静的IPの状況では、Ubuntu Server Guideは/ 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

必要なIPの192.168.3.45 192.168.8.10を8.8.8.8のように変更します

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf 38ページ

23
Rodolpho
  1. 「ネットワーク接続」を検索
  2. それを開く

    enter image description here

  3. 次に、WiFiまたはイーサネット、または使用しているものを選択し、編集をクリックします。あなたはこれを得るでしょう:

    enter image description here

  4. タブでipv4を選択します

  5. メソッドでのみアドレスを選択
  6. 以下にDNS名を入力して保存してください

  7. あなたは終わった

17
pa1pal

まだ言及されていない素早い回避策は、編集した直後にresolv.confファイルに不変フラグを設定することです。

$ Sudo nano /etc/resolv.conf

これを追加して保存:

nameserver 8.8.8.8

次に:

$ Sudo chattr +i /etc/resolv.conf

これでうまくいくはずです。私のシステムでもこれを行います。

15
Younis Bensalah

LinuxでのDNS構成

LinuxでのDNSの使用は終了しましたインターネットライブラリ(DNS)へのアクセスを提供するCライブラリのルーチンのセット。リゾルバー構成ファイル(resolv.conf)には、リゾルバールーチンがプロセスによって初めて呼び出されたときに読み取られる情報が含まれています。つまり、DNSを要求する各プロセスは、ライブラリを介して/etc/resolv.confを読み取ります。 The NSSはこの上に重ねられ、/etc/nsswitch.confによって構成されます。

Linux DNS構成はファイル/etc/resolv.confにあります[〜#〜] but [〜#〜]自動的に実行したいプログラム/サービスがいくつかあります/etc/resolv.confでDNS構成ファイルを管理および処理します。状況によっては、このファイルを自分で管理したい場合があります。 DNSを管理する各プログラム/サービスには、/etc/dnsmasq.conf(dnsmasqサービス用)などの独自の構成ファイルがあり、接続の変更時や他のイベントでDNS構成を追加します...簡単な解決策は、DNS構成ファイルをchattr +i /etc/resolv.confしかし、これは特定のケースでは推奨されません。より良い解決策は、(dnsmasq/network-manager/resolvconf/etcなどの)DNSを使用してすべてのプログラム/サービスを正しくセットアップすることです。

DNSの制御を取り戻す

セットアップの完全なリストを次に示しますresolv.confの制御を取り戻すため上書きしないようにします(resolv.conf以外の場所からDNSを無効化/セットアップする方法 )resolvconfはresolv.confから独立したプログラムであることに注意してください。また、システム/構成によっては、ここにリストされているプログラムの1つまたは多くがない場合があります。

1. resolvconf:

設定ファイル

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

設定を更新します

Sudo resolvconf -u

resolvconfを無効にする

systemctl disable --now resolvconf.service 

2. Dnsmasqサービス:

設定ファイル

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

設定を更新します

Sudo systemctl restart dnsmasq.service

3.ネットワークマネージャ:

設定ファイル

/etc/NetworkManager/*

DNSを無効にする

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

DNSを有効にする

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

解決されたサービスを使用する

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

resolvconfを使用します

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

設定を更新します

systemctl restart NetworkManager.service

4.ネットワークインターフェイス:

設定ファイル

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

構成を更新

reboot

5. DHCPクライアント:

設定ファイル

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

構成を更新

reboot

6. Rdnssdサービス:

rdnssdを無効にする

systemctl disable --now rdnssd.service

7.解決されたサービス:

無効化解決

systemctl disable --now systemd-resolved.service

8. Netconfig:

設定ファイル

/etc/sysconfig/network/config

netconfigを無効にする

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

構成を更新

reboot

DNSサーバーの設定

/etc/resolv.conf構成の例

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan
14
intika

私の問題は少し異なっていました。ルーターのDNSサーバーを上書きしたかったのです。 Ubuntuからこのリンクを見つけました: https://wiki.ubuntu.com/OverrideDNSServers

DHCPサーバーから提供されたDNS設定を上書きしたい場合は、

/etc/dhcp3/dhclient.conf

次の行を追加します。

supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

<dns_ip_address*>アイテムを適切なコンテンツに置き換えます。

11
Ryan

多分私は何かが足りないかもしれませんが、 https://help.ubuntu.com/14.04/serverguide/network-configuration.html の設定手順に従って、あなたがするすべては以下を更新することです。私はプロキシを実行していません-ファイアウォールとローカルDNSの背後にあるマシンだけです(例はGoogleを示していますが、必要なものに設定しています)。

nano /etc/network/interfaces

デフォルト:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
auto eth0
iface eth0 inet dhcp

更新:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask 255.255.255.0
gateway x.x.x.x

#nameservers
# you may not need dns-search
# I use it because I'm running this on a Windows network 
# so its useful to have
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

可能であれば再起動します。

dns-nameservers XXX.XXX.XXX.X/etc/networking/interfacesファイルに追加してみてください。

3
Mike

ここでの回答のいくつかは問題なく機能します。ただし、「適切な」DNSを設定するためだけに手動で構成ファイルを実行する必要があるという事実に不満でしたIすでにDHCPを受信して​​いますNetworkManager

少し掘り下げたところ、/etc/resolv.confファイルは実際にはリンクであり、/run/systemd/resolve/stub-resolv.confを指していることがわかりました。実験の結果、/run/systemd/resolve/ディレクトリにはresolv.confという名前の別のファイルが含まれているようです。このファイルには、DHCPを介して受け取った設定がすでに含まれています。したがって、/etc/内の構成ファイルを手動で上書き/作成する代わりに、/etc/resolv.confを再リンクして/run/systemd/resolve/resolv.confファイルを指すようにするだけで、すべて正常に動作します。

# Sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

これで、Gnomeのネットワークマネージャーからでも設定を編集できるようになります。 :)

これが古いUbuntuで機能するかどうかはわかりませんが、Ubuntu 17.10では機能します。

2
tftd

2016年5月6日編集

/etc/Network-Manager/system-connections/ディレクトリにあるシステム接続のすべての設定を更新するスクリプトを作成しました。個々の接続の編集に使用するGUIは、そのディレクトリ内の特定のファイルを編集します。スクリプトはすべてのファイルを更新します。grepでDNSが設定されていない人を検索し、awkで設定するだけです。

これらのファイルにアクセスするにはSudoアクセスが必要なので、このスクリプトをSudoで実行してから、ネットワークマネージャーを再起動します

#!/bin/bash
# Author: Serg Kolo
# Date: May 6, 2015
# Description: this script checks all settings for connections in 
# /etc/NetworkManager/system-connections/ , and if there's no custom
# dns set , this script sets it;
# NOTE: run Sudo service network-manager restart after running this script

set -x

for file in /etc/NetworkManager/system-connections/* ; do
        grep 'dns=208.67.220.220;' "$file"  || ( awk '{print;if ($1=="[ipv4]"){getline; print "method=auto\ndns=208.67.220.
220;\nignore-auto-dns=true"}}' "$file" > .tmpfile && ( cat .tmpfile > "$file") )
done

実行中のスクリプト:

enter image description here

ORIGINAL POSTここで一部のユーザーは、DNSがdnsmasqによって制御されていると指摘しました。それは確かに本当です。 headまたはbody/etc/resolvconf/resolv.conf.dでどのように変更しても、コンピューターがドメイン名でインターンに実際にアクセスできず、 IPアドレス。

私がしたことは、/etc/NetworkManager/NetworkManager.confファイルを編集することです。当初はdns=dnsmasqと表示されていましたが、dns=208.67.222.222に変更しました。この方法では、nm-toolは208.67.222.222について言及していませんが、IPアドレスだけでなく、ドメイン名を使用することもできました。

NetworkManager.confファイルは次のようになります。

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
dns=208.67.222.222

[ifupdown]
managed=false

注:私の問題とこの解決策の詳細については、 askubuntu.com に関する私の投稿を参照してください。

アップデート#1

今日、大学から帰国したところ、自宅のWiFiに接続できないことに気付きました。 man NetworkManager.confについて少し読んだところ、dns=[main]は実際にはプラグインの行であるため、dns=dnsmasqが実際に明らかに、NetworkManagerへのdnsmasqプラグイン。

だから、私の解決策はまだ期待通りではなかった。以下は、manページからの抜粋です。

dns=plugin1,plugin2, ... List DNS plugin names separated by ','. 

DNSプラグインは、ローカルキャッシングネームサーバー機能(DNSクエリを高速化)を提供し、それを使用するアプリケーションにDNSデータをプッシュするために使用されます。

したがって、dns=208.67.222.222を設定することにより、基本的には、NetworkManagerがそのプラグインを使用するのを防ぐことができます。

1

2つのメソッドがあります

方法1

resolv.conf.dの下にあるheadファイルを更新することで、使用するDNSサーバーを変更できます

$ echo 'nameserver 1.1.1.1' | Sudo tee /etc/resolvconf/resolv.conf.d/base

そして実行する

$ Sudo resolvconf -u

上記はresolv.confディレクトリに汎用の/etcファイルを生成します。すべての解決要求は、上記のネームサーバーに送信されます。 解決しました。

ただし、これには影響があります。 resolvconfを使用して1.1.1.1に直接アドレス解決を照会する場合、dnsmasqによって提供されるキャッシングの能力はなくなります。すべてのリクエストは1.1.1.1に送信されます

方法2

上記を望まず、DNS解決にdnsmasqを使用する場合は、 this の回答を参照してください。ここでは答えを簡単に説明します。

/etc/dnsmasq.confファイルに次のコンテンツを追加します。

サーバー= 1.1.1.1

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

$ Sudo systemctl restart dnsmasq.service

物事はうまくいきます。 解決しました。

1
Pragathees

DNSを変更する簡単な方法:

$ Sudo nano /etc/network/interfaces

問題が発生した場合は、nanoをインストールします。

$ Sudo apt-get install nano -y

その後..

  1. これを見つける:dns-nameservers
  2. 見つからない場合は、そこに入力してください
  3. 私は次のように私の物を作りました:dns-nameservers 199.85.126.10 199.85.127.10

これが最良の方法だといいのですが、ところでVPSでこのようにしました。

0
Saif Salim

NB:ほとんどの回答と同様に、これはNetworkManagerの使用を前提としています。ただし、他のほとんどの回答とは異なり、resolvconfdhclientなどの使用を想定していません。ただし、それらが引き継ぐ可能性があることに注意してください(更新を参照)。

この質問の閲覧数を考えると、この8文字ソリューションがまだ投稿されていないことは非常に信じられません:man NetworkManager.confによると、

dns:[…] none:NetworkManagerはresolv.confを変更しません。これは、管理されていないrc-managerを意味します

したがって、追加

dns=none

[main]/etc/NetworkManager/NetworkManager.confセクションで、NetworkManagerを再起動すると、/etc/resolv.confは変更されなくなります。

rc-manager=unmanagedの設定はdns=noneと同等である必要があり、rc-manager=symlinkの設定とシンボリックリンクとしての/etc/resolv.confの設定は、より良いアイデアかもしれません(上記のマンページを参照) 。

更新:

NetworkManagerが/etc/resolv.confの上書きを停止した後、dhcpcd/etc/resolv.confを起動時に無用の空のファイルに置き換えていることに気付きました。 dhcpcd.confのマンページが役立ちました。追加するだけで十分です

nohook resolv.conf

dhcpcd.confにあります(鉱山は/etc/dhcpcd.confにあります)。

ルート上:

  1. コメントdns=dnsmasq オン /etc/NetworkManager/NetworkManager.conf
  2. 追加 supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2; の終わりに /etc/dhcp/dhclient.conf
  3. Sudo service network-manager restart

以下は、上記の変更を行います。

$ Sudo sed -i 's/dns\x3Ddnsmasq/\x23dns\x3Ddnsmasq/' \
   /etc/NetworkManager/NetworkManager.conf

$ echo 'supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;' | \
   Sudo tee --append /etc/dhcp/dhclient.conf

$ Sudo service network-manager restart

再起動プロセスが完了するまで7/10秒待ちます。「nslookup nist.gov」で設定を確認してください。 Ubuntu LTS 14.04で正常に動作します。