ตั้งค่าเนมเซิร์ฟเวอร์ผิดโดย resolvconf และ NetworkManager


34

เซิร์ฟเวอร์ DNS 192.168.1.152ของฉันคือ

DNS นี้มอบให้แก่ลูกค้าโดย DHCP ไคลเอนต์ windows บน LAN ของฉันแก้ไขชื่ออย่างถูกต้องโดยใช้ 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

ฉันไม่ต้องการ "รหัสยาก" IP ของเซิร์ฟเวอร์ DNS ในไฟล์กำหนดค่าเพราะฉันจะไม่สามารถแก้ไขได้เมื่อฉันเปลี่ยนเครือข่าย

ฉันจะรับ resolvconf และ NetworkManager เพื่อตั้งค่า IP ของเซิร์ฟเวอร์ DHCP โดยอัตโนมัติได้/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

นี่คือ systemd-resolve --status หลังจากเปลี่ยน /etc/systemd/resolved.conf pastebin.com/AeUFQkyB เบราว์เซอร์ยังคงไม่สามารถแก้ไขชื่อได้
FireSpore

12
systemd เสียมาก DHCP บอกโฮสต์ว่า DNS ควรเป็นอย่างไร (และการตั้งค่าเครือข่ายอื่น ๆ ) คุณไม่ควรเปลี่ยนไฟล์ใด ๆ ในโฮสต์เพื่อให้สิ่งนี้ทำงานได้
teknopaul

4
ดูไม่ดีที่สุดคุณจะต้องทำเช่นนี้ทุกครั้งที่คุณเปลี่ยนเซิร์ฟเวอร์ DNS / เครือข่าย
Victor

1
คุณจะต้องกำหนดค่าใหม่ทุกครั้งที่การเปลี่ยนแปลง DNS IP (ตัวอย่างเช่นในเครือข่ายที่แตกต่างกัน)
วิกเตอร์

34

หรือเป็นที่รู้จักsystemdข้อผิดพลาด

วิธีแก้ไขชั่วคราวโดยไม่ต้องกำหนดค่าใหม่หาก DNS ของ DNS มีการเปลี่ยนแปลง

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

2
วิธีนี้ใช้งานได้ค่อนข้างคำสั่งโฮสต์และ nslookup แก้ชื่ออย่างถูกต้อง แต่ wget และเบราว์เซอร์ไม่ได้
FireSpore

1
นี่เป็นสิ่งที่ถูกต้อง ... ข้อผิดพลาดในปัจจุบันคือการเชื่อมโยงที่/etc/resolv.confมาจากการ/run/systemd/resolve/stub-resolv.confที่ bollox ควร/run/systemd/resolve/resolv.conf ทราบ/etc/resolv.confว่าไม่ได้มีอยู่จริงในกรณีใด
Mr Heelis

@FireSpore: pingทำงานแล้วใช่ไหม hostและnslookupชื่อโฮสต์แก้ไขที่แตกต่างจากหรือping wgetคุณอาจต้องหา/etc/nsswitch.confโซลูติโออิน
HongboZhu

9

ในที่สุดฉันก็ได้ทางออกสำหรับปัญหานี้สำหรับ Ubuntu 17.10 ตามค่าเริ่มต้น Ubuntu รุ่นนี้ใช้systemd-resolvedซึ่งฉันหวังว่าจะคงที่สำหรับเวอร์ชั่นถัดไป

ในการใช้ DNS ที่กำหนดเองแทนแคชท้องถิ่นที่แก้ไขโดย systemd ให้ทำดังต่อไปนี้:

  1. เพิ่มเนมเซิร์ฟเวอร์ใหม่ แก้ไขไฟล์ใน/etc/systemd/resolved.confรูปแบบ sudoer ที่นี่ฉันได้แสดงความคิดเห็นรายการ DNS และวาง DNS ของฉัน [Resolve] DNS=10.96.0.10 8.8.8.8 8.8.4.4

  2. ยกเลิก symlink จริงไป /etc/resolv.conf

  3. สร้าง symlink ใหม่ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. เริ่มบริการใหม่ sudo service systemd-resolved restart
  5. รีสตาร์ทตัวจัดการเครือข่าย sudo systemctl restart networking

และตอนนี้ถ้าคุณขุดชื่อที่เพิ่มโดย 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
คุณจะต้องกำหนดค่าใหม่ทุกครั้งที่การเปลี่ยนแปลง DNS IP (ตัวอย่างเช่นในเครือข่ายที่แตกต่างกัน)
วิกเตอร์

