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に配置しようとしましたが、sudo resolvconf -u

に表示されませんでした。 。

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

更新:

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

次の理由から、これが最善の解決策だと思います。

  1. 機能します。
  2. 必要な変更は最小限であり、
  3. それは、バイパスするのではなく、dnsmasqのDNSキャッシュと連携して機能します。

コメント

  • 質問を更新するのではなく、質問に答える方がよいと思います…問題に対して与えた正しい答えを見つけやすくなります
  • ほとんどの回答はUbuntu指向であり、非常に複雑なようです。 NetworkManagerユーザー向けの一般的なソリューションは、/etc/NetworkManager/NetworkManager.confdns=noneを追加することです(以下の私の回答の詳細を参照してください)。
  • この回答は、resolve.confが上書きされる理由を明らかにしていると思います。そうすれば、構成方法を理解できます。

回答

DNSネームサーバーを上書きする場合は、base resolv.conf.dの下のファイル。

$ 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ファイルの先頭に警告がありますが:

この警告は、これらのファイルが作成されたときに、最終的に結果のresolv.confファイルに反映されるようにするためのものです。作るために使用されます。したがって、上記のbaseファイルについて説明したnameserver行をファイルも。

参照

コメント

  • Ubuntu14.04-ネームサーバーをbaseに配置してresolvconf -uを実行すると、ネームサーバーは not はresolv.confに入れません-ネームサーバーをheadに入れると、
  • Ubuntu14.04-コメントアウトする必要がありました/run/resolvconf/interface/NetworkManager
  • タイプnslookup google.comで設定された構成で、リストの最初のIPは、そうでない場合は新しいネームサーバーである必要があります、間違ったことをしました
  • Ubuntu 16.04:/etc/resolvconf/resolv.conf.d/headに追加した場合にのみ機能し、。 nslookup google.comで確認済み。
  • 最初に、resolvconfをインストールしておく必要があります。 sudo apt-get install resolvconfを実行してインストールできます。

回答

この質問にも興味があり、@ simで提案されたソリューションを試しました。

テストするために、

nameserver 8.8.8.8 

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

nameserver 8.8.4.4 

in /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. のみであると結論付けられます。 「head」部分はresolvonfによって読み取られます。「base」部分はdnsmasqによって何らかの形で制御されます。
  2. dhcpによって提供されるサーバーに関係なく、dnsserverは実際には8.8.4.4に強制されますが、提供されるキャッシュは失われます。 dnsmasqによって、リクエストは常に8.8.4.4に送信されるため、
  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 

コメント

  • ハッキングするよりもはるかに良い答えだと言っていますNS構成。特に、dhcpが提供するサーバーの前にサーバーを追加するオプション。新しい問題を作成せずに、問題を解決する完璧なバランスのようです!
  • ‘注目に値するnm-toolはnmcliに置き換えられました

回答

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

server=8.8.8.8 server=8.8.4.4 

ファイルはdnsmasqパッケージによってインストールされるためですが、Ubuntuにはdnsmasq-baseしか付属していません。 sudo apt-get install dnsmasqを実行し、/etc/dnsmasq.confを編集してから、sudo service dnsmasq restartsudo 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 

