Ubuntu 18.04. โดเมนในพื้นที่การค้นหา DNS ไม่ทำงาน


18

ฉันใช้ Raspberry Pi 3 กับ Ubuntu 18.04 ที่ บริษัท ของฉันเรามีเซิร์ฟเวอร์ DNS และสองสามโดเมนที่มี ".local" ฉันรู้ว่าเทคนิคนี้ไม่ถูกต้องและควรเป็น ".lan" แทนเนื่องจาก. local ถูกสงวนไว้สำหรับ multicast dns แต่นั่นคือวิธีที่มันเป็นและไม่สามารถเปลี่ยนแปลงได้ง่าย ดังนั้นบนเครื่อง windows ของฉันฉันสามารถ ping และเรียกดูชื่อโดเมนเหล่านั้นได้โดยไม่มีปัญหา บน Ubuntu ของฉัน แต่ฉันทำไม่ได้

ฉันไม่สามารถใช้ IP ได้เพราะบางโดเมนอยู่ในเครื่องเดียวกันและเว็บเซิร์ฟเวอร์ IIS จะเรียงลำดับสิ่งที่เกิดขึ้น

ฉันค้นหาแล้วมันก็เกิดขึ้นบ่อย:

อย่างไรก็ตามการเปลี่ยน /etc/nsswitch.conf ไม่ได้ทำเพื่อฉัน ฉันเหนื่อย

  • โฮสต์: ไฟล์ mdns4_minimal [NOTFOUND = return] dns myhostname # default
  • โฮสต์: ไฟล์ DNS
  • โฮสต์: ไฟล์ mdns4_minimal [NOTFOUND = ดำเนินการต่อ] dns myhostname
  • โฮสต์: ไฟล์ mdns4 [NOTFOUND = return] dns myhostname
  • โฮสต์: ไฟล์ mdns4 [NOTFOUND = ดำเนินการต่อ] dns myhostname
  • โฮสต์: ไฟล์ dns mdsn4_minimal myhostname
  • ครอบครัว: dns
  • อื่น ๆ ไม่กี่

ไม่ทำงานเลย ฉันพยายามรีบูตเครื่องหลังจากมีการเปลี่ยนแปลงเช่นกัน ฉันพยายามบอก avahi ว่า domain-name = alocal ใน /etc/avahi/avahi-daemon.conf ไม่ทำงานหลังจากรีสตาร์ทบริการไม่ทำงานหลังจากรีบูต หลังจากสิ่งนี้ไม่ทำงานฉันพยายามปิดการใช้งานบริการ avahi-daemon ทั้งหมด

sudo systemctl disable avahi-daemon

หลังจากรีบูตฉันลองพีชคณิตสองสามครั้งใน /etc/nsswitch.conf อีกครั้งโดยไม่มีผลกระทบ

ด้วยการตั้งค่าปัจจุบันของฉันในโฮสต์ (ไฟล์ DNS) ฉันได้รับคำตอบนี้:

dig login.name.local # not the actual name

; <<>> Dig 9.11.3-1ubuntu1.1-Ubuntu <<>> login.name.local
;; global options: +cmd
;; Got answer:
;; WARNING .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33538
;; flags: qr rd ra; QUERY: 1, ANSWER:0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;login.name.local. 0     IN     A

;; Query time: 2msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Aug 23 10:51:50 CEST 2018
;; MSG SIZE  rcvd: 56

อย่างไรก็ตามเมื่อฉันสั่งให้ขุดสอบถามเซิร์ฟเวอร์โดยตรงฉันได้รับคำตอบที่ถูกต้อง:

dig @dnsIP login.name.local
; <<>> Dig 9.11.3-1ubuntu1.1-Ubuntu <<>> login.name.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57866
;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;login.name.local. 0     IN     A

;; ANSWER SECTION:
login.name.local. 3600 IN    A        serverIP

