ฉันควรแก้ไขไฟล์ resolv.conf ของฉันเพื่อแก้ไขปัญหา DNS ผิดหรือไม่


35

ฉันมีปัญหาที่เครื่อง Ubuntu ของฉันใช้เซิร์ฟเวอร์ DNS ผิด ด้วยเหตุผลบางอย่างเครื่องสอบถามlocalhostข้อมูล DNS

ฉันได้เพิ่มเซิร์ฟเวอร์ DNS ใน GUI การตั้งค่าเครือข่าย แต่/etc/resolv.confยังคงมีอยู่127.0.0.1เป็นที่อยู่เซิร์ฟเวอร์ DNS ตอนนี้ฉันคิดว่าฉันสามารถแก้ไขไฟล์ด้วยตัวเองได้ แต่มันบอกว่าฉันไม่ควรแก้ไขไฟล์ด้วยตนเอง

ตอนนี้เนื่องจาก GUI การตั้งค่าเครือข่ายไม่ได้สร้างไฟล์ด้วยการตั้งค่าที่ถูกต้องฉันจะสร้างresolv.confไฟล์ใหม่ด้วยตัวเองได้อย่างไร


1
หากคุณใช้ Ubuntu Server 12.04 LTS เพียงทำตัวเองให้เป็นที่โปรดปรานและแก้ไข/etc/resolvconf/resolv.conf.d/headโดยตรงเช่นเดียวกับที่คุณต้องการให้ตัวแปลงของคุณเป็นมรดก ฉันไม่มีอะไรนอกจากแก้ไขปัญหาจนกว่าฉันจะเดรัจฉานบังคับ

askubuntu.com/questions/157154/…อาจเป็นคำถามที่เกี่ยวข้อง
Ehtesh Choudhury

คำตอบ:


40

สิ่งที่ไม่มีคำตอบที่โพสต์เพื่อให้ห่างไกลที่อยู่เป็นลักษณะที่ผู้ถามล้มเหลวที่จะเข้าใจว่ามีnameserver 127.0.0.1ใน/etc/resolv.confความถูกต้องสมมติว่า nameserver ท้องถิ่นกำลังทำงาน และใน Ubuntu 12.04 สก์ท็อปมีโดยค่าเริ่มต้น nameserver ท้องถิ่นทำงานคือเป็นdnsmasqกระบวนการควบคุมโดย NetworkManager 127.0.0.1ซึ่งฟัง ใน Ubuntu 12.10 127.0.1.1ฟังอยู่ได้ถูกเปลี่ยนไป

resolv.confดังนั้นการแก้ปัญหาไม่ได้ที่จะทำการเปลี่ยนแปลงใด ๆ มันถูกต้องสมมติว่าผู้ถามต้องการใช้เนมเซิร์ฟเวอร์ในเครื่อง

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

ผู้ถามพยายามใช้ "GUI การตั้งค่าเครือข่าย" เพื่อ "สร้างไฟล์ด้วยการตั้งค่าที่ถูกต้อง" และสิ่งนี้ไม่สามารถใช้งานได้ ฉันไม่ทราบว่าสิ่งนี้หมายถึงอะไร แต่นี่เป็นวิธีที่เหมาะสมในการป้อนที่อยู่เซิร์ฟเวอร์ชื่อเพื่อให้พวกเขาลงเอยในresolv.confเวลาที่เหมาะสม ฉันคิดว่าผู้ถามใช้NetworkManagerและไม่ifupกำหนดค่าอินเทอร์เฟซ

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

หากเน็ตเวิร์กอินเตอร์เฟสบนเครื่องโลคัลถูกกำหนดค่าแบบสแตติกดังนั้นแอดเดรสเนมเซิร์ฟเวอร์ที่ถูกต้องจะต้องถูกป้อนใน NetworkManager ที่ตัวอย่างเช่นตัวบ่งชี้เครือข่าย | แก้ไขการเชื่อมต่อ ... | ไร้สาย | myconnection | แก้ไข ... | การตั้งค่า IPv4 | เซิร์ฟเวอร์ DNS เพิ่มเติม

เป็นไปได้ว่าเนมเซิร์ฟเวอร์ภายในทำงานไม่ถูกต้อง ในกรณีนั้นผู้ถามควรแก้ไข/etc/NetworkManager/NetworkManager.conf

sudo gedit /etc/NetworkManager/NetworkManager.conf

และแสดงความคิดเห็นในบรรทัด

dns=dnsmasq

ในส่วน "[main]" หากต้องการใส่ความคิดเห็นให้กับบรรทัดให้ใส่#จุดเริ่มต้นของบรรทัดจากนั้นบันทึกไฟล์ จากนั้นรีสตาร์ทตัวจัดการเครือข่าย

sudo restart network-manager

