Назад | Перейти на главную страницу

NetworkManager & dnsmasq - игнорировать автоматические настройки DNS

Я запускаю Arch Linux с настроенным NetworkManager и dnsmasq. Вроде все работает нормально, за исключением того, что я пытаюсь использовать новый 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

но я хочу использовать DNS CloudFlare независимо от локальной сети (и мне не нужно менять настройки подключения для каждой сети). Как я могу изменить порядок поиска DNS или отключить распознаватель маршрутизатора? Я пробовал добавить strict-order к /etc/NetworkManager/dnsmasq.d/local но безрезультатно.

Я не использую dnsmasq, но у меня была аналогичная проблема. Решение для меня было:

  • Поместите нужные DNS-серверы /etc/resolv.conf (ссылка)

    # IPv4 nameservers: 
    nameserver 1.1.1.1
    nameserver 1.0.0.1
    # IPv6 nameservers:
    nameserver 2606:4700:4700::1111
    nameserver 2606:4700:4700::1001
    
  • Скажите NetworkManager не изменять ваш /etc/resolv.conf написав в вашем /etc/NetworkManager/NetworkManager.conf (ссылка)

    [main]
    dns=none
    

Возможно, после этого перезапустите NetworkManager и т. Д. Если вы сделаете nmcli dev show он показывает DNS-сервер, о котором сообщает маршрутизатор:

IP4.DNS[1]:                             192.168.50.1

Но если вы используете nslookup (из bind-tools в Arch), похоже 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

Это начнется dnsmasq с помощью NetworkManager и поместите 127.0.0.1 в /etc/resolv.conf (ссылка). Однако я сделал не сделайте это так, потому что тогда dnsmasq не управляется systemctl и вы не завершаете автоматический вход в journalctl (возможно, есть способ обойти это).

Вместо этого я использовал следующую конфигурацию (ссылка):

  • /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 как показано выше, вы видите в journalctl после бега drill stackoverflow.com дважды:

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, второй раз обнаружил результат в кеше. Вы можете удалить log-queries из dnsmasq.conf если устраивает.

Немного лучший способ, упрощающий управление NetworkManager, - использовать символическую ссылку для /etc/resolv.conf. Это значение по умолчанию в моем дистрибутиве (Fedora), которое вы можете проверить на своем дистрибутиве, посмотрев на dns вариант в man 5 NetworkManager.conf.

Определите cloudflare как авторитетный DNS, сначала создав файл (я использовал /usr/local/etc/resolv.cloudflare.conf), содержащий облачные 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

Тогда NetworkManager не будет обновлять resolve.conf, если вы сделаете /etc/resolve.conf символической ссылкой,