オンラインで見るほとんどの情報は/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
私はそれが以来の最良の解決策だと思います:
次の行を/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
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
ファイルに追加することも簡単にできます。
私もこの質問に興味があり、@ 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)
私が正しければ、私はこのすべてから結論します
全体として、それは機能しますが、それが求められた意図した結果であるとは思いません。私が思うより近い解決策は次のとおりです。編集する
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
静的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ページ
それを開く
次に、WiFiまたはイーサネット、または使用しているものを選択し、編集をクリックします。あなたはこれを得るでしょう:
タブでipv4を選択します
以下にDNS名を入力して保存してください
あなたは終わった
まだ言及されていない素早い回避策は、編集した直後にresolv.conf
ファイルに不変フラグを設定することです。
$ Sudo nano /etc/resolv.conf
これを追加して保存:
nameserver 8.8.8.8
次に:
$ Sudo chattr +i /etc/resolv.conf
これでうまくいくはずです。私のシステムでもこれを行います。
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を使用してすべてのプログラム/サービスを正しくセットアップすることです。
セットアップの完全なリストを次に示しますresolv.confの制御を取り戻すため上書きしないようにします(resolv.conf以外の場所からDNSを無効化/セットアップする方法 )resolvconfはresolv.confから独立したプログラムであることに注意してください。また、システム/構成によっては、ここにリストされているプログラムの1つまたは多くがない場合があります。
設定ファイル
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
設定ファイル
cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4
設定を更新します
Sudo systemctl restart dnsmasq.service
設定ファイル
/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
設定ファイル
$ 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
設定ファイル
$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;
構成を更新
reboot
rdnssdを無効にする
systemctl disable --now rdnssd.service
無効化解決
systemctl disable --now systemd-resolved.service
設定ファイル
/etc/sysconfig/network/config
netconfigを無効にする
cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""
構成を更新
reboot
/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
私の問題は少し異なっていました。ルーターの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*>
アイテムを適切なコンテンツに置き換えます。
多分私は何かが足りないかもしれませんが、 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
ファイルに追加してみてください。
ここでの回答のいくつかは問題なく機能します。ただし、「適切な」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では機能します。
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
実行中のスクリプト:
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 に関する私の投稿を参照してください。
今日、大学から帰国したところ、自宅の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がそのプラグインを使用するのを防ぐことができます。
2つのメソッドがあります
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
に送信されます
上記を望まず、DNS解決にdnsmasqを使用する場合は、 this の回答を参照してください。ここでは答えを簡単に説明します。
/etc/dnsmasq.conf
ファイルに次のコンテンツを追加します。
サーバー= 1.1.1.1
次に、dnsmasqサービスを再起動します。
$ Sudo systemctl restart dnsmasq.service
物事はうまくいきます。 解決しました。
DNSを変更する簡単な方法:
$ Sudo nano /etc/network/interfaces
問題が発生した場合は、nano
をインストールします。
$ Sudo apt-get install nano -y
その後..
dns-nameservers
dns-nameservers 199.85.126.10 199.85.127.10
これが最良の方法だといいのですが、ところでVPSでこのようにしました。
NB:ほとんどの回答と同様に、これはNetworkManagerの使用を前提としています。ただし、他のほとんどの回答とは異なり、resolvconf
、dhclient
などの使用を想定していません。ただし、それらが引き継ぐ可能性があることに注意してください(更新を参照)。
この質問の閲覧数を考えると、この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
にあります)。
ルート上:
dns=dnsmasq
オン /etc/NetworkManager/NetworkManager.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;
の終わりに /etc/dhcp/dhclient.conf
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で正常に動作します。