หลังจากนี้จะมีการป้อนที่อยู่เซิร์ฟเวอร์ที่ไม่ใช่ภายในเครื่องresolv.confแทนที่อยู่ 127. *

หากผู้ถามใช้ifupมากกว่า NetworkManager เพื่อกำหนดค่าเน็ตเวิร์กอินเตอร์เฟสคำตอบของ jmartin2279นั้นถูกต้อง: คุณต้องเพิ่มเนมเซิร์ฟเวอร์ที่อยู่ใน / etc / network / interfaces ตามที่อธิบายไว้ใน jmartin2279

ขัดกับสิ่งที่บางคำตอบอื่น ๆ ให้คำแนะนำโดยทั่วไปคุณควรไม่ได้เพิ่มnameserver, domainหรือตัวเลือกในการไฟล์ในsearch /etc/resolvconf/resolv.conf.d/ดูความคิดเห็นของฉันเกี่ยวกับคำตอบเหล่านั้น


1
"เซิร์ฟเวอร์ DHCP รู้ว่าควรใช้ nameserver ใดที่ไคลเอ็นต์ควรใช้" - ยกเว้นเมื่อคุณไม่สามารถควบคุมเซิร์ฟเวอร์ DHCP (คิดว่าฮอตสปอต WiFi สาธารณะ) และต้องการแทนที่เนมเซิร์ฟเวอร์ที่ใช้ ... การตั้งค่าการกำหนดค่าเดียวกันสำหรับแต่ละการเชื่อมต่อ พื้นฐาน - ซ้ำแล้วซ้ำอีกสำหรับฮอตสปอต WiFi แต่ละจุดที่คุณเชื่อมต่อ - ไม่ใช่โซลูชัน
Teoh Han Hui

ดูเหมือนว่าฉันกำลังจำเป็นต้องดำเนินการdhclientเพื่อให้การเปลี่ยนแปลง (tha nameserverบรรทัด) etc/resolv.confในที่สุดก็มาถึง ฉันใช้งาน Xubuntu 14.04 แบบกำหนดเอง (อาจเป็นเหตุผล)
Sopalajo de Arrierez

ข้อเสียของการปิดใช้งาน DNSMasq คืออะไร, jdthood? แน่นอนว่าการแก้ไขชื่อและอินเทอร์เน็ตดูเหมือนจะใช้ได้ดีหลังจากทำเสร็จแล้ว
Sopalajo de Arrierez

ดูbugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/1003842เช่นความคิดเห็นของฉัน # 60
jdthood

resolv.conf ของฉันช่วยให้การเปลี่ยนแปลงไป127.0.0.1แม้จะมีผู้จัดการเครือข่ายของฉันมี namerservers อื่น ๆ + dnsmasq ถูกออกความเห็น + + รีบูต dnsmasq ฆ่า (ในขณะที่มันยังคงได้รับการเริ่มต้น) + เครือข่ายเริ่มต้นใหม่: /
บางผู้ใช้

17

หากคุณใช้ ifup เพื่อกำหนดค่าอินเตอร์เฟซแบบคงที่คุณสามารถเพิ่มลงในไฟล์ / etc / network / interfaces

เปิดเทอร์มินัลแล้วพิมพ์:

sudo gedit /etc/network/interface*

คุณควรเห็นบางสิ่งเช่น:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

แก้ไขเป็น:

auto eth0
iface eth1 inet static
address 192.168.1.10 
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8

ใช้ข้อมูลเครือข่ายของคุณเอง สิ่งนี้จะอนุญาตให้คุณตั้งค่า DNS คุณสามารถใช้เซิร์ฟเวอร์ DNS หลายเครื่องได้ที่นี่:

dns-nameservers 8.8.8.8 8.8.4.4

หลังจากทำเช่นนี้วิ่ง

ifdown eth0
ifup eth0

หากเป็นกรณีของคุณนี่เป็นวิธีแก้ปัญหา: "ถ้าคุณใช้ ifup เพื่อกำหนดค่าส่วนต่อประสานแบบคงที่ .... "
angelcervera

คุณเคยทดสอบสิ่งนี้หรือไม่? ifdown: interface eth0 not configured
Cerin

3
หากคุณกำลังเชื่อมต่อกับ ssh คุณไม่สามารถใช้ ifdown / ifup ใช้แทนsudo /etc/init.d/networking restart
TD_Nijboer

11

ใน Ubuntu 12.04 การจัดการ resolv.conf เปลี่ยนไป

หากคุณต้องการเพิ่มที่อยู่ nameserver ของคุณเอง (e) แล้วแก้ไขไฟล์ /etc/resolvconf/resolv.conf.d/ หัว

sudo nano /etc/resolvconf/resolv.conf.d/head

และเพิ่มเนมเซิร์ฟเวอร์ของคุณที่นั่น (เช่น: Google open dns)

nameserver 8.8.8.8

บันทึกไฟล์แล้วเรียกใช้