コメント

  • これが最高としてマークされるのには理由があります答え…確かにそうだから!どうもありがとう!あなたが言及したすべてのステップの後、すべてがスムーズに機能するためにネットワークの再起動が必要になるかもしれないことを付け加えておきます(それは私のためでした…. sudo service network-manager restart
  • Ubuntu 14.04サーバーでは、コールドブートの約半分の時間でURLを使用したインターネット接続は行われませんが、IPアドレスは機能します。私はそれを修正しようとして無駄に多くの時間を費やし、何ヶ月もあきらめて、そしてこの解決策を見つけました。私もそれが最善の答えだと思います。
  • ‘はdnsmasqをインストールする必要があることに興味をそそられます。これにより、通常の状況でDNSが実際に修正されましたが、VPN構成が完全に壊れました(VPN接続が失敗しました…)
  • Centosにはそのようなファイルはありません
  • ubuntu 16: dnsmasqを使用したプロシージャからの変更は、/etc/resolv.confに伝播されません。その結果、hatnslookupは元の定義済みローカルホスト127.0.0.1を引き続き使用します。言及されているsyslogを確認できますが、

回答

静的IPの状況については、Ubuntuサーバーガイドに次のように記載されています。ファイル/ 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.45192.168.8.10を変更します。 、8.8.8.8のように

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

コメント

  • これは確かに正しいように見えますが、resolv.confを再生成するにはどうすればよいですか?!
  • @JoelBerger ifdown eth0; ifup eth0
  • Centosに/ etc / network / interfacesがありません

回答

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

  2. 開く

    ここに画像の説明を入力

  3. 次に、WiFiまたはイーサネット、あるいは使用しているものを選択し、[編集]をクリックします。これが表示されます:

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

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

  5. メソッドでのみアドレスを選択

  6. 以下にDNS名を入力し、保存します

  7. 完了

コメント

  • I ‘ dはネットワーク接続ごとにこれを行う必要があります。以前は、すべての接続のデフォルトを変更できました。これは、私がここで実行しようとしていたことです。
  • 愛しています!このUI設定は、sudoとvimの混乱から私のお尻を救いました:’(
  • Mintの使用(Ubuntu 14.04)-しかし、KDEでもこれを見ました-理由は、GUIネットワークマネージャーでDNSサーバーを設定しても’端末で使用されるDNS設定には影響しません
  • ベストアンサーimho。Ubuntu14.04では2つの外部を取得しました’ホームネットワーク内のクライアントを認識しないDNSのIPアドレス。’自動(DHCP)’は既存のリストにルーターのIPアドレスを追加しました’。wlan0を介したワイヤレス接続の場合、’は機能しませんでしたが、’自動(DHCP)アドレスのメソッドのみ’ 外部アドレスをルーターIPに置き換えすると、それも機能しました。 sudo service network-manager restartで変更を適用し、少し待ってから、nmcli d list | grep 'DNS\|IP-IFACE'で確認します。そして、名前で内部クライアントにpingを実行します。
  • これが正解です

回答

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

$ sudo nano /etc/resolv.conf 

これを追加して保存します:

nameserver 8.8.8.8 

次に:

$ sudo chattr +i /etc/resolv.conf 

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

コメント

  • ソリューションにchattrが含まれる場合は常に、’は実際には解決策ではありません。
  • これは、何らかの理由で一時的にDNSを変更する必要があり、’構成を変更したくない。永続的な解決策として、’お勧めしません。
  • “迅速で汚れた回避策”
  • これは汚れていません’プログラム汚れていることがよくわかっているため、ローカル構成が破壊されます。

回答

私の問題は少し異なっていました、ルーターの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*>アイテムを適切なコンテンツに置き換えます。

コメント

  • これが私の問題を解決した答えです。
  • 完璧です。変更を有効にするには、sudoサービスネットワークを再起動する必要があることを追加するだけです。
  • ‘そのdhcp3フォルダー? Xubuntu 17.10を使用していますが、/etc/dhcpに移動しましたか?
  • @PlasmaBinturong私の場合は/etc/dhcp/dhclient.confでしたDebianとUbuntuの最新バージョン。

回答

dns-nameservers XXX.XXX.XXX.X /etc/networking/interfacesファイルに追加します。

コメント

  • 反対票を投じるときはコメントを残してください。これは、38ページのマニュアルに記載されている方法です。
  • 前述のマニュアルには、すべてのIPが1行で表示されています。この答えは、行を追加することを示唆しているようです。そして、なぜ最後の数字は1 X幅しかないのですか?反対票を集めたのは、ほとんどが非常に非公式で不確実な短いチャットスタイルの文章だったと思います。@ Zook

回答

何かが足りないかもしれませんが、 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を設定するための構成ファイル ady DHCPNetworkManagerで受信しています。

少し調べてみると、/etc/resolv.confファイルが実際にはリンクであり、/run/systemd/resolve/stub-resolv.conf。いくつかの実験の結果、/run/systemd/resolve/ディレクトリにresolv.confという名前の別のファイルが含まれているようです。このファイルにはすでに

。したがって、/etc/の構成ファイルを手動で上書き/作成する代わりに、/etc/resolv.confを再リンクして

ファイルですべて問題ないはずです:

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

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

これが古いubuntuで機能するかどうかはわかりませんが、Ubuntu17.10では機能します。

コメント

  • systemd-resolve --flush-cacheを実行すると、元のリンクファイルが切断されたようです。上記の回答を復元します。元の機能

回答

5月6日編集2016

/etc/Network-Manager/system-connections/ディレクトリのシステム接続のすべての設定を更新するスクリプトを作成しました。個々の接続を編集するために使用するGUIは、そのディレクトリ内の特定のファイルを編集します。スクリプトはすべてのファイルを更新します。dnsがgrepで設定されていないユーザーを検索し、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 

実行中のスクリプト:

ここに画像の説明を入力

元の投稿ここの一部のユーザーは、DNSが何らかの形でdnsmasqによって制御されていると指摘しました。それは確かに真実です。 /etc/resolvconf/resolv.conf.dheadまたはbodyをどのように変更しても、やや小さな問題に直面しました。 / div>、私のコンピュータは実際にはドメイン名によってインターンされたアクセスにアクセスできませんでした-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 への投稿を参照してください。

UPDATE#1

本日大学から帰宅したところ、自宅のWi-Fiに接続できないことがわかりました。そして、[main]dns=は実際にはプラグインの行であることが判明したため、dns=dnsmasqは、実際にはdnsmasqプラグインをNetworkManagerに追加しているようです。

それで、私のソリューションは、私が期待していたようには機能しませんでした。マンページからの抜粋:

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

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

したがって、dns=208.67.222.222基本的に、NetworkManagerがそのプラグインを使用できないようにした可能性があります。そうしないとローカルDNSサーバーが使用されます(明らかに機能しません)。

回答

2つのメソッド

メソッド1

使用するDNSサーバーは、resolv.conf.d

iv id = “57ec694751の下にあるheadファイルを更新することで変更できます。 “>

次に実行

$ sudo resolvconf -u 

上記により、一般的なresolv.confファイルが生成されます/etcディレクトリにあります。すべての解決リクエストは、上記のネームサーバーに送信されます。 解決済み。

ただし、これには影響があります。 resolvconfを使用して1.1.1.1にアドレス解決を直接クエリすると、dnsmasqによって提供されるキャッシュの機能が失われます。すべてのリクエストは1.1.1.1

方法2

に送信されます

上記を実行したくない場合は、DNS解決にdnsmasqを使用してくださいこの回答。回答はここで簡単に説明されています。

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

server = 1.1.1.1

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

$ sudo systemctl restart dnsmasq.service 

問題なく動作します。解決済み。

回答

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ではこのようにしました。

回答

ルート:

  1. コメントdns=dnsmasq on /etc/NetworkManager/NetworkManager.conf
  2. /etc/dhcp/dhclient.confの最後に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;を追加しますdiv>
  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秒待って再起動プロセスを終了し、「nslookupnist.gov」で構成を確認します。 Ubuntu LTS14.04でうまく機能します。

回答

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

この質問のビュー数を考えると、この 8文字ソリューションはまだ投稿されていません:man NetworkManager.confによると、

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

したがって追加

iv id = /etc/NetworkManager/NetworkManager.conf[main]セクションにある “5c2d009f1c”>

次に、NetworkManagerを再起動すると、

はもうありません。

rc-manager=unmanagedの設定はdns=noneと同等である必要があることに注意してください、およびその設定rc-manager=symlinkと、/etc/resolv.confをシンブとして持つolicリンクの方が良いかもしれません(上記のマンページを読んでください)。

更新:

NetworkManagerが/etc/resolv.confの上書きを停止した後、私は考えました。 dhcpcdは、起動時に/etc/resolv.confを役に立たない空のファイルに置き換えていました。 dhcpcd.confのマンページが役に立ちました。dhcpcd.conf

nohook resolv.conf 

を追加するだけで十分です。 (私のものは/etc/dhcpcd.confにあります)。

回答

「特定のインストール済みアプリケーションがこのファイルを管理しているためです。そのアプリケーションをアンインストールするか、そのアプリケーションから直接目的のオプションを設定できます。

同じ状況の私の場合(Linux centos7最小サーバー) # Generated by NetworkManagerresolv.confファイルの先頭にあるため、このオプションを変更する最善の方法は

nmtui

コマンド。このツールでネームサーバーを編集できます。このユーティリティからnetworkmanagerのオプションを変更すると、再起動後に/etc/resolv.confに自動的に適用されます。詳細はこちらです。

回答

何もありませんすべてインターネット上で彼はNordVPNのCLIユーティリティは、VPNに接続して接続を解除するたびに、/etc/resolv.confを上書きし続けたためです。 chattr +iを上書きすることさえありました。これは非常に面倒でした!!

私にとってうまくいったのは、 resolvconfを完全に無効にすることでした

/etc/resolvconf.confを編集して、これを唯一のエントリにします:

resolv_conf=NO 

これにより、、つまり/etc/resolv.confが変更されることはありません。次に、sudo chattr +i /etc/resolv.confを適切に測定します。

ArchLinuxでテスト済み。

回答

Centos 7で、NetworkManagerを使用して、私が見つけた最もクリーンで永続的な実用的なソリューションは、nmcliを使用して必要な値を設定するNetworkManagerスクリプトを作成することです。

eg

権限755と次の内容で/etc/NetworkManager/dispatcher.d/mydns.shを作成します:

#!/usr/bin/sh if [ $1 == "enp0s11" -a $2 == "up" ] then echo "Setting my DNS ($1 is $2)" | logger # disable default DNS nmcli device mod enp0s11 ipv4.ignore-auto-dns yes # Substitute our own DNS, in the desired order nmcli device mod enp0s11 ipv4.dns "10.0.1.101 10.0.1.1" fi 

再起動せずにテストするには:

systemctl restart NetworkManager.service cat /etc/resolv.conf 

YMMVですが、これが/etc/resolv.confを許可する唯一の方法です。不要な値で上書きされることなく、再起動を「存続」させます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です