resolvconf 및 NetworkManager가 잘못된 이름 서버를 설정했습니다.


34

내 DNS 서버는 192.168.1.152입니다.

이 DNS는 DHCP를 통해 클라이언트에 제공됩니다. LAN의 Windows 클라이언트는 해당 DNS를 사용하여 이름을 올바르게 확인하지만 Ubuntu VM은 그렇지 않습니다.

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

네트워크를 변경할 때 확인할 수 없기 때문에 구성 파일에 DNS 서버의 IP를 "하드 코딩"하고 싶지 않습니다.

resolvconf 및 NetworkManager가 DHCP 서버의 IP 를 자동으로 설정하도록하려면 /etc/resolv.conf어떻게해야합니까?

답변:


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

/etc/systemd/resolved.conf pastebin.com/AeUFQkyB를 변경 한 후 systemd-resolve --status는 여전히 브라우저 이름 확인에 실패합니다.
FireSpore

12
systemd가 너무 망가졌습니다. DHCP는 호스트에게 DNS가 무엇인지 (및 기타 여러 네트워크 설정) 알리기 위해 호스트의 파일을 변경할 필요가 없음을 알려줍니다.
teknopaul

4
최적으로 보이지 않으면 DNS 서버 / 네트워크를 변경할 때마다이 작업을 수행해야합니다.
Victor

1
DNS IP가 변경 될 때마다 (예 : 다른 네트워크에서) 재구성해야합니다.
Victor

34

알려진 시스템 버그 .

DNS IP가 변경 될 경우 재구성 할 필요가없는 임시 해결 방법 :

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
reboot

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작동합니까? hostnslookup해결 호스트 이름을 다르게에서 ping또는 wget. 당신은 /etc/nsswitch.confsolutioin 을 조사해야 할 수도 있습니다 .
HongboZhu

9

마침내 우분투 17.10에 대한이 문제에 대한 해결책을 얻었습니다. 기본적 으로이 버전의 Ubuntu는를 사용하므로 systemd-resolved다음 버전에서 안정적이기를 바랍니다.

로컬 시스템 분석 캐시 대신 사용자 정의 dns를 사용하려면 다음을 수행하십시오.

  1. 새로운 네임 서버를 추가하십시오. 파일 /etc/systemd/resolved.conf을 sudoer로 편집하십시오 . 여기에 DNS 항목을 주석 처리하고 내 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.confdns를 mdns4_minimal 앞에 배치하여 의 순서를 업데이트 하는 것입니다.

hosts           files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] myhostname

1
DNS IP가 변경 될 때마다 (예 : 다른 네트워크에서) 재구성해야합니다.
Victor

빅터 최고의 솔루션이 있습니까? 정적 네트워크 설정을 사용하는 경우에도 마찬가지입니다
Fabio Fumarola

이 답변은 정적 및 동적 구성 모두에 적용됩니다. askubuntu.com/a/974482/343617
Victor

고마워, 내가 지적한 해결책은 정적이었다. 동의합니다
Fabio Fumarola

이것은 단지 새로운 18.04 설치에서 나를 위해 일했다
JamesCW

1

현재 DHCP 제공 DNS 서버와 도메인 검색 순서를 대체하는 기능을 지원하지 않는 Netplan 문제를 해결하는 스크립트를 작성했습니다. Netplan yaml 파일을 작성하고 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

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 서버가 여전히 내 집이기 때문에 문제가 발생할 수 있음을 알 수 있습니다 LAN 주소를 가진 서버.


2
DNS IP가 변경 될 때마다 (예 : 다른 네트워크에서) 재구성해야합니다.
Victor

우아하지는 않지만 gcloud가 때때로 취침 시간을 방해합니다.
로드리고 페라리

다시 시작 /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 way"또는 10 개의 opennic 서버 ( https://pastebin.com/JBfYVVtG) 또는 namebench로 측정 한 가장 빠른 3 개의 opennic 서버에 넣을 수 있습니다. 물론 ISP 네임 서버도 있습니다. 물론 Google도 마찬가지입니다. systemd-resolved문제가 아닙니다. 나는 문제입니다.


파일을 편집하고 싶지는 않지만 /usr/lib패키지 업그레이드시 파일을 덮어 쓰게됩니다. 어딘가에 해당 파일 /etc/systemd이 이동하는 방법 이라고 생각합니다 (이미 /etc/systemd/resolved.conf관리자가 편집 할 준비가되어 있어야합니다).
Olorin

1
d와 함께 man resolved.conf.d, yes /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

이상하지만 우분투 18.04에서 나를 위해 일한 유일한 해결책은 내가 여기서 찾은 것입니다 .

먼저 /etc/resolv.conf원하는 네임 서버 를 설정하여 변경 하십시오 .

# nano /etc/resolv.conf

예를 들어

nameserver 8.8.8.8

그리고 나서

# chattr +i /etc/resolv.conf

이것은 /etc/resolv.conf루트 사용자를 포함하여 아무도 파일을 수정할 수 없도록 파일을 보호 합니다.


-3

나는 같은 문제를 가지고있다. 재부팅 할 때마다 아무것도 해결되지 않습니다. 나는 모든 것을 제거하고 약 50 번 이미 다시 설치했습니다. 그것은 단지 깨졌습니다.

그래서 수정은 .... "PC를 부팅 할 때마다 몇 가지 설정 만 적용하면 호스트 이름의 90 %를 확인할 수 있지만 wget 및 apt-get 업데이트 및 업그레이드는 이유없이 무작위로 실패합니다"

고양이 /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

따라서 이름 서버로 127.0.0.53 IP를 제거하고 google과 같은 다른 IP를 입력하십시오. 실제 DNS IP 주소가 호스트 이름을 확인하지 못하는 것으로 보이지만 (집안의 다른 컴퓨터 및 장치에서 작동하더라도) Google은 정상적으로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.