Неправильный сервер имен, установленный resolvconf и NetworkManager

34

Мой DNS-сервер есть 192.168.1.152.

Этот DNS предоставляется клиентам по DHCP. Клиенты Windows в моей локальной сети правильно разрешают имена, используя этот DNS, а моя Ubuntu VM - нет.

Виртуальная машина настроена на мостовую сеть и должным образом предоставляется DNS-сервером, но мои локальные имена хостов не разрешаются nslookup или браузерами.

Вот nslookupодин из моих локальных доменов:

# nslookup unraid.local
Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find unraid.local: SERVFAIL

Вот что он должен решить, используя мой DNS-сервер:

# nslookup unraid.local 192.168.1.152
Server:     192.168.1.152
Address:    192.168.1.152#53

Name:   unraid.local
Address: 192.168.1.152

/etc/resolv.conf имеет неправильный сервер имен:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53

Я выполнил эту команду. Под DNS-серверами, это сбивает с толку, он указывает правильный сервер (и мой шлюз по умолчанию).

root@ubuntu:~# systemd-resolve --status
Global
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 2 (ens33)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.152
                      192.168.1.1

Я не хочу «жестко кодировать» IP-адрес DNS-сервера в файле конфигурации, потому что я не смогу разрешить его при смене сети.

Как мне получить resolvconf и NetworkManager для автоматической установки IP- адреса DHCP-сервера /etc/resolv.conf?

FireSpore
источник

Ответы:

37

Попробуйте отредактировать /etc/systemd/resolved.conf, добавив нужный DNS-сервер:

изменить это:

[Resolve]
#DNS=

к этому (но используйте тот, который вы хотите - это пример):

[Resolve]
DNS=192.168.1.152

после этого перезапустите сервис:

service systemd-resolved restart

И когда вы проверяете статус, вы должны увидеть

$ systemd-resolve --status
Global
         DNS Servers: 192.168.1.152

      DNSSEC NTA: 10.in-addr.arpa
                  16.172.in-addr.arpa
                  168.192.in-addr.arpa
                  17.172.in-addr.arpa
                  18.172.in-addr.arpa
                  19.172.in-addr.arpa
Леандро Носкоски
источник
Вот systemd-resolv --status после изменения /etc/systemd/resolved.conf pastebin.com/AeUFQkyB Браузеры по-прежнему не могут также разрешать имена.
FireSpore
12
systemd так сломан. DHCP сообщает хосту, каким должен быть DNS (и множество других сетевых настроек), вам не нужно изменять какие-либо файлы на хосте, чтобы это работало.
Текнопаул
4
Не выглядит оптимальным, вам придется делать это каждый раз, когда вы меняете DNS-сервер / сеть
Victor
1
Вам нужно будет каждый раз переконфигурировать изменения IP-адреса DNS (например, в разных сетях).
Виктор
34

Известная ошибка systemd .

Временный обходной путь без необходимости перенастраивать при изменении IP-адреса DNS:

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
reboot
teknopaul
источник
2
Это решение несколько сработало, команды host и nslookup правильно разрешают имена, а wget и браузеры - нет
FireSpore
1
это правильно ... текущая ошибка в том , что ссылка /etc/resolv.confидет из /run/systemd/resolve/stub-resolv.confкоторых является bollox должно быть /run/systemd/resolve/resolv.conf внимание , что на /etc/resolv.confсамом деле не существует в любом случае
г - н HEELIS
@ FireSpore: pingтогда работает? hostи nslookupразрешать имена хостов иначе, чем pingили wget. Возможно, вам придется искать /etc/nsswitch.confрешение.
ХунбоЖу
9

Я наконец-то получил решение этой проблемы для Ubuntu 17.10. По умолчанию эта версия Ubuntu использует systemd-resolved, что, я надеюсь, будет стабильным для следующих версий.

Чтобы использовать пользовательские днс вместо локального системного кеша, выполните следующие действия:

  1. добавить новые серверы имен. Отредактируйте файл /etc/systemd/resolved.confкак sudoer. Здесь я закомментировал запись DNS и разместил свой днс [Resolve] DNS=10.96.0.10 8.8.8.8 8.8.4.4

  2. отменить фактическую символическую ссылку на /etc/resolv.conf

  3. создать новую символическую ссылку sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. перезапустите сервис sudo service systemd-resolved restart
  5. перезапустите менеджер сети sudo systemctl restart networking

