web-dev-qa-db-ja.com

NetworkManager&dnsmasq-自動DNS設定を無視する

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に追加しようとしましたが、うまくいきませんでした。

4
Taco de Wolff

私はdnsmasqを使用していませんが、同様の問題がありました。私のための解決策は:

  • 必要なDNSサーバーを/etc/resolv.confref )に配置します

    # 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を使用した構成

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-queriesdnsmasq.confから削除できます。

5
tsj

NetworkManagerの管理を簡略化する少し良い方法は、/etc/resolv.confのシンボリックリンクを使用することです。これは私のディストリビューション(Fedora)のデフォルトです。これは、man 5 NetworkManager.confdnsオプションを確認することで、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を更新しません。

1
Poynter