Я запускаю 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. 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 символической ссылкой,