;; Query time: 2msec
;; SERVER: dnsIP#53(dnsIP)
;; WHEN: Thu Aug 23 10:51:50 CEST 2018
;; MSG SIZE  rcvd: 56

Ubuntu รุ่นนี้ใช้ netplan กับผู้จัดการเครือข่าย IP DNS ที่ถูกต้องนั้นอยู่ในรายการแน่นอน (อันที่จริงมันเป็น DNS หลัก) นอกจากนี้ dnsIp เหมือนกับ serverIP แต่นั่นไม่ควรเป็นปัญหา

Ping หรือเชื่อมต่อผ่านเบราว์เซอร์และแน่นอนว่ามันไม่ทำงาน ไม่มีใช้แบบสอบถาม DNS

ฉันกำลังสูญเสียในสิ่งที่ต้องทำ แน่นอนว่าเราไม่สามารถเปลี่ยนเป็นชื่อโดเมนอื่นได้ ฉันใส่ชื่อเซิร์ฟเวอร์ใน / etc / hosts แต่นั่นเป็นเพียงวิธีแก้ปัญหาชั่วคราว


เปลี่ยน resolv.conf ตามที่ jeremfg แนะนำให้ใช้กับฉันหลังจากไล่ตามหางไปรอบ ๆ เป็นเวลาหลายชั่วโมง tnx
user3529828

คำตอบ:


14

ฉันพบปัญหาคล้ายกันมาก (ถ้าไม่เหมือนกัน) ใน Linux Mint 19 (Tara) ฉันพยายามที่จะแก้ปัญหาโดยการรวมข้อมูลที่แตกต่างกัน 3 ชิ้น ดูเหมือนว่าทั้งหมดจะเกี่ยวข้องกับการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้ด้วยการแก้ไข systemd

อันดับแรกใช่ฉันต้องกำหนดค่า/etc/nsswitch.confเหมือนที่คุณทำและคาดหวัง ตราบใดที่ DNS มาก่อน mdns คุณควรจะดี ฉันจบลงง่ายๆ

hosts:          files dns myhostname

อ้างอิง: /unix//a/457172/271210

ก่อนที่จะอัปเกรดเป็น Mint เวอร์ชันนี้เป็นสิ่งเดียวที่ฉันต้องทำ ตอนนี้ฉันยังได้ทำการเปลี่ยนแปลงอีกสองรายการด้านล่างเพื่อให้ทำงานได้ ...


หลังจากนั้นฉันได้กำหนดค่าโดเมนการค้นหาของฉันดังนั้นระบบที่ได้รับการแก้ไขจะทำงานได้ตามที่ต้องการ ดังนั้นผมจึงได้แก้ไขไฟล์/etc/systemd/resolved.confที่โดเมนการตั้งค่าภายใต้[แก้ไข]ส่วน ในกรณีของฉันมันดูเหมือน:

[Resolve]
#DNS=
#FallbackDNS=
Domains=trilliant.local
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

อ้างอิง: /ubuntu//a/1031271/872881

ฉันได้เปลี่ยนการกำหนดค่า avahi เป็นอย่างอื่น ("mdns" ถ้าฉันจำได้อย่างถูกต้อง แต่ไม่สำคัญ) มันไม่ควรจะต้องจากความเข้าใจของฉัน เพียงเพิ่มเพื่อความสมบูรณ์


แต่มันไม่ทำงานจนกว่าฉันจะได้เรียกสิ่งต่อไปนี้:

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

อ้างอิง: /ubuntu//a/938703/872881

หลังจากเรียกสิ่งนี้ทุกอย่างก็เริ่มทำงานได้อย่างสมบูรณ์แบบและเป็นไปตามคาด!

ดังนั้นจึงเป็นไปได้ว่าฉันไม่จำเป็นต้องเปลี่ยนไฟล์/etc/systemd/resolved.confแต่ฉันเก็บการเปลี่ยนแปลงนี้ไว้เนื่องจากมันสมเหตุสมผลและอนุญาตให้ฉันพิมพ์ชื่อเครื่องโดยไม่ต้องใช้ FQDN ทั้งหมดเพื่อให้การแก้ปัญหา DNS ทำงานได้ .


