DNS ที่ระบบ 127.0.0.53 ของ DNS ไม่สนใจการค้นหาบางอย่าง


14

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

ฉันใช้ Ubuntu 18.04 กับแล็ปท็อป Dell ของฉัน

ผลลัพธ์ไม่ถูกต้อง:

$ nslookup web1

Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find web1: SERVFAIL

ยังล้มเหลว

$ nslookup -i wlp3s0 web1
nslookup: couldn't get address for 'web1': not found

ผลลัพธ์ที่ถูกต้อง:

$ nslookup web1 192.168.1.1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

ข้อมูลการกำหนดค่า systemd- แก้ไข

$ 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 3 (wlp3s0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.1
          DNS Domain: wp.comcast.net

Link 2 (enp2s0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

ข้อมูลการกำหนดค่า NetworkManager

$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

ดังนั้นฉันจะได้รับ nslookup เพื่อคืนคำตอบที่ถูกต้องได้อย่างไร ลิงก์ 3 ดูเหมือนจะเป็นข้อมูลที่ถูกต้อง (การเชื่อมต่อ wifi ของฉัน) และ DNS ของฉันที่เราเตอร์กำลังส่งคืนคำตอบที่ถูกต้อง แต่แคชในเครื่องไม่เคยพยายามค้นหาที่อยู่ (หรือดูเหมือนว่า)


ลองอ่านโพสต์นี้และดูว่าวิธีแก้ปัญหาของคุณ: askubuntu.com/questions/1034064/ หรือไม่

ฉันไม่มี dns = dnsmasq ในไฟล์ปรับแต่งของฉัน ฉันกำลังอัปเดตคำถามเพื่อแสดงสิ่งนี้
schworak

คุณใช้ Ubuntu รุ่นใดและคุณสามารถอัพเดตโพสต์ด้วยการกำหนดค่า IP ได้หรือไม่

ฉันใช้ Ubuntu 18.04 กับแล็ปท็อป Dell
schworak

คุณช่วยลองได้nslookup -i wlp3s0 web1
ไหม

คำตอบ:


9

ไฟล์ resolv.conf ของคุณไม่ได้ชี้ไปยังตำแหน่งที่ไม่ถูกต้อง - ../run/systemd/resolve/stub-resolv.conf เป็นตำแหน่งที่ควรจะเป็นค่าเริ่มต้น

ปัญหาคือsystemd-resolvedไม่ส่งชื่อที่ไม่ได้เป็นจุดไปยัง DNS เห็นได้ชัดว่านี่ใช้งานได้ "ตามที่ออกแบบไว้" ดูปัญหา GitHub นี้ซึ่งระบุว่า "การแก้ไขจะไม่อนุญาตให้มีการค้นหาป้ายกำกับเดียวเพื่อรั่วไหลไปยัง unicast DNS"

ไม่ว่าคุณจะเห็นด้วยกับเหตุผลในปัญหา GitHub หรือไม่นั้นมีวิธีแก้ไข ไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ กับการตั้งค่าเริ่มต้นบนเครื่อง Ubuntu ของคุณ:

  1. ก่อนอื่น DNS ของ LAN ของคุณต้องมีชื่อโดเมน

    หากคุณใช้ dnsmasq ให้เพิ่มสิ่งต่อไปนี้/etc/dnsmasq.confในเซิร์ฟเวอร์ DNS ของคุณ:

    expand-hosts
    domain=your-domain # replace "your-domain" with domain of your choice
    

    ตอนนี้คุณควรจะสามารถแก้ไขชื่อโฮสต์ LAN ได้หากเพิ่มโดเมนของคุณ:

    nslookup web1.your-domain
    
  2. อันดับที่สองตรวจสอบให้แน่ใจว่าชื่อสำหรับโดเมน LAN ของคุณนั้นตั้งอยู่ในเซิร์ฟเวอร์ DHCP ของคุณด้วยหากชื่อนั้นแตกต่างจากเซิร์ฟเวอร์ DNS ของคุณ บนเซิร์ฟเวอร์ DHCP ของฉัน (เราเตอร์ของฉัน) การตั้งค่านี้เรียกว่า "ชื่อโดเมน"

    หากคุณต่ออายุ DHCP lease ของคุณบนกล่อง Ubuntu คุณควรเห็นคำสั่งค้นหาปรากฏใน/run/systemd/resolve/stub-resolv.conf:

    nameserver 127.0.0.53
    search your-domain
    

ตอนนี้ค้นหาweb1จะขยายไปยังweb1.your-domainซึ่งจะแก้ไขโดยใช้ DNS

$ nslookup web1
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   web1.your-domain
Address: 192.168.1.107

หมายเหตุว่าถ้าคุณใช้digแทนnslookup, digไม่ได้ใช้เส้นทางการค้นหาโดยเริ่มต้น - ใช้ของ+searchตัวเลือกในการเปิดใช้งาน


ก่อนที่จะรีบูตเครื่องมันค้นหา web1.mydomain.com ได้ดี แต่แน่นอนว่าการค้นหาเฉพาะ web1 ไม่ทำงาน ดังนั้นฉันรีบูตเครื่องและสำหรับชีวิตของฉันฉันไม่มีความคิดที่จะรับโดเมน Comcast แต่ตอนนี้ถ้าฉันค้นหา web1 มันตอบสนองกับ IP ที่ถูกต้อง แต่แสดงโดเมน comcast แทนโดเมนของฉัน มันแก้ไขได้ดังนั้นฉันไม่กังวลเกินไป แต่สิ่งที่ห่า ????
schworak

@schworak แปลก! เซิร์ฟเวอร์ DHCP ของคุณเป็นโมเด็ม Comcast ของคุณหรือไม่ คุณเห็นโดเมนที่แสดงใน/etc/resolv.confหรือในการส่งออกของทั้งnmcli -g allหรือsystemd-resolve --status? อาจลองดูสิ่งที่อยู่ในสัญญาเช่า DHCP ของคุณ ?
Laurence Gonsalves

ไม่ใช่โมเด็ม comcast ฉันมีเราเตอร์ SysLink พร้อมทำงาน DDWRT การตั้งค่า comcast จะถูกแทนที่โดยสิ้นเชิง ชื่อ comcast จะแสดงในไฟล์ resolv.conf ซึ่งสร้างขึ้นโดยอัตโนมัติเมื่อบูตเครื่อง ฉันไม่ได้กังวลเกินไปเกี่ยวกับมัน แต่มันแปลก
schworak

@ LaurenceGonsalves ขอบคุณมากสำหรับลิงค์ปัญหา github ฉันพบวิธีแก้ไขปัญหา แต่สิ่งนี้ช่วยให้ฉันทราบปัญหาของรากได้จริง
เกรกอรี่ Arenius

19

ฉันพบวิธีแก้ไขที่เหมาะกับฉัน

ไฟล์ resolv.conf ของฉันชี้ไปที่ผิด ดูเหมือนว่าจะเป็นข้อผิดพลาดใน Ubuntu เพราะมันเกิดขึ้นบนแล็ปท็อปของฉัน (เครื่องที่ฉันสังเกตเห็นปัญหานี้ครั้งแรกใน) และในการติดตั้งใหม่ของเซิร์ฟเวอร์ Ubuntu 18.04

ค่าเริ่มต้น

$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 39 Apr 26 12:07 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

ฉันลบสิ่งนี้แล้วชี้ไปที่ไฟล์ที่ถูกต้อง หลังจากรีบูตเครื่องนี่เป็นการแก้ไขปัญหาของฉัน และฉันยังสามารถสลับเครือข่ายในแล็ปท็อปของฉันและ DNS สลับอย่างถูกต้อง แน่นอนเมื่ออยู่บนเครือข่ายภายนอกฉันไม่สามารถแก้ไขเครื่องท้องถิ่นของฉันได้ แต่เป็นสิ่งที่คาดหวัง ทันทีที่ฉันเปลี่ยนกลับเป็นเครือข่ายท้องถิ่นของฉันเครื่องท้องถิ่นทั้งหมดจะแก้ไขได้อย่างถูกต้องเพราะเราเตอร์ของฉันคือ DNS

การแก้ไข

$ sudo rm -f /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 32 May 29 08:48 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf

$ sudo reboot

หลังจากนั้นทุกอย่างทำงานตามที่ฉันคาดไว้และ 127.0.0.53 จะไม่ถูกใช้งานอีกต่อไป

ผลลัพธ์ที่ถูกต้อง

$ nslookup web1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

$ nslookup google.com

Server:     192.168.1.1
Address:    192.168.1.1#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.7.174
Name:   google.com
Address: 2607:f8b0:4004:80e::200e

ubuntu-bug resolvconfกรุณารายงานข้อผิดพลาดนี้โดยใช้
Chai T. Rex

เมื่อฉันเริ่มส่งมันบอกว่า resolvconf (ไม่ได้ติดตั้ง) resolvconf และ systemd- แก้ไขสิ่งเดียวกันหรือไม่
schworak

systemd-resolveให้บริการโดยsystemdแพคเกจดังนั้นโปรดลองubuntu-bug systemdแทน
ชัยต. เร็กซ์

ขอบคุณ! ฉันไม่เคยใช้คุณสมบัติการรายงานข้อผิดพลาดนั้นมาก่อน ดีมาก.
schworak

1
ว้าวนี่มันบ้าไปแล้ว ขอขอบคุณ. ข้อผิดพลาดนี้เคยได้รับการแก้ไขหรือไม่ มันเป็นข้อผิดพลาดเฉพาะ Docker หรือไม่? ฉันคิดว่าการresolv.confตั้งค่าวิธีนี้สำหรับนักเทียบท่าบริดจ์เครือข่าย DNS ใช่มั้ย
void.pointer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.