Network Managerとdnsmasqが設定されたArch Linuxを実行しています。新しいCloudFlare 1.1.1.1
DNSを使用しようとすることを除いて、すべて正常に動作しているように見えますが、リゾルバは私のルーターによってアドバタイズされたDNSを使用し続けます。ルーターのIPを含むネームサーバーが追加されているようです。以下を参照してください。
Apr 04 20:02:56 tdewolff dnsmasq[22337]: setting upstream servers from DBus
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 2606:4700:4700::1001#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 2606:4700:4700::1111#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 1.0.0.1#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 1.1.1.1#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 192.168.1.254#53(via wlp4s0)
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver fe80::1%wlp4s0#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: cleared cache
nmcli dev show
を一貫して使用すると、次のことがわかります。
IP4.DNS[1]: 192.168.1.254
IP6.DNS[1]: fe80::1
しかし、ローカルネットワークに関係なくCloudFlare DNSを使用したいと思います(すべてのネットワークの接続設定を変更する必要はありません)。 DNSルックアップの順序を変更したり、ルーターのリゾルバーを無効にするにはどうすればよいですか? strict-order
を/etc/NetworkManager/dnsmasq.d/local
に追加しようとしましたが、うまくいきませんでした。
私はdnsmasq
を使用していませんが、同様の問題がありました。私のための解決策は:
必要なDNSサーバーを/etc/resolv.conf
( ref )に配置します
# IPv4 nameservers:
nameserver 1.1.1.1
nameserver 1.0.0.1
# IPv6 nameservers:
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001
/etc/resolv.conf
に書き込むことにより、NetworkManagerに/etc/NetworkManager/NetworkManager.conf
を変更しないように伝えます( ref )
[main]
dns=none
その後、おそらくNetworkManagerなどを再起動してください。 nmcli dev show
を実行すると、ルーターから報告されたDNSサーバーが表示されます。
IP4.DNS[1]: 192.168.50.1
しかし、nslookup
を使用する場合(Archのbind-tools
から)、1.1.1.1
がクエリに実際に使用されているように見えます。
» nslookup google.com
Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
Name: google.com
Address: 172.217.9.238
Name: google.com
Address: 2607:f8b0:4006:801::200e
Dnsmasqで設定を試しました。 NetworkManagerにはdnsmasq
プラグインがあり、これを/etc/NetworkManager/NetworkManager.conf
に次のように入力して使用できます。
[main]
dns=dnsmasq
これにより、NetworkManagerでdnsmasq
が開始され、127.0.0.1
が/etc/resolv.conf
に挿入されます( ref )。しかし、私はそうしましたこのようにしませんdnsmasqはsystemctl
によって管理されず、自動的にジャーナルctlにログインすることにならないためです(たぶんそこにあるかもしれません)これを回避する方法があります)。
代わりに、次の構成( ref )を使用しました。
/etc/NetworkManager/NetworkManager.conf
:
[main]
dns=none
/etc/resolv.conf
:
nameserver 127.0.0.1
/etc/resolv.dnsmasq.conf
:
# IPv4 nameservers:
nameserver 1.0.0.1
# IPv6 nameservers:
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001
/etc/dnsmasq.conf
:
resolv-file=/etc/resolv.dnsmasq.conf
log-queries
NetworkManagerとdnsmasq
を再起動します。次に、ローカルネームサーバーが上書きされていないことを確認します。
» cat /etc/resolv.conf
nameserver 127.0.0.1
NetworkManagerに質問することもできます。
» cat /run/NetworkManager/resolv.conf
# Generated by NetworkManager
nameserver 192.168.50.1
» nmcli dev show
...
IP4.DNS[1]: 192.168.50.1
しかし、これらのエントリは、ルーターが報告したものを示しているように見えるだけであり、必ずしも実際にクエリに使用されるものではありません。drill google.com
を実行すると、実際に127.0.0.1
が使用されたことがわかります。
;; Query time: 0 msec
;; SERVER: 127.0.0.1
;; WHEN: Fri Apr 20 11:32:59 2018
;; MSG SIZE rcvd: 44
また、上記のようにlog-queries
を/etc/dnsmasq.conf
に入れると、drill stackoverflow.com
を2回実行した後、journalctl
に表示されます。
dnsmasq[27679]: query[A] stackoverflow.com from 127.0.0.1
dnsmasq[27679]: forwarded stackoverflow.com to 1.0.0.1
dnsmasq[27679]: reply stackoverflow.com is 151.101.1.69
dnsmasq[27679]: reply stackoverflow.com is 151.101.65.69
dnsmasq[27679]: reply stackoverflow.com is 151.101.129.69
dnsmasq[27679]: reply stackoverflow.com is 151.101.193.69
dnsmasq[27679]: query[A] stackoverflow.com from 127.0.0.1
dnsmasq[27679]: cached stackoverflow.com is 151.101.193.69
dnsmasq[27679]: cached stackoverflow.com is 151.101.129.69
dnsmasq[27679]: cached stackoverflow.com is 151.101.65.69
dnsmasq[27679]: cached stackoverflow.com is 151.101.1.69
最初に1.0.0.1
に問い合わせたとき、2回目にキャッシュで結果が見つかりました。満足すれば、log-queries
をdnsmasq.conf
から削除できます。
NetworkManagerの管理を簡略化する少し良い方法は、/etc/resolv.conf
のシンボリックリンクを使用することです。これは私のディストリビューション(Fedora)のデフォルトです。これは、man 5 NetworkManager.conf
のdns
オプションを確認することで、distoにチェックインできます。
最初にcloudflare DNSを含むファイル(私は/usr/local/etc/resolv.cloudflare.conf
を使用しました)を作成して、cloudflareを信頼できるDNSとして定義します。
# IPv4 nameservers:
nameserver 1.1.1.1
nameserver 1.0.0.1
# IPv6 nameservers:
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001
次に、そのファイルへのシンボリックリンクを使用して、既存のファイルを削除します。
Sudo rm /etc/resolv.conf Sudo ln -s /usr/local/etc/resolv.cloudflare.conf /etc/resolv.conf
この時点で、ネームサーバーが正しいことを実行していることを確認できます。
$ Dig google.com
; <<>> Dig 9.11.2-P1-RedHat-9.11.2-1.P1.fc26 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41906
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1536
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 185 IN A 172.217.9.238
;; Query time: 10 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Thu Apr 12 18:00:37 EDT 2018
;; MSG SIZE rcvd: 55
注:ディストリビューションのNetworkManagerのdns=
変数のデフォルトが異なる場合は、それを更新して以下を含めます。
[main]
dns=symlink
次に、/ etc/resolve.confをシンボリックリンクにすると、NetworkManagerはresolve.confを更新しません。