คุณสามารถใส่บรรทัดสุดท้ายในการเริ่มต้นและฉันเดาว่าคุณจะได้ upvotes มากขึ้นโดยทำเช่นนั้น
HongboZhu

@HongboZhu ฉันจะถ้าฉันรู้ว่าสำหรับความจริงที่ว่ามีการเปลี่ยนแปลงเพียงอย่างเดียวที่จะต้องได้รับโดเมนท้องถิ่นทำงาน ฉันค่อนข้างมั่นใจว่าคุณยังคงต้องการ dns มากกว่า mdns ในการกำหนดค่าตัวแก้ไขด้วย ฉันถือว่าความคิดเห็นของคุณเกี่ยวข้องกับการกำหนดค่าโดเมนตรงกลางหรือไม่ ถ้าเป็นเช่นนั้นใช่ฉันคิดว่าฉันสามารถวางสิ่งนี้ไว้ท้ายที่สุดเป็นการเปลี่ยนแปลงที่ไม่จำเป็น แต่ต้องใช้อีกสองชิ้น IMHO
jeremfg

1
ในการติดตั้งใหม่ 18.04.2 ของฉันเพียงแค่เปลี่ยน "เจ้าภาพ" การสั่งซื้อที่ nsswitch.conf ทำงานแล้ว
Tomofumi

17

คำตอบที่ยอมรับไม่ได้แก้ปัญหาของฉัน ไม่มีอะไรเกี่ยวข้องกับ avahi - ฉันไม่ได้ติดตั้งบริการ avahi ฉันได้ตั้งค่าระบบของฉันเพื่อรับ ip และการตั้งค่าเซิร์ฟเวอร์ dns จาก DHCP อย่างไรก็ตาม DNS ที่ให้มาไม่ได้ถูกตรวจสอบสำหรับการค้นหาโดยใช้. local

ปัญหาที่แท้จริงคือ Ubuntu 18.4 มีการเชื่อมโยง sym ของ resolv.conf กับไฟล์ stub ที่ชี้ไปที่ localhost สำหรับการจำแนกชื่อ การจำแนกชื่อ Localhost dns หมายความว่าระบบปฏิเสธที่จะตรวจสอบเซิร์ฟเวอร์ DNS ที่ระบุสำหรับชื่อ. local เชื่อว่า (ไม่ถูกต้อง) ว่าชื่อดังกล่าวไม่ถูกต้อง นี่คือการตั้งค่าเริ่มต้นของ /etc/resolv.conf:

ls -la /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Jan 22 13:26 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

เนื้อหาของไฟล์ stub คือ (ลบความคิดเห็น):

 cat /run/systemd/resolve/stub-resolv.conf
 .. removed comments..  
nameserver 127.0.0.53
    search reddog.microsoft.com

conf 'จริง' การแก้ไขมีการตั้งค่า 'ถูกต้อง' DNS (จาก DHCP):

cat /run/systemd/resolve/resolv.conf

..removed comments..
nameserver 10.168.200.250 # This is my server that can resolve .local
nameserver 208.67.220.220 # these are optional, fallback dns servers
nameserver 208.67.222.222
# Too many DNS servers configured, the following entries may be ignored.
nameserver 8.8.8.8
search reddog.microsoft.com

เพื่อให้ระบบใช้ตัวแก้ไข DNS ที่คุณต้องการแทน localhost คุณเปลี่ยน symlink ให้ชี้ไปที่ /run/systemd/resolve/resolv.conf แทนที่จะเป็น /run/systemd/resolve/stub-resolv.conf:

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

หลังจากนี้ความละเอียดของ. local เริ่มทำงาน ไม่จำเป็นต้องรีบู๊ตหรือรีสตาร์ทบริการใด ๆ