Victor มีทางออกที่ดีที่สุดหรือไม่? สิ่งนี้จะเหมือนกันถ้าคุณใช้การกำหนดค่าคงที่สุทธิ
Fabio Fumarola

คำตอบนี้ใช้ได้กับการกำหนดค่าทั้งแบบคงที่และแบบไดนามิก: askubuntu.com/a/974482/343617
วิกเตอร์

ขอบคุณวิธีแก้ปัญหาที่ฉันได้ชี้ให้เห็นคือคงที่ ฉันเห็นด้วย
Fabio Fumarola

สิ่งนี้ใช้ได้กับฉันในการติดตั้ง 18.04 ครั้งใหม่
JamesCW

1

ฉันรวบรวมสคริปต์ที่แก้ปัญหาของ Netplan ในปัจจุบันไม่สนับสนุนความสามารถในการแทนที่ DHCP ที่ให้เซิร์ฟเวอร์ DNS และคำสั่งค้นหาโดเมน มันสร้างไฟล์ Netplan yaml และกำหนดค่า systemd- แก้ไขให้ทำงานตามที่คาดไว้

################## 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

โซลูชันที่ใช้งานได้สำหรับฉันถูกโพสต์ที่นี่ในบล็อก

ใช้โปรแกรมแก้ไขนาโนเพื่อแก้ไข 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 (ตัวอย่างเช่นในเครือข่ายที่แตกต่างกัน)
วิกเตอร์

มันไม่ได้สง่างาม แต่มันก็ทำงานได้ดีในบางครั้งการก่อวินาศกรรมของฉัน
Rodrigo Ferrari

การแก้ไข/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 กับ A 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" หรือเซิร์ฟเวอร์ opennic 10 เซิร์ฟเวอร์: https://pastebin.com/JBfYVVtGหรือเซิร์ฟเวอร์ opennic ที่เร็วที่สุดสามตัวดังที่วัดโดย namebench รวมทั้งเนมเซิร์ฟเวอร์ ISP ด้วยแน่นอน บวกกับ Google แน่นอน systemd-resolvedไม่ใช่ปัญหา ฉันเป็นปัญหา


แม้ว่าคุณอาจไม่ต้องการแก้ไขไฟล์ แต่ไฟล์/usr/libเหล่านั้นอาจถูกเขียนทับในการอัปเกรดแพ็คเกจ ฉันคิดว่าไฟล์ที่เกี่ยวข้องบางแห่ง/etc/systemdเป็นวิธีที่จะไป (ควรมี/etc/systemd/resolved.confผู้ดูแลระบบพร้อมแก้ไข)
Olorin

1
man มติแล้ว. config.d, กับ d, ใช่ /etc/systemd/resolved.d เป็นสถานที่ ฉันสังเกตเห็นว่าเรามักจะต้อง mkdir /etc/ [pathpath.d] bob @ laptop l /etc/systemd/resolved.conf.d ls: ไม่สามารถเข้าถึง '/etc/systemd/resolved.conf.d': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
BobDodds

0

ในระบบของฉันฉันพบ symlink ที่ไม่ดี: /etc/resolv.confเป็น symlink ที่ชี้ไปที่/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ไฟล์เพื่อไม่ให้ใครสามารถแก้ไขได้รวมถึงผู้ใช้รูท


-3

ผมมีปัญหาเดียวกัน. รีบูตแต่ละครั้งไม่มีอะไรจะแก้ไข ฉันถอนการติดตั้งทุกอย่างแล้วติดตั้งใหม่ประมาณ 50 ครั้งแล้ว มันหักง่าย

ดังนั้นการแก้ไขคือ .... "เพียงแค่ใช้การตั้งค่าสองสามครั้งในแต่ละครั้งที่คุณบูตพีซีของคุณซึ่งจะช่วยให้ 90% ของชื่อโฮสต์สามารถแก้ไขได้

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

ดังนั้นให้ลบ 127.0.0.53 IP เป็นเนมเซิร์ฟเวอร์และป้อนอีกอันหนึ่งตัวอย่างเช่น google ดูเหมือนว่าที่อยู่ IP DNS ที่แท้จริงของฉันไม่สามารถระบุชื่อโฮสต์ได้ (แม้ว่าจะใช้กับเครื่องอื่น ๆ 10 เครื่องและอุปกรณ์ในบ้าน) แต่การทำงานของ google ก็ใช้ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.