И теперь, если вы перейдете к имени, предоставленному вашим add dns, вы увидите, что запись разрешена dig nexus.default.svc.cluster.mydomain

Последний шаг - обновить порядок разрешения /etc/nsswitch.conf, поместив dns перед mdns4_minimal.

hosts           files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] myhostname
Фабио Фумарола
источник
1
Вам нужно будет каждый раз переконфигурировать изменения IP-адреса DNS (например, в разных сетях).
Виктор
Виктор, у тебя есть лучшее решение? это то же самое, если вы используете статическую конфигурацию сети
Фабио Фумарола,
Этот ответ работает как для статических, так и для динамических конфигураций: askubuntu.com/a/974482/343617
Виктор
спасибо, решение, которое я указал, было статичным. Я согласен
Фабио Фумарола
Это только работало для меня на новой установке 18.04
JamesCW
1

Я собрал скрипт, который решает проблему Netplan, которая в настоящее время не поддерживает возможность заменять DNS-серверы, предоставляемые DHCP, и порядок поиска доменов. Он создает файл yaml Netplan и настраивает systemd-resolved для работы, как ожидается.

################## Start Netplan config (renderer: NetworkManager)
#  Some useful commands for customisation
# NetConn=$(nmcli device show|grep GENERAL.CONNECTION|head -n1|awk '{print $2}')
# IP=$(nmcli device show|grep IP4.ADDRESS|head -n1|awk '{print $2}')
# GATEWAY=$(nmcli device show|grep IP4.GATEWAY|head -n1|awk '{print $2}')
# sed -i 's/renderer: networkd/renderer: NetworkManager/' //etc/netplan/01-netcfg.yaml
######################################
systemctl start NetworkManager
NIC=$(nmcli device show|grep GENERAL.DEVICE|head -n1|awk '{print $2}')

#####   create Netplan yaml config file
cat >/etc/netplan/01-netcfg.yaml <<EOF 
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
  network:
   version: 2
   renderer: NetworkManager
   ethernets:
EOF
echo "    ${NIC}:" >> /etc/netplan/01-netcfg.yaml
cat >>/etc/netplan/01-netcfg.yaml <<EOF
      dhcp4: yes
      nameservers:
        search: [abc.domain.edu, def.domain.edu]
        addresses: [10.10.11.22, 10.10.11.23]

EOF

#work around DNS resolv bug
systemctl stop systemd-resolved
sed -i 's/#DNS=/DNS=10.10.11.22 10.10.11.23/' /etc/systemd/resolved.conf
sed -i 's/#Domains=/Domains=abc.domain.edu def.domain.edu' /etc/systemd/resolved.conf
systemctl start systemd-resolved
systemctl restart NetworkManager
netplan apply
reboot
############### End Netplan Config
Wildstalker
источник
1

Решение, которое сработало для меня, размещено здесь, в моем блоге.

Используйте редактор nano для редактирования этих 2 файлов

nano /etc/resolv.conf
nano /etc/resolvconf/resolv.conf.d/head

Добавьте DNS-серверы, которые вы хотите использовать

nameserver 9.9.9.9
nameserver 127.0.0.1

Затем перезапустите сервис

service systemd-resolved restart

Окончательная проверка:

cat /etc/resolv.conf

Сделать nslookup

nslookup google.com 

Я просто использовал это, и это решило проблему на моем ноутбуке дома, но когда-нибудь в будущем, когда я буду вне моей домашней сети, я вижу, что это вызовет проблемы, потому что основной и дополнительный сервер DNS все еще будет моим домом серверы с их локальными адресами.

ookangzheng
источник
2
Вам нужно будет каждый раз переконфигурировать изменения IP-адреса DNS (например, в разных сетях).
Виктор
это не изящно, но это работает, потому что иногда саботирует мое время ложиться спать.
Родриго Феррари
Редактирование /etc/resolv.confне работает, так как файл будет перезаписан во время systemd-resolvedперезапуска. Просто отредактируйте /etc/systemd/resolved.conf. Смотрите мой ответ здесь: askubuntu.com/questions/977243/ubuntu-17-10-disable-netplan/…
EnzoR
1

Ваш /etc/resolv.conf проблема не в этом. systemd-resolvedпросто по умолчанию не настроен, поэтому он не сможет выполнить все поиски. Не стесняйтесь разглагольствовать о Unconfigured vs A Reasonable Default.

Вручную добавить сервер имен systemd-resolved. (редактирование на комментарий OLORIN в ниже , чтобы добавить mkdir, правильный путь /etcне для /libтого, чтобы выжить обновления системы)

sudo mkdir -p /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/00-my-dns-server-is.conf

Добавлять:

[Resolved]
Cache=yes
DNS=192.168.1.152

Затем...

sudo systemctl daemon-reload

systemd-resolvedэто умно, но, несмотря на то, что сопровождающие его не настроены, они просто выглядят глупо, потому что сопровождающие не верят в разумное значение по умолчанию. Мы можем разместить там 13 корневых серверов в Интернете, иначе говоря, «путь djb», или 10 серверов opennic: https://pastebin.com/JBfYVVtG, или три самых быстрых сервера opennic, согласно namebench. Плюс провайдеры имен провайдеров, конечно. Плюс Google, конечно. systemd-resolvedэто не проблема. Я проблема.

BobDodds
источник
Хотя вы, вероятно, не хотите редактировать файл /usr/lib- они, вероятно, будут перезаписаны при обновлении пакета. Я думаю, что соответствующий файл где-то в /etc/systemdпути (он уже должен быть /etc/systemd/resolved.confготов для редактирования администраторами).
Олорин
1
man resolved.conf.d, с d, да /etc/systemd/resolved.d это место. Я заметил, что нам часто приходится mkdir /etc/[path].d. bob @ laptop l /etc/systemd/resolved.conf.d ls: невозможно получить доступ к /etc/systemd/resolved.conf.d: нет такого файла или каталога
BobDodds
0

В моей системе я обнаружил плохую символическую ссылку: /etc/resolv.confбыла символическая ссылка, которая указывает на/run/systemd/resolve/stub-resolv.conf

Этот файл содержит только одну строку:

nameserver 127.0.0.53#53

В результате поиск DNS в локальной сети часто отсутствовал.

Итак, вместо этого я изменился /etc/reolv.conf чтобы указать на/run/systemd/resolve/resolv.conf

и теперь работает правильно.

Бано Габор
источник
0

Странно, но единственное решение, которое сработало для меня в Ubuntu 18.04, было тем, которое я нашел здесь :

Сначала измените /etc/resolv.conf, установив желаемый сервер имен :

# nano /etc/resolv.conf

Установите, например,

nameserver 8.8.8.8

А потом делай

# chattr +i /etc/resolv.conf

Это защищает /etc/resolv.confфайл, так что никто не может изменить его, включая пользователя root.

Артем С
источник
-3

У меня та же проблема. Каждая перезагрузка ничего не решит. Я удалил все и переустановил это уже около 50 раз. Это просто сломано.

так что исправление .... «просто применяйте несколько настроек каждый раз при загрузке вашего компьютера, что позволяет разрешать 90% имен хостов, но обновления и обновления wget и apt-get будут происходить случайно безо всякой причины»

cat /etc/systemd/resolved.conf

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=yes
#MulticastDNS=yes
#DNSSEC=no
#Cache=yes
#DNSStubListener=udp

При использовании Ubuntu 17.10 Desktop вы должны отредактировать один файл с надписью НЕ РЕДАКТИРОВАТЬ ДАННЫЙ ФАЙЛ BLAH BLAH BLAH

ну, это единственный способ, которым это работает ~!

root@nas:~# cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 8.8.8.8

Поэтому удалите IP-адрес 127.0.0.53 в качестве сервера имен и введите другой, например, Google. Похоже, мой фактический IP-адрес DNS также не разрешает имена хостов (хотя он работает на 10 других машинах и устройствах в доме), но Google работает нормально.

ravery
источник