ฉันถอนการติดตั้ง Avahi แล้วทำตามขั้นตอนของคุณ นั่นทำให้ฉัน ขอบคุณครับ (ใช้ Ubuntu 18.04 Desktop)
José L. Patiño

ขอขอบคุณ. นี่คือคำตอบสำหรับฉัน ทำไมมันไม่ "เพิ่งทำงาน" นอกกรอบ?
adampski

ความแตกต่างระหว่างโซลูชันของคุณกับคำตอบที่ยอมรับคืออะไร สำหรับทั้งคู่เราสามารถข้ามคำตอบแรกที่ 2/3 - แม้จะเป็นเช่นนั้น :-) เดียวกัน
HongboZhu

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

2

สำหรับฉันวิธีการทำงานสำหรับ Ubuntu 18.04 คือ:

แก้ไข avahi conf:

sudo vim /etc/avahi/avahi-daemon.conf

และเปลี่ยน. local เป็น .alocal:

[server]
domain-name=.alocal

จากนั้นให้เปิด resol.conf:

sudo vim /etc/systemd/resolved.conf

และไม่แสดงข้อคิดเห็นและแก้ไขโดเมน:

[Resolve]
...
Domains=yourdomain.local
...

และในที่สุดก็เริ่มบริการ:

sudo service systemd-resolved restart
sudo service avahi-daemon restart

ในกรณีของฉันฉันต้องการที่เดียวที่จะเปลี่ยนDomainsใน/etc/systemd/resolved.conf(และเริ่มบริการ)
tokosh

2
นี่ไม่ได้ทำเพื่อฉัน ยังไม่มีอะไร
FalcoGer

Ubuntu รุ่นเดียวกัน ใช้ openvpn โซลูชันนี้ทำงานได้ดีกับ VPN ในหลาย ๆ เครื่องในทีมของฉัน
razvanone

2

สิ่งที่ใช้ได้ผลสำหรับฉันคือการเพิ่ม DNS โลคัลเป็น nameserver ไปยัง/etc/resolvconf/resolv.conf.d/head(ดังอธิบายไว้ที่นี่ )

  1. ติดตั้งแพคเกจ resolvconf

    sudo apt install resolvconf
    
  2. แก้ไข/etc/resolvconf/resolv.conf.d/headและเพิ่มสิ่งต่อไปนี้:

    nameserver 8.8.4.4  
    nameserver 8.8.8.8  
    
  3. เริ่มบริการ resolvconf ใหม่

    sudo service resolvconf restart
    

การแก้ไขควรเป็นแบบถาวร


ไฟล์ส่วนหัวมีคำเตือนที่จะไม่แก้ไขไฟล์เพราะมันถูกสร้างขึ้นโดย resolvconf?
John Mee

@JohnMee headไฟล์เป็นแหล่งที่/run/resolvconf/resolv.confใช้ในการสร้าง อย่างไรก็ตามฉันจะไม่แก้ไขไฟล์นี้ด้วย
Melebius

0

สถานการณ์ของฉันเป็นคล้ายกัน แต่แตกต่างกันบ้าง: เราใช้ชื่อเซิร์ฟเวอร์เช่นmyserverบน Windows แต่ตอนนี้ไม่ได้ทำงานบน Ubuntu 16.04 myserver.mycompany.localและฉันได้ใช้ หลังจากอัปเกรดเป็น 18.04 ฉันมีพฤติกรรมดังต่อไปนี้:

$ ping myserver.mycompany.local
ping: myserver.mycompany.local: Name or service not known

$ ping myserver
PING myserver.mycompany.local (192.168.x.y) 56(84) bytes of data.
64 bytes from myserver.mycompany.local (192.168.x.y): icmp_seq=1 ttl=62 time=3.05 ms
...

ฉันต้องแทนที่myserver.mycompany.localด้วยmyserverในแอปพลิเคชันของฉัน

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