Я использую 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
, но безрезультатно.
Я не использую 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
Я попробовал конфигурацию с 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
, если они удовлетворены.
Несколько лучший способ, упрощающий управление 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 символической ссылкой ,