sudo resolvconf -u

ไม่มีการรีบูตหรือสิ่งอื่นใด บางทีคุณอาจต้องรีสตาร์ทผู้จัดการเครือข่าย

sudo service network-manager restart

เสร็จสิ้น

คุณสามารถทดสอบด้วยคำสั่ง

nslookup www.google.com

ผลลัพธ์จะต้องคล้ายกับ

Server: 8.8.8.8
Address: 8.8.8.8#53

4
การเพิ่มบรรทัด "nameserver" ใน /etc/resolvconf/resolv.conf.d/head อาจทำงานเป็นแฮ็คด่วน แต่มันไม่ใช่วิธีแก้ไขปัญหาที่ถูกต้องสำหรับปัญหาใด ๆ การทำเช่นนี้ทำให้ตัวแก้ไขใช้เนมเซิร์ฟเวอร์ที่อยู่ภายใต้สถานการณ์ทั้งหมดในขณะที่เซิร์ฟเวอร์ที่จะใช้ขึ้นอยู่กับสถานการณ์ ตัวอย่างเช่นหากคุณเชื่อมต่อกับ LAN (อาจผ่านทาง VPN) โดยปกติแล้วคุณต้องการใช้เซิร์ฟเวอร์ชื่อ LAN เพื่อให้สามารถแก้ไขชื่อส่วนตัวบน LAN ได้ และในกรณีปัจจุบันระบบดูเหมือนจะใช้เนมเซิร์ฟเวอร์แคชในตัวเครื่อง แต่เพิ่ม "nameserver 8.8.8.8" เพียงแค่ข้ามมัน
jdthood

@jdthood - คุณชี้ปัญหา สนใจที่จะให้ทางออกหรือไม่?
TJ Biddle

@TJ ฉันโพสต์คำตอบสำหรับคำถามหลักแล้ว ("ฉันจะแก้ไขไฟล์ resolv.conf ของฉันได้อย่างไร") ถ้านั่นคือสิ่งที่คุณหมายถึง
jdthood

1
โปรดอย่าแนะนำสิ่งนี้ ที่มากด้านบนของไฟล์ "ไฟล์ไม่ได้แก้ไขด้วยมือ - การเปลี่ยนแปลงของคุณจะถูกเขียนทับ"
Cerin

ฉันต้องการชี้ให้เห็นว่าการแก้ไข /etc/resolv.conf จะเขียนทับการเปลี่ยนแปลงในการรีบูตด้วยตนเองอย่างไรก็ตามการแก้ไข /etc/resolvconf/resolv.conf.d/head ด้วยตนเองจะไม่เขียนทับการเปลี่ยนแปลงในการรีบูท แต่มันอาจจะเกิดขึ้นอีกครั้ง การติดตั้ง resolvconf ซึ่งน่าจะเป็นเหตุผลที่เตือนมี
Ken

1

หากต้องการเพิ่มรายการเพิ่มเติมให้/etc/resolv.confสร้าง/etc/resolvconf/resolv.conf.d/tailไฟล์และเพิ่มไว้ที่นั่น

แต่ถ้า/etc/resolv.confมี127.0.0.1แล้วเพิ่มรายการเพื่อ/etc/resolvconf/resolv.conf.d/tailจะไม่เปลี่ยนแปลงอะไร คุณจะต้องตั้งอยู่เซิร์ฟเวอร์ DNS ของคุณแบบคงที่ใน NetworkManager ซึ่งจะส่งพวกเขาไป dnsmasq 127.0.0.1ซึ่งฟัง

การกำหนดค่า DNS สำหรับอินเทอร์เฟซแบบคงที่ควรเป็นรายการ“ dns-nameservers”,” dns-search” และ“ dns-domain” เพิ่มลงใน iface stanza ที่เหมาะสมใน/etc/network/interfaces

อ่านสิ่งนี้สำหรับข้อมูลเพิ่มเติม

`นอกจากนี้:

คุณสามารถติดตั้งเครื่องมือ gui gnome-network-adminที่จะตั้งค่า DNS ของคุณ ลองมัน :

sudo apt-get install gnome-network-admin

3
(1) ไม่ห้ามเพิ่มตัวเลือก "nameserver" ใน /etc/resolvconf/resolv.conf.d/tail นั่นคือไม่ได้ผล (เพราะตัวเลือก "nameserver" อื่น ๆ ที่มีความสำคัญ) และ suboptimal (เพราะมันเป็นค่าคงที่ในขณะที่การกำหนดค่าควรสะท้อนถึงสถานการณ์เครือข่าย) (2) ไม่ใช้ gnome-network-admin มันไม่ทำงานอย่างถูกต้องกับ resolvconf ดูข้อผิดพลาด # 60518 ( bugs.launchpad.net/ubuntu/+source/gnome-system-tools/+bug/60518 )
jdthood
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.