ฉันจะแก้ไขปัญหา DNS ได้อย่างไรซึ่งไม่ทำงานหลังจากอัปเกรดเป็น Ubuntu 13.10 (ทะลึ่ง)


64

หลังจากอัปเกรดเป็น 13.10 การแก้ไข DNS ของฉันล้มเหลว ดูเหมือนว่าจะไม่ใช้เซิร์ฟเวอร์ DNS ที่ฉันได้รับจาก DHCP (LAN)

ฉันสามารถชั่วคราวแก้ปัญหาโดยการเพิ่มการnameserver 8.8.8.8 /etc/resolv.confแต่โฮสต์อินทราเน็ตยังคงไม่สามารถแก้ไขได้

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

ดังนั้นคำถามของฉัน:

  • ฉันควรจะใส่resolv.confอะไรถ้ามี?
  • จะทราบได้อย่างไรว่าเซิร์ฟเวอร์ชื่อใดที่ฉันกำลังสืบค้น
  • จะค้นหาตำแหน่งต่อไปได้อย่างไรทำไมจึงไม่ใช้เซิร์ฟเวอร์ชื่อที่ได้รับจาก DHCP

2
ฉันได้รับปัญหาเดียวกันเมื่ออัพเกรดจาก 12.04 เป็น 14.04
Tarrasch

6
ฉันได้รับ DNS ล้มเหลวทุกวันตั้งแต่อัปเกรดเป็น 16.10 สองสามวันที่ผ่านมา
WindRider

@WindRider มีปัญหาเดียวกันเคล็ดลับกับ dnsmasq ด้านล่างดูเหมือนว่าจะทำงานได้
Suor

ฉันมีปัญหาในการติดตั้ง Lubuntu ใหม่ 17.04 และแก้ไขได้ด้วยตนเองโดยการเพิ่ม URL ที่ต้องการลงในไฟล์โฮสต์: askubuntu.com/a/936972/34298
rubo77

คำตอบ:


83

ก่อนอื่นคุณต้องรู้ว่าการแก้ปัญหาชื่อใน Ubuntu ตั้งแต่ Ubuntu 12.04 เป็นอย่างไร

Stéphane Graber บล็อกข้อมูลบางส่วนเกี่ยวกับเรื่องนี้เมื่อปีที่แล้ว สิ่งสำคัญที่สุดที่ควรทราบคือทั้ง Ubuntu Server และ Ubuntu Desktop ใช้ resolvconf เพื่อจัดการresolv.confไฟล์ นั่นหมายความว่าคุณไม่ควรแก้ไข/etc/resolv.confโดยตรงอีกต่อไป คุณควรกำหนดค่ายูทิลิตี้การกำหนดค่าอินเทอร์เฟซเครือข่ายแทนเพื่อให้ข้อมูลที่ถูกต้องเพื่อ resolvconf สำหรับ Ubuntu เซิร์ฟเวอร์ยูทิลิตี้การกำหนดค่าเชื่อมต่อเครือข่ายเป็นifup/etc/network/interfacesและจะมีการกำหนดค่าโดยไฟล์ สำหรับ Ubuntu สก์ท็อปเครือข่ายยูทิลิตี้การตั้งค่าอินเตอร์เฟซเป็นNetworkManager นี่คือสิ่งที่คุณกำลังใช้

NetworkManager มีการกำหนดค่าโดยใช้ตัวบ่งชี้เครือข่าย> แก้ไขการเชื่อมต่อ อย่างไรก็ตามสำหรับอินเทอร์เฟซเครือข่ายที่กำหนดค่าโดย DHCP โดยปกติแล้วไม่จำเป็นต้องเปลี่ยนการตั้งค่าใด ๆ ด้วยตนเอง โดยปกติสิ่งที่เกิดขึ้นคือเซิร์ฟเวอร์ DHCP (ระยะไกล) มอบให้กับ NetworkManager ทั้งที่อยู่ IP สำหรับใช้งานในเครื่องและที่อยู่ของเซิร์ฟเวอร์ชื่อ DNS (ระยะไกล) ที่จะใช้ NetworkManager เริ่มต้นอินสแตนซ์ของเนมเซิร์ฟเวอร์การส่งต่อที่รับฟังภายในเครื่องที่ 127.0.1.1 ที่อยู่นี้ 127.0.1.1 จะถูกส่งไปยัง resolvconf ที่วางnameserver 127.0.1.1ไว้/etc/resolv.conf. NetworkManager ยังให้ที่อยู่ IP (ระยะไกล) ของ DNS nameserver ที่ DHCP จัดเตรียมไว้ให้กับ Nameserver ที่ส่งต่อ ดังนั้นโปรแกรมที่รันบนระบบโลคัลขอให้ตัวแก้ไขแปลชื่อโฮสต์เป็นที่อยู่ IP ตัวแก้ไขจะสอบถามเนมเซิร์ฟเวอร์การส่งต่อโลคัลที่ 127.0.1.1 เนมเซิร์ฟเวอร์การส่งต่อทำการค้นหารีโมตเนมเซิร์ฟเวอร์ (s) ที่ได้รับแจ้งเกี่ยวกับรับคำตอบและส่งสำรอง

NetworkManager สื่อสารกับกระบวนการส่งต่อเนมเซิร์ฟเวอร์ผ่าน D-Bus คุณสามารถดูว่า NetworkManager บอกอะไรกับเนมเซิร์ฟเวอร์ที่ส่งต่อโดยเรียกใช้คำสั่ง

nmcli dev list iface eth0 | grep IP4.DNS

อัปเดตที่เกิดขึ้นจากความคิดเห็น:
โปรดทราบว่า resolvconf จะเขียนไฟล์/run/resolvconf/resolv.confที่/etc/resolv.confควรจะเป็นลิงก์สัญลักษณ์ หาก/etc/resolv.confไม่ใช่ลิงก์สัญลักษณ์คุณต้องสร้างใหม่ เมื่อต้องการทำเช่นนั้นคุณสามารถเรียกใช้

sudo dpkg-reconfigure resolvconf

หรือ

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        

ขอบคุณมากสำหรับข้อมูลนี้ ในกรณีของฉันคำสั่งแสดงเซิร์ฟเวอร์ DNS ที่ถูกต้อง แต่ไฟล์ resolf.conf ไม่ได้รับการอัพเดต มันมีการประทับเวลาจากเมื่อฉันได้ใส่ค่าของฉันที่นั่น ดังนั้นฉันจะต้องค้นหาสาเหตุที่ resolvconf ไม่ได้เขียนไฟล์
Witek

15
Resolvconf จริง ๆ แล้วเขียนไฟล์ /run/resolvconf/resolv.conf และ /etc/resolv.conf ควรจะเป็นลิงค์สัญลักษณ์ไปที่ /run/resolvconf/resolv.conf หากคุณลบ /etc/resolv.conf คุณจะลบลิงค์สัญลักษณ์ หากต้องการสร้างลิงก์สัญลักษณ์ใหม่คุณสามารถเรียกใช้sudo dpkg-reconfigure resolvconfหรือคุณสามารถทำได้mv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
jdthood

7
นี่มีทุกอย่างยกเว้น 'แก้ไข' ฉันจะแก้ไขปัญหานี้ได้อย่างไร
Amal Murali

5
การแก้ไขอาจจะทำงานsudo dpkg-reconfigure resolvconfตามที่แนะนำในส่วนสุดท้ายของคำตอบ
jdthood

ขอขอบคุณ!!! ฉันไม่แน่ใจว่าเกิดอะไรขึ้นกับระบบของฉัน แต่การรันsudo dpkg-reconfigure resolveconfดูเหมือนจะใช้งานได้ดี!
meanbunny

49

ฉันได้ทำการเปลี่ยนแปลงที่แนะนำในลิงค์ด้านล่าง (ปิดการใช้งาน dnsmasq) ตอนนี้ทุกอย่างใช้งานได้ดี! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

เปิด/etc/NetworkManager/NetworkManager.confไฟล์

sudo gedit /etc/NetworkManager/NetworkManager.conf

แสดงความคิดเห็นออกบรรทัดเป็น:

#dnsmasq deactivated
#dns=dnsmasq

4
หลังจากแสดงความคิดเห็นออก dnsmasq sudo restart network-managerคุณจำเป็นต้องรีสตาร์ทผู้จัดการเครือข่าย:
Don Kirkby

2
ในกรณีของฉัน (Xubuntu) คำสั่งคือ: sudo /etc/init.d/network-manager restart
aviram83

หากคุณเกิดเหตุการณ์นี้กับคุณแม้ว่าจะไม่มีการติดตั้ง dnsmasq และไม่มีอะไรที่จะต้องแสดงความคิดเห็นให้เพิ่มdns=defaultไปยัง[main]ส่วน NetworkManager มีปลั๊กอิน dnsmasq ที่น่ารังเกียจซึ่งจะใช้เป็นอย่างอื่น
dstibbe

1
ฉันต้องเริ่มต้นใหม่นี้network-manager-sudo service network-manager restart
Sungam

หนึ่งในกล่องของฉันไม่มี dns หลังจากอัปเกรดเป็น 17.10 และปรากฎว่า /etc/resolv.conf ไม่ใช่ลิงก์สัญลักษณ์ ซ่อมมัน. อีกกล่องหนึ่งยังไม่เสร็จสิ้นการอัปเกรดและฉันพบไฟล์. dpkg-new ใน dir แตกต่างกันคือ dnsmasq คัดลอกมาแล้วทำงานได้โดยไม่ต้องเริ่มดีมอนใด ๆ เลย
fchen

20

แก้ไข 2: โพสต์ก่อนหน้านี้ถูกลบโดยการกลั่นกรองอย่างถูกต้องฉันโพสต์สิ่งที่ฉันได้พบว่าเป็นทางออก ขอโทษสำหรับสิ่งนั้น.

แก้ไข: ฉันเพิ่งพบคำตอบและอยู่ในหน้านี้มาก - ขอโทษสำหรับ miopy ของฉัน ฉันโพสต์สิ่งที่ค้นพบด้านล่างขยายคำตอบที่ถูกต้องโดย Richard Lindstedt ที่พบในหน้านี้ ฉันปล่อยให้เสียงดังก้องเร็วของฉันสำหรับบริบทเล็กน้อย ได้โปรดตอบคำถามของริชาร์ดด้วยเขาสมควรได้รับมัน

จริงๆแล้วมันง่ายจริงๆ

เพียงเปิดไฟล์ conf ของคุณ -> sudo vi / etc / network / interfaces

แน่ใจว่าไม่ได้ช่วย OP และไม่ได้ช่วยฉันตอนนี้ เราไม่ต้องการที่อยู่แบบคงที่เราต้องการใช้ที่อยู่ที่เซิร์ฟเวอร์ DHCP ส่งมาให้เรา NetworkManager ดูเหมือนจะจดจำพวกเขาได้ แต่ Ubuntu จะเพิกเฉยต่อพวกเขาอย่างเปิดเผย:

# nmcli dev list iface wlan0 | grep IP4.DNS
IP4.DNS[1]:          10.*.*.*
IP4.DNS[2]:          10.*.*.*
IP4.DNS[3]:          8.8.8.8

แต่...

# dig microsoft.com
; <<>> DiG 9.9.5-4.3-Ubuntu <<>> microsoft.com
;; global options: cmd
;; connection timed out; no servers could be reached

และ / etc / network / interfaces ของฉันคือ:

auto lo
iface lo inet loopback

ซึ่งเป็นบิตแปลกฉันคาดหวังว่าการเชื่อมต่อทั้งหมดจะถูกประกาศที่นี่ (หรือฉันหายไปบางสิ่งบางอย่าง?)

ดังนั้นในระยะสั้น:

  • ฉันไม่ได้ยุ่งกับไฟล์ใด ๆ ที่จะเริ่มต้นด้วย
  • ฉันได้วิ่งไปแล้ว dpkg-reconfigure resolvconf
  • มีการเชื่อมโยงสัญลักษณ์ที่ถูกต้อง
  • NetworkManager ดึงข้อมูลเซิร์ฟเวอร์ DNS ที่ถูกต้องจาก DHCP
  • Ubuntu ไม่ได้ใช้ที่อยู่ดังกล่าว
  • วิธีแก้ไขคือการใส่ค่าคงที่ 8.8.8.8 ใน / etc / network / interfaces ที่ฉันไม่ต้องการ
  • ฉันต้องการใช้เซิร์ฟเวอร์ DNS ที่ให้ DHCP ในทุกสถานการณ์

ไม่เปิดเธรดอื่นเนื่องจากเป็นปัญหาที่แน่นอนยกเว้นตอนนี้ที่ 14.10 (แต่สิ่งนี้ทำให้ฉันรำคาญตั้งแต่เดอัพเกรดจาก 12.10 เป็น 13.04)

วิธีการแก้

วลีสุดท้ายนั่นทำให้ฉันไปถูกทางแล้วฉันก็สังเกตเห็นคำตอบของริชาร์ด

ดูเหมือนว่าปัญหาจะเกี่ยวข้องกับความขัดแย้งdnsmasqและresolvconfแพ็คเกจ จนถึง 12.10 dnsmasqถูกนำมาใช้ จาก 13.04 เป็นต้นไปอูบุนตูดูเหมือนจะเปลี่ยนไปใช้ไฮบริด dnsmasq / resolvconf ที่คุณได้ติดตั้งแพคเกจdnsmasq-baseและresolvconfแต่ไม่ได้dnsmasqตัวเอง

ฉันไม่สามารถบอกได้ว่าเป็นข้อผิดพลาดในสคริปต์อัพเกรดสำหรับ 13.04 หรืออย่างอื่นเพราะเมื่อมีการติดตั้ง resolvconf (เช่นในการติดตั้งใหม่), dnsmasq-base ได้รับการอัพเกรดและถอนการติดตั้ง dnsmasq อย่างถูกต้อง

สิ่งที่จับได้คือสคริปต์อัพเกรดไม่สามารถคอมเม้นท์ในdns=dnsmasqบรรทัด/etc/NetworkManager/NetworkManager.confได้ ดังนั้นแม้ว่า dnsmasq daemon จะไม่ปรากฏบนระบบอีกต่อไป /etc/resolv.conf ยังคงคาดหวังว่ามันจะเป็น


นี่มันยอดเยี่ยมมาก!
metadings

1
OMG สามารถแก้ไขปัญหา DNS ของฉันในช่วง 3 ปีที่ผ่านมา! ถ้าคุณมีdnsmasqและdnsmasq-baseติดตั้ง, นิวเม็กซิโกจะใส่127.0.0.1ในแทน/etc/resolv.conf 127.0.1.1ฉันเพิ่งถอนการติดตั้งdnsmasq(และเปิดใช้งาน NM) และทุกอย่างทำงานได้ดี
user1129682

4
ผู้ใช้ Google ในอนาคตควรทราบว่าคุณต้องดำเนินsudo service network-manager restartการนี้เพื่อให้มีผล
timelmer

จุดดีในการเริ่มบริการเครือข่าย - ผู้จัดการ!
Henrique

7

จริงๆแล้วมันง่ายจริงๆ

เพียงเปิดไฟล์ conf ของคุณ -> sudo vi / etc / network / interfaces

และภายใต้อินเทอร์เฟซของคุณ (อาจเป็น eth0) คุณจะเห็นการกำหนดค่าปกติทั้งหมด

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1

หลังจากเกตเวย์เพียงเพิ่ม 'dns-nameservers 8.8.8.8 8.8.8.9' หรือชื่อเซิร์ฟเวอร์ใดก็ตามที่คุณจะใช้

ดังนั้น config ของคุณควรเป็น:

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1
dns-nameservers 8.8.8.8 8.8.8.9

จากนั้นเพียงแค่ทำการ 'เริ่มบริการเครือข่าย sudo' และคุณไปได้ดี!

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