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 или отключить резолвер маршрутизатора? Я пробовал добавить строгий порядок в /etc/NetworkManager/dnsmasq.d/local , но безрезультатно.

3
задан 4 April 2018 в 11:15
2 ответа

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

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

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

    .
    [main]
    dns=нет
    

Возможно, перезапустить 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

UPDATE: config с dnsmasq

Я попробовал конфигурацию с dnsmasq. NetworkManager имеет плагин dnsmasq, который можно использовать, установив в /etc/NetworkManager/NetworkManager. conf следующее:

[main]
dns=dnsmasq

Запустится dnsmasq с NetworkManager и вставит 127.0.0.1 в /etc/resolv.conf (ref). Однако, я сделал не так, потому что dnsmasq не управляется systemctl и вы автоматически не попадаете в logctl (может быть, есть какой-то способ обойти это).

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

  • /etc/NetworkManager/NetworkManager.conf:

    .
    [main]
    dns=нет
    
  • /etc/resolv.conf:

    nameserver 127.0.0.1
    
  • /etc/resolv.dnsmasq.conf:

     # IPv4 nameservers: 
     сервер имён 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
     лог-запросы
    

Перезапустите 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-запросы в /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-запросы из dnsmasq.conf, если они удовлетворены.

.
4
ответ дан 3 December 2019 в 05:39

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

Определите cloudflare как файл авторитетный DNS, сначала создав файл (я использовал /usr/local/etc/resolv.cloudflare.conf ), содержащий DNS Cloudflare:

# 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 символической ссылкой ,

1
ответ дан 3 December 2019 в 05:39

Теги

Похожие вопросы