Score:0

Ubuntu 20.04 แก้ไขการรอผลลัพธ์ IPV6 ที่ถูกปฏิเสธด้วย dnsmasq

ธง cn

TL;ดร

การสืบค้น DNS ของฉันช้าเนื่องจากการสืบค้นที่แก้ไขโดย systemd สืบค้นเซิร์ฟเวอร์ DNS บน IPv4 ได้สำเร็จ แต่สืบค้นซ้ำบน IPv6 หลังจากที่เซิร์ฟเวอร์ DNS ตอบกลับด้วย REFUSED นี่เป็นการกำหนดค่าที่แก้ไขแล้วหรือไม่ ปัญหา dnsmasq? หรือข้อผิดพลาด?

ฉันมีสต็อก ubuntu 20.04 ติดตั้งเชื่อมต่อกับ dnsmasq ที่ทำงานบนอุปกรณ์ air gapped (ubiquity edgerouter) ด้วยโดเมน 'bar' ระดับบนสุด (จำ air gapped ได้ แต่ดูเหมือนจะไม่สำคัญว่านี่คืออะไร - เช่น. com ฯลฯ ) . คำขอ DNS แก้ไขได้อย่างรวดเร็วผ่านไคลเอนต์ Mac และ Windows สำหรับ Ubuntu การสืบค้น DNS จะใช้เวลาประมาณ 5 วินาทีในการแก้ไข เมื่อค้นหาไปรอบ ๆ ปัญหา DNS ของ Ubuntu จะถูกกล่าวถึงในหลาย ๆ ที่ แต่พฤติกรรมพื้นฐานที่ฉันเห็นนั้นไม่เป็นไปตามความรู้ของฉัน

ปัญหาระดับบนสุด: ถ้าฉัน ping เครื่องโดยใช้ Ubuntu จะใช้เวลาประมาณ 5 วินาทีในการตอบกลับกลับมา:

$ ปิงฟู
#ผ่านไปประมาณ 5 วินาที
PING foo.bar (10.2.1.132) ข้อมูล 56(84) ไบต์
64 ไบต์จาก foo.bar (10.2.1.132): icmp_seq=1 ttl=63 เวลา=1.10 ms
64 ไบต์จาก foo.bar (10.2.1.132): icmp_seq=2 ttl=63 เวลา=1.02 ms
...

ซึ่งดูเหมือนว่าปัญหาการหมดเวลาที่ชัดเจน ที่น่าสนใจคือมันแก้ไขได้ วิ่ง สถานะการแก้ไข ให้ผลลัพธ์มาตรฐานแก่ฉันซึ่งรวมถึง DNS ที่จัดทำโดยสัญญาเช่า DHCP ที่ออกโดย dnsmasq

สถานะ $ resolutionctl

...
ของมากมาย
...

ลิงค์ 3 (enp0s25)
      ขอบเขตปัจจุบัน: DNS     
การตั้งค่า DefaultRoute: ใช่     
       การตั้งค่า LLMNR: ใช่     
การตั้งค่า MulticastDNS: ไม่      
  การตั้งค่า DNSOverTLS: ไม่      
      การตั้งค่า DNSSEC: ไม่      
    รองรับ DNSSEC: ไม่      
         เซิร์ฟเวอร์ DNS: 10.1.1.1
          โดเมน DNS: ~.      
                      บาร์

การหยุดแก้ไขแล้วและทำงานในโหมดดีบักดูเหมือนจะแสดงปัญหา เครื่อง Ubuntu สอบถามเซิร์ฟเวอร์ DNS ผ่าน IPv4 และได้รับคำตอบทันที จากนั้นจะสอบถามซ้ำๆ ผ่าน IPv6 ซึ่งเซิร์ฟเวอร์ DNS ตอบกลับด้วย REFUSED จนกว่าจะหมดเวลา

$ sudo systemctl หยุด systemd- แก้ไขแล้ว
$ sudo SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-resolved
...
การบันทึกการเริ่มต้นจำนวนมาก
...
รับแพ็คเก็ตการสืบค้น DNS stub UDP สำหรับ id 40457
ค้นหา RR สำหรับ foo.bar ใน A
เปลี่ยนเป็นเซิร์ฟเวอร์ DNS 10.1.1.1 สำหรับอินเทอร์เฟซ enp0s25
แคชพลาดสำหรับ foo.bar IN A
ธุรกรรม 42924 สำหรับ <foo.bar IN A> ขอบเขต dns บน enp0s25/*
การใช้ระดับคุณลักษณะ UDP+EDNS0 สำหรับธุรกรรม 42924
ใช้เซิร์ฟเวอร์ DNS 10.1.1.1 สำหรับธุรกรรม 42924
กำลังส่งแพ็คเก็ตแบบสอบถามด้วย id 42924
กำลังประมวลผลคำค้นหา...
รับแพ็คเก็ตการสืบค้น DNS stub UDP สำหรับ id 59119
ค้นหา RR สำหรับ foo.bar ใน AAAA
แคชหายไปสำหรับ foo.bar ใน AAAA
ธุรกรรม 21734 สำหรับ <foo.bar IN AAAA> ขอบเขต dns บน enp0s25/*
การใช้ระดับคุณลักษณะ UDP+EDNS0 สำหรับธุรกรรม 21734
ใช้เซิร์ฟเวอร์ DNS 10.1.1.1 สำหรับธุรกรรม 21734
กำลังส่งแพ็คเก็ตแบบสอบถามด้วย id 21734
กำลังประมวลผลคำค้นหา...
กำลังประมวลผลแพ็คเก็ตขาเข้าในธุรกรรม 42924 (rcode=SUCCESS)
ตรวจสอบแล้ว เราได้รับการตอบกลับที่ระดับคุณลักษณะ UDP+EDNS0 จากเซิร์ฟเวอร์ DNS 10.1.1.1
เพิ่มรายการแคชที่ไม่ผ่านการรับรองความถูกต้องในเชิงบวกสำหรับ foo.bar ใน 7200 บน enp0s25/INET/10.1.1.1
ธุรกรรม 42924 สำหรับ <foo.bar IN A> บนขอบเขต dns บน enp0s25/* เสร็จสมบูรณ์แล้วด้วย <success> จากเครือข่าย (ไม่ได้ลงนาม)
กำลังส่งแพ็กเก็ตตอบกลับด้วย id 40457 บนอินเทอร์เฟซ 1/AF_INET
พ้นธุรกรรม 42924.
กำลังประมวลผลแพ็กเก็ตขาเข้าในธุรกรรม 21734 (rcode=REFUSED)
เซิร์ฟเวอร์ส่งคืนการปฏิเสธ สลับเซิร์ฟเวอร์ และลองใหม่อีกครั้ง
ลองทำรายการใหม่ 21734
แคชหายไปสำหรับ foo.bar ใน AAAA
ธุรกรรม 21734 สำหรับ <foo.bar IN AAAA> ขอบเขต dns บน enp0s25/*
การใช้ระดับคุณลักษณะ UDP+EDNS0 สำหรับธุรกรรม 21734
กำลังส่งแพ็คเก็ตแบบสอบถามด้วย id 21734
กำลังประมวลผลแพ็กเก็ตขาเข้าในธุรกรรม 21734 (rcode=REFUSED)
เซิร์ฟเวอร์ส่งคืนการปฏิเสธ สลับเซิร์ฟเวอร์ และลองใหม่อีกครั้ง
...
ทำซ้ำเป็นเวลา ~ 5 วินาที
...
ธุรกรรม 44267 สำหรับ <foo.bar IN AAAA> บนขอบเขต dns บน enp0s25/* เสร็จสมบูรณ์แล้วด้วย <ความพยายามสูงสุดที่เข้าถึง> จากเครือข่าย (ไม่ได้ลงนาม)
พ้นธุรกรรม 44267.

ยังแนะนำว่านี่คือปัญหา:

$ nslookup ฟู
เซิร์ฟเวอร์: 127.0.0.53
ที่อยู่: 127.0.0.53#53

คำตอบที่ไม่ได้รับอนุญาต:
ชื่อ: foo.bar
ที่อยู่: 10.2.1.132
...
ประมาณ 5 วินาทีผ่านไป
...
;; หมดเวลาการเชื่อมต่อ; ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้

#สิ่งนี้ส่งคืนทันที
$ nslookup -query=A foo
เซิร์ฟเวอร์: 127.0.0.53
ที่อยู่: 127.0.0.53#53

คำตอบที่ไม่ได้รับอนุญาต:
ชื่อ: foo.bar
ที่อยู่: 10.2.1.132

# ขณะนี้หมดเวลาในเวลาประมาณ 5 วินาที
$ nslookup -query=AAAA ฟู
;; หมดเวลาการเชื่อมต่อ; ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้

คำถาม:

  1. หากเซิร์ฟเวอร์ DNS ให้คำตอบ IPv4 ที่ดี เหตุใดเครื่องอูบุนตูจึงรอในขณะที่พยายามซ้ำๆ เพื่อรับคำตอบ IPv6 ไม่สำเร็จ

  2. นี่เป็นปัญหาการกำหนดค่า Ubuntu หรือปัญหา dnsmasq หรือไม่

ขอบคุณล่วงหน้า.

tegtmeye avatar
cn flag
BTW ฉันพบว่ามีคนโพสต์ปัญหาที่คล้ายกันในรายชื่อผู้รับจดหมาย dnsmasq: https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2019q2/013094.html
tegtmeye avatar
cn flag
เนื้อหาเพิ่มเติมบางอย่างที่ทำให้ฉันคิดว่ามีปัญหากับทั้งการแก้ไขและ dsnmasq ความจริงที่ว่า dnsmasq กำลังส่งคืน REFUSED ดูเหมือนจะเป็นข้อผิดพลาด (ดู RFC 4074 "พฤติกรรมที่ไม่เหมาะสมทั่วไปต่อการสืบค้น DNS สำหรับที่อยู่ IPv6") หากไม่ทราบว่าที่อยู่ IPv6 คืออะไร ควรส่งคืนการตอบกลับที่ว่างเปล่าตาม RFC แต่บางทีฉันอาจตีความหมายผิด ที่กล่าวว่าการแก้ไขไม่ควรกระแทกเซิร์ฟเวอร์ DNS ซ้ำ ๆ หลังจากที่ปฏิเสธที่จะตอบคุณ ดูสิ่งนี้ด้วย: https://lists.isc.org/pipermail/bind-users/2018-April/100056.html https://bugs.centos.org/view.php?id=16317
Score:0
ธง jp

ฉันพบปัญหาเดียวกันทุกประการขณะกำหนดค่า แก้ไข systemd แล้ว และ dnsmasq.

สำหรับคำถาม 1 ของคุณ ฉันไม่สามารถหาสาเหตุได้ แก้ไข systemd แล้ว สอบถาม AAAA บันทึกซ้ำในขณะที่ไม่มีการตอบกลับจาก dnsmasq.

สำหรับคำถามที่ 2, the dnsmasq ไม่ได้รับการกำหนดค่าอย่างถูกต้องเพื่อเพิ่มระเบียนสำหรับ ฟูบาร์. คุณเพียงเพิ่ม บันทึกสำหรับชื่อโดเมนนี้ ในขณะที่ แก้ไข systemd แล้ว แบบสอบถามสำหรับทั้งสอง และ AAAA บันทึกในเวลาเดียวกัน dnsmasq ไม่มีความคิดใน AAAA บันทึกสำหรับโดเมนนี้จึงส่งต่อแบบสอบถามนี้ไปยังเซิร์ฟเวอร์ upsteam ฉันไม่ชัดเจนว่าจะเกิดอะไรขึ้นต่อไป แต่ dnsmasq ไม่ให้คำตอบที่คาดหวัง

คุณไม่ได้กล่าวถึงวิธีการกำหนดค่า dnsmasq. ในการทดสอบของฉัน การกำหนดค่าใด ๆ ด้านล่างจะทำงานตามที่คาดไว้ โปรดทราบว่ามีความแตกต่างระหว่าง 1 และ 2, 3

  1. ที่อยู่=/foo.bar/10.2.1.132/
  2. ท้องถิ่น=/bar/, addn-hosts=/tmp/hosts และเพิ่ม 10.2.1.132 fo.bar ถึง /tmp/โฮสต์
  3. บันทึกโฮสต์=foo.bar,10.2.1.132 และ ท้องถิ่น=/bar/

จาก dnsmasq หน้าคนสำหรับตัวเลือก --ท้องถิ่น

อนุญาตอีกอย่างคือแฟล็ก -S ซึ่งให้โดเมน แต่ไม่มีที่อยู่ IP สิ่งนี้บอก dnsmasq ว่าโดเมนเป็นแบบโลคัลและอาจตอบคำถามจาก /etc/hosts หรือ DHCP แต่ไม่ควรส่งต่อการสืบค้นในโดเมนนั้นไปยังเซิร์ฟเวอร์อัพสตรีมใดๆ --local เป็นคำพ้องความหมายสำหรับ --server เพื่อทำให้ไฟล์คอนฟิกูเรชันชัดเจนขึ้นในกรณีนี้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา