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

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 は のローカル インスタンスのようですdnsmasqdnsmasqドキュメントには を編集するように書かれています/etc/resolv.conf。 にカスタム ネームサーバーを追加しようとしましたが、を実行した後、/etc/resolv.conf.d/baseに変更が反映されませんでした。/etc/resolv.confsudo resolvconf -u

参考までに、接続ごとに DNS を変更するのではなく、特に指定がない限り、すべての接続で使用するデフォルトの DNS 設定を設定したいと考えています。

アップデート:

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

私はこれが最善の解決策だと考えています。

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

答え1

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

注記:始める前に、次のパッケージがインストールされていることを確認してくださいapt install resolvconf

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

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

nameserver 8.8.8.8
nameserver 8.8.4.4

最後に更新resolvconf:

$ sudo resolvconf -u

のマニュアルページを見ると、resolvconfの下にあるさまざまなファイルについて説明されています/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簡単に追加できます。nameserverbasehead

参考文献

答え2

私もこの質問に興味があり、@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-toolDNSサーバは

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 で要求されます。

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

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220

答え3

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

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/syslogsyslog をチェックして、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

答え4

  1. 「ネットワーク接続」を検索

  2. それを開く

                        ここに画像の説明を入力してください

  3. 次に、WiFi または Ethernet のいずれか、または使用しているものを選択し、編集をクリックします。次のようになります。

                  ここに画像の説明を入力してください

  4. タブでipv4を選択

  5. メソッド内のアドレスのみを選択する

  6. 以下にDNS名を入力して保存してください

  7. 完了です

関連情報