ฉันจะตั้งค่า DNS ของฉันเมื่อ resolv.conf ถูกเขียนทับได้อย่างไร


279

ข้อมูลส่วนใหญ่ที่ฉันเห็นทางออนไลน์บอกว่าจะแก้ไข/etc/resolv.confแต่การเปลี่ยนแปลงใด ๆ ที่ฉันทำจะทำให้ถูกแทนที่ได้

$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- 
#     YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1

มันดูเหมือนว่า 127.0.1.1 dnsmasqเป็นตัวอย่างของท้องถิ่น เอกสารบอกว่าจะแก้ไขdnsmasq /etc/resolv.confฉันพยายามวางเซิร์ฟเวอร์ที่กำหนดเองใน/etc/resolv.conf.d/baseแต่การเปลี่ยนแปลงไม่ได้แสดงในหลังจากทำงาน/etc/resolv.confsudo resolvconf -u

FYI ฉันไม่ต้องการเปลี่ยน DNS ตามการเชื่อมต่อฉันต้องการตั้งค่า DNS เริ่มต้นให้ใช้สำหรับการเชื่อมต่อทั้งหมดเมื่อไม่ได้ระบุเป็นอย่างอื่น

UPDATE:

ฉันตอบคำถามนี้ด้วยตัวเอง: https://unix.stackexchange.com/a/163506/67024

ฉันคิดว่ามันเป็นทางออกที่ดีที่สุดตั้งแต่:

  1. มันได้ผล.
  2. มันต้องการการเปลี่ยนแปลงจำนวนน้อยที่สุดและ
  3. มันยังคงทำงานร่วมกับแคช DNS ของ dnsmasq แทนที่จะข้ามไป

ดีกว่าที่จะตอบคำถามของคุณแทนที่จะอัปเดตคำถามของคุณฉันคิดว่า ... จะหาคำตอบที่ถูกต้องที่คุณให้กับปัญหาของคุณได้ง่ายขึ้น
Philippe Gachoud

ดูเหมือนว่าคำตอบส่วนใหญ่จะเน้นไปที่ Ubuntu และซับซ้อนเกินไป โซลูชันสากลสำหรับผู้ใช้ NetworkManager คือการเพิ่มdns=noneเข้ามา/etc/NetworkManager/NetworkManager.conf(ดูรายละเอียดในคำตอบของฉันด้านล่าง)
Skippy le Grand Gourou

ฉันคิดว่าคำตอบนี้จะอธิบายว่าเหตุใดการแก้ไขของ config จึงถูกเขียนทับคุณจึงรู้วิธีกำหนดค่า
foman

คำตอบ:


250

ผมเชื่อว่าถ้าคุณต้องการที่จะแทนที่ nameserver DNS ที่คุณเพียงเพิ่มบรรทัดที่คล้ายกับข้อมูลนี้ไว้ในไฟล์ภายใต้baseresolv.conf.d

ตัวอย่าง

$ sudo vim /etc/resolvconf/resolv.conf.d/base

จากนั้นใส่รายชื่อ nameserver ของคุณในลักษณะดังนี้:

nameserver 8.8.8.8
nameserver 8.8.4.4

ในที่สุดการปรับปรุงresolvconf:

$ sudo resolvconf -u

ถ้าคุณดูที่หน้าคนสำหรับอธิบายไฟล์ต่างๆที่อยู่ภายใต้resolvconf/etc/resolvconf/resolv.conf.d/

   /etc/resolvconf/resolv.conf.d/base
          File  containing  basic  resolver  information.  The lines in this 
          file are included in the resolver configuration file even when no
          interfaces are configured.

   /etc/resolvconf/resolv.conf.d/head
          File to be prepended to the dynamically generated resolver 
          configuration file.  Normally this is just a comment line.

   /etc/resolvconf/resolv.conf.d/tail
          File to be appended to the dynamically generated resolver 
          configuration file.  To append nothing, make this  an  empty  
          file.   This file is a good place to put a resolver options line 
          if one is needed, e.g.,

              options inet6

แม้ว่าจะมีคำเตือนที่ด้านบนของheadไฟล์:

$ cat /etc/resolvconf/resolv.conf.d/head
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

คำเตือนนี้อยู่ที่นั่นเพื่อให้เมื่อไฟล์เหล่านี้ถูกสร้างขึ้นคำเตือนจะทำงานในที่สุดในresolv.confไฟล์ผลลัพธ์ที่จะใช้ไฟล์เหล่านี้ ดังนั้นคุณสามารถเพิ่มnameserverบรรทัดที่อธิบายไว้ข้างต้นสำหรับbaseไฟล์ลงในheadไฟล์ได้อย่างง่ายดาย

อ้างอิง


21
Ubuntu 14.04 - เมื่อฉันใส่เนมเซิร์ฟเวอร์baseและเรียกใช้resolvconf -uเนมเซิร์ฟเวอร์จะไม่ถูกแปลงเป็น resolv.conf - เมื่อฉันใส่เนมเซิร์ฟเวอร์เข้าไปheadพวกเขาคือ
HorusKol

7
Ubuntu 14.04 - ยังต้อง/run/resolvconf/interface/NetworkManager
คอมเม้น

3
ประเภทnslookup google.comและ IP แรกในรายการควรเป็นเนมเซิร์ฟเวอร์ใหม่ของคุณหากไม่ใช่คุณทำผิด
frazras

6
อูบุนตู 16.04: ทำงานถ้าต่อท้ายเท่านั้นไม่ได้กับ/etc/resolvconf/resolv.conf.d/head ได้รับการยืนยันด้วยbase nslookup google.com
คิวเมนตัส

3
เริ่มแรกคุณต้องresolvconfติดตั้ง sudo apt-get install resolvconfคุณสามารถติดตั้งได้ด้วยการทำ
MAChitgarha

79

ฉันสนใจคำถามนี้และลองใช้วิธีแก้ปัญหาที่เสนอ @sim

เพื่อทดสอบฉันใส่

nameserver 8.8.8.8

ใน/etc/resolvconf/resolv.conf.d/baseและ

nameserver 8.8.4.4

ใน /etc/resolvconf/resolv.conf.d/head

จากนั้นฉันรีสตาร์ทเครือข่ายด้วย

sudo service network-manager restart

ผลที่ได้คือ/etc/resolv.confมีลักษณะเหมือน

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.4.4
nameserver 127.0.1.1

และnm-toolระบุว่า dnsserver เป็น

DNS:             208.67.222.222
DNS:             208.67.220.220

อันไหนที่เราเตอร์จัดหาให้ ในทางตรงกันข้ามที่อยู่ที่ขุดบอกว่า

;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)

ถ้าฉันพูดถูกฉันก็สรุปได้ทั้งหมดนี้

  1. เฉพาะส่วน "หัว" เท่านั้นที่อ่านโดย resolvonf: ส่วน "ฐาน" ถูกควบคุมโดย dnsmasq
  2. dnsserver จริง ๆ แล้วถูกบังคับให้ 8.8.4.4 ไม่ว่าเซิร์ฟเวอร์จะให้บริการโดย dhcp แต่คุณปล่อยแคชที่ dnsmasq จัดทำไว้ให้เนื่องจากการร้องขอถูกส่งไปที่ 8.8.4.4 เสมอ
  3. dnsmasq ยังคงใช้เฉพาะ dnsserver ที่จัดทำโดย dhcp เท่านั้น

สรุปใช้งานได้ แต่ฉันไม่คิดว่ามันเป็นผลลัพธ์ที่ต้องการ ทางออกที่ใกล้กว่านี้ฉันคิดว่ามีดังต่อไปนี้ แก้ไข

sudo vim /etc/dhcp/dhclient.conf

จากนั้นเพิ่ม

supersede domain-name-servers 8.8.8.8;

ผลลัพธ์มีดังต่อไปนี้: resolv.conf มีเพียง 127.0.0.1 ซึ่งหมายความว่าแคช dnsmasq ถูกเรียกใช้และ nm-tool กล่าว

DNS:             8.8.8.8

ซึ่งหมายความว่าหากชื่อที่ค้นหาไม่ได้อยู่ในแคชก็จะถูกถามถึงที่ 8.8.8.8 และไม่ได้อยู่ที่เซิร์ฟเวอร์ที่จัดทำโดย dhcp

ตัวเลือกอื่น (อาจจะดีกว่า) คือการใช้ "prepend" แทน "supersede": ด้วยวิธีนี้หากชื่อไม่ได้รับการแก้ไขภายใน 8.8.8.8 ดังนั้นคำขอจะอยู่บนเซิร์ฟเวอร์อื่น ในความเป็นจริงเครื่องมือนาโนพูดว่า

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220

4
คำตอบที่ดีกว่าแฮ็คเข้า NS configs โดยเฉพาะอย่างยิ่งตัวเลือกในการเพิ่มเซิร์ฟเวอร์ต่อหน้า dhcp ที่ให้ไว้ ดูเหมือนว่าจะมีความสมดุลที่สมบูรณ์แบบในการแก้ปัญหาโดยไม่ต้องสร้างใหม่!
Steve Midgley

2
ความชัดเจนและความคิดมากมายในคำตอบไม่ใช่แค่คำสั่ง
igaurav

3
โย่ชาย! "แทนที่ domain-name-servers 8.8.8.8;" คือคำตอบ
แจ็ค

มันน่าสังเกตว่า nm-tool ถูกแทนที่ด้วย nmcli
Fiddy Bux

59

ฉันพบว่าคุณสามารถเปลี่ยนเนมเซิร์ฟเวอร์ที่dnsmasqใช้โดยเพิ่มบรรทัดต่อไปนี้เป็น/etc/dnsmasq.conf:

server=8.8.8.8
server=8.8.4.4

ฉันไม่มี/etc/dnsmasq.confไฟล์เพราะติดตั้งโดยแพ็คเกจ dnsmasq แต่ Ubuntu มาพร้อมกับฐาน dnsmasq เท่านั้น ฉันวิ่งsudo apt-get install dnsmasqแล้วแก้ไข/etc/dnsmasq.confแล้วและsudo service dnsmasq restartsudo service network-manager restart

ฉันวิ่งsudo tail -n 200 /var/log/syslogไปตรวจสอบ syslog ของฉันและตรวจสอบว่าdnsmasqใช้ nameservers ที่ฉันระบุ:

Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53

4
มีเหตุผลว่าทำไมสิ่งนี้จึงถูกทำเครื่องหมายว่าเป็นคำตอบที่ดีที่สุด ... ขอบคุณมาก ๆ! ฉันจะเพิ่มว่าหลังจากทุกขั้นตอนที่คุณกล่าวถึงการรีสตาร์ทเครือข่ายอาจจำเป็นสำหรับทุกอย่างเพื่อให้ทำงานได้อย่างราบรื่น (สำหรับฉัน .... sudo service network-manager restart)
Clint Eastwood

3
บน Ubuntu 14.04 เซิร์ฟเวอร์ประมาณครึ่งหนึ่งการบู๊ตเครื่องจะไม่ส่งการเชื่อมต่ออินเทอร์เน็ตโดยใช้ URL แต่ที่อยู่ IP จะใช้งานได้ ฉันใช้เวลาหลายครั้งอย่างไร้ผลพยายามที่จะแก้ไขให้ได้เป็นเวลาหลายเดือนแล้วพบวิธีแก้ปัญหานี้ ฉันก็คิดว่ามันเป็นคำตอบที่ดีที่สุด
Nate Lockwood

มันน่าสนใจที่ dnsmasq จะต้องมีการติดตั้ง นี่เป็นการแก้ไข DNS ของฉันในสถานการณ์ปกติ แต่การกำหนดค่า VPN ของฉันทั้งหมดล้มเหลว (การเชื่อมต่อ VPN ล้มเหลวในขณะนี้ ... )
PlasmaBinturong

22

สำหรับสถานการณ์ IP แบบคงที่คู่มือเซิร์ฟเวอร์ Ubuntu บอกว่าจะเปลี่ยนไฟล์ / etc / network / interfaces ซึ่งอาจมีลักษณะเช่นนี้:

iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameservers 192.168.3.45 192.168.8.10

คุณเปลี่ยน IP 192.168.3.45 192.168.8.10 สำหรับสิ่งที่คุณต้องการเช่น 8.8.8.8

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf หน้า 38


สิ่งนี้ดูถูกต้อง แต่ตอนนี้ฉันจะสร้าง resolv.conf ได้อย่างไร!
Joel Berger

3
ifdown eth0; ifup eth0@JoelBerger
Dzamo Norton

17
  1. ค้นหา 'การเชื่อมต่อเครือข่าย'
  2. เปิด

                        ป้อนคำอธิบายรูปภาพที่นี่

  3. จากนั้นเลือก WiFi หรือ Ethernet หรืออะไรก็ตามที่คุณใช้และคลิกที่แก้ไข คุณจะได้รับสิ่งนี้:

                  ป้อนคำอธิบายรูปภาพที่นี่

  4. เลือก ipv4 ในแท็บ

  5. เลือกที่อยู่ในวิธีการเท่านั้น
  6. ป้อนชื่อ DNS ของคุณด้านล่างและบันทึก

  7. คุณทำเสร็จแล้ว


ฉันต้องทำสิ่งนี้สำหรับการเชื่อมต่อเครือข่ายแต่ละครั้ง ในอดีตคุณสามารถเปลี่ยนค่าเริ่มต้นสำหรับการเชื่อมต่อทั้งหมดซึ่งเป็นสิ่งที่ฉันต้องการทำที่นี่
Seán Hayes

2
ฉันรักคุณ! การตั้งค่า UI นี้ช่วยชีวิตฉันจาก sudo และ vim mess: '(
Luke

การใช้ Mint (บน Ubuntu 14.04) - แต่เห็นด้วย KDE ด้วยเช่นกันด้วยเหตุผลบางอย่างการตั้งค่าเซิร์ฟเวอร์ DNS ใน GUI Network Manager จะไม่ส่งผลต่อการตั้งค่า DNS ที่ใช้ในเทอร์มินัล
HorusKol

2
คำตอบที่ดีที่สุด ใน Ubuntu 14.04 ฉันได้รับ 2 ที่อยู่ IP ภายนอกสำหรับ DNS ที่ไม่รู้จักลูกค้าภายในเครือข่ายในบ้านของฉัน Leaving Method ที่ 'Automatic (DHCP)' สำหรับการเชื่อมต่อแบบมีสายเพิ่มที่อยู่ IP ของเราเตอร์ของฉันไปยังรายการที่มีอยู่ สำหรับการเชื่อมต่อไร้สายผ่าน wlan0 นั้นไม่ทำงาน แต่วิธีการใน 'ที่อยู่อัตโนมัติ (DHCP) เท่านั้น' แทนที่ที่อยู่ภายนอกด้วย IP เราเตอร์ของฉันแล้วก็ใช้งานได้เช่นกัน ใช้การเปลี่ยนแปลงกับรอสักครู่ตรวจสอบด้วยsudo service network-manager restart nmcli d list | grep 'DNS\|IP-IFACE'และ ping ไคลเอ็นต์ภายในของคุณตามชื่อ
RolfBly

13

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

$ sudo nano /etc/resolv.conf

เพิ่มสิ่งนี้และบันทึก:

nameserver 8.8.8.8

แล้ว:

$ sudo chattr +i /etc/resolv.conf

นั่นควรทำเคล็ดลับ ฉันทำสิ่งนี้ในระบบของฉันด้วย


18
เมื่อใดก็ตามที่โซลูชันของคุณเกี่ยวข้องกับ chattr มันไม่ใช่วิธีแก้ปัญหาจริงๆ
Jeff Jirsa

1
นี่คือสิ่งที่ฉันทำบนระบบที่ฉันต้องการเปลี่ยน DNS ชั่วคราวด้วยเหตุผลบางอย่างและไม่ต้องการแก้ไขการกำหนดค่า ในฐานะที่เป็นทางออกถาวรฉันจะไม่แนะนำ
hochl

3
"วิธีแก้ปัญหาที่รวดเร็วและสกปรก"
YouniS Bensalah

10
นี่ไม่สกปรก โปรแกรมที่ทำลายการกำหนดค่าในเครื่องเนื่องจากพวกเขาคิดว่าพวกเขารู้ดีกว่าสกปรก

11

กำหนดค่า DNS ภายใต้ Linux

การใช้ DNS บน linux เสร็จสิ้นผ่านชุดของรูทีนในไลบรารี C ที่ให้การเข้าถึงระบบชื่อโดเมนอินเทอร์เน็ต (DNS) ไฟล์กำหนดค่าตัวแก้ไข ( resolv.conf) มีข้อมูลที่รูทีนตัวอ่านจะถูกอ่านในครั้งแรกที่กระบวนการถูกเรียกใช้โดยกระบวนการ กล่าวโดยสรุปกระบวนการที่ขอ DNS จะอ่าน/etc/resolv.confผ่านห้องสมุด เอ็นเอส/etc/nsswitch.confเป็นชั้นบนนี้และจะเป็นผู้กำหนด

การกำหนดค่า Linux DNSอยู่ในไฟล์/etc/resolv.conf แต่มีหลายโปรแกรม / บริการที่ต้องการจัดการและจัดการไฟล์การกำหนดค่า DNS ที่/etc/resolv.confโดยอัตโนมัติ ในบางสถานการณ์คุณอาจต้องการจัดการไฟล์นี้ด้วยตนเอง แต่ละโปรแกรม / บริการที่จัดการ DNS มีไฟล์การกำหนดค่าของตัวเองเช่น/etc/dnsmasq.conf(สำหรับบริการ dnsmasq) และผนวกการกำหนดค่า DNS ที่การเปลี่ยนแปลงการเชื่อมต่อและ / หรือในกิจกรรมอื่น ๆ ... วิธีแก้ปัญหาอย่างรวดเร็วคือการล็อคไฟล์ DNS ด้วยchattr +i /etc/resolv.confแต่ไม่แนะนำ ในบางกรณีทางออกที่ดีกว่าคือการตั้งค่าอย่างถูกต้องทุกโปรแกรม / บริการโดยใช้ DNS เช่น (dnsmasq / network-manager / resolvconf / etc)

การกลับมาควบคุม DNS

นี่คือรายการการตั้งค่าที่ละเอียดถี่ถ้วนเพื่อเรียกคืนการควบคุมของ resolv.confและหลีกเลี่ยงการเขียนทับ ( วิธีปิดใช้งาน / ตั้งค่า DNS จากตำแหน่งอื่นนอกเหนือจาก resolv.conf ) หมายเหตุที่ resolvconf เป็นโปรแกรมอิสระจาก resolv.conf เช่นกัน ขึ้นอยู่กับระบบ / การตั้งค่าของคุณคุณอาจไม่มีหนึ่งหรือหลายโปรแกรมที่แสดงไว้ที่นี่

1. Resolvconf:

กำหนดค่าไฟล์

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

อัปเดตการกำหนดค่า

sudo resolvconf -u

ปิดใช้งาน resolvconf

systemctl disable --now resolvconf.service 

2. บริการ Dnsmasq:

กำหนดค่าไฟล์

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

อัปเดตการกำหนดค่า

sudo systemctl restart dnsmasq.service

3. ผู้จัดการเครือข่าย:

กำหนดค่าไฟล์

/etc/NetworkManager/*

ปิดการใช้งาน DNS

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

เปิดใช้งาน DNS

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

ใช้บริการที่ได้รับการแก้ไข

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

ใช้ resolvconf

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

อัปเดตการกำหนดค่า

systemctl restart NetworkManager.service

4. การเชื่อมต่อเครือข่าย:

กำหนดค่าไฟล์

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

อัปเดตการกำหนดค่า

reboot

5. ไคลเอ็นต์ DHCP:

กำหนดค่าไฟล์

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

อัปเดตการกำหนดค่า

reboot

6. บริการ Rdnssd:

ปิดการใช้งาน rdnssd

systemctl disable --now rdnssd.service

7. บริการที่แก้ไข:

ปิดใช้งานการแก้ไข

systemctl disable --now systemd-resolved.service

8. Netconfig:

กำหนดค่าไฟล์

/etc/sysconfig/network/config

ปิดการใช้งาน netconfig

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

อัปเดตการกำหนดค่า

reboot

การตั้งค่าเซิร์ฟเวอร์ DNS

ตัวอย่างของการ/etc/resolv.confกำหนดค่า

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan

10

ปัญหาของฉันแตกต่างกันเล็กน้อยฉันต้องการแทนที่เซิร์ฟเวอร์ DNS ของเราเตอร์ ฉันพบลิงค์นี้จาก Ubuntu: https://wiki.ubuntu.com/OverrideDNSServers

มีข้อความแจ้งว่า: หากคุณต้องการแทนที่การตั้งค่า DNS ที่เซิร์ฟเวอร์ DHCP ให้มาให้เปิด

/etc/dhcp3/dhclient.conf

และเพิ่มบรรทัดต่อไปนี้:

supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

แทนที่<dns_ip_address*>รายการด้วยเนื้อหาที่เหมาะสม


นี่คือคำตอบที่แก้ไขปัญหาของฉัน
Michael

สมบูรณ์ เพียงเพิ่มที่คุณควร sudo เริ่มบริการเครือข่ายเพื่อเปิดใช้งานการเปลี่ยนแปลง
Nick Triantafillou

ถ้าเราไม่มีdhcp3โฟลเดอร์นั้นล่ะ ฉันมี Xubuntu 17.10 แล้วมันย้ายไปอยู่ที่/etc/dhcpเรียบง่ายไหม?
PlasmaBinturong

4

บางทีฉันอาจขาดอะไรบางอย่าง แต่ตามคำแนะนำการกำหนดค่าที่https://help.ubuntu.com/14.04/serverguide/network-configuration.htmlสิ่งที่คุณต้องทำคืออัปเดตต่อไป ฉันไม่ได้เรียกใช้พร็อกซี - เพียงแค่เครื่องที่อยู่หลังไฟร์วอลล์และ DNS ในเครื่อง (ตัวอย่างแสดง Googles แต่ตั้งค่าเป็นสิ่งที่คุณต้องการ)

nano /etc/network/interfaces

ค่าเริ่มต้น:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
auto eth0
iface eth0 inet dhcp

UPDATED:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask 255.255.255.0
gateway x.x.x.x

#nameservers
# you may not need dns-search
# I use it because I'm running this on a Windows network 
# so its useful to have
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

รีบูทถ้าคุณสามารถ


3

ลองเพิ่มdns-nameservers XXX.XXX.XXX.Xลงใน/etc/networking/interfacesไฟล์ของคุณ


กรุณาแสดงความคิดเห็นเมื่อคุณ downvote โปรด นี่คือวิธีการที่กำหนดไว้ในคู่มือหน้า 38
Zook

1
คู่มือที่ไม่ได้ระบุจะแสดง IP ทั้งหมดในหนึ่งบรรทัด คำตอบนี้ดูเหมือนจะแนะนำให้เพิ่มบรรทัด และทำไมตัวเลขสุดท้ายกว้างเพียง X เดียว ฉันคิดว่าส่วนใหญ่เป็นการเขียนสั้น ๆ แบบไม่เป็นทางการและไม่แน่ใจในรูปแบบแชทที่รวบรวม downvote @Zook
Cees Timmerman

2

คำตอบบางส่วนของที่นี่ใช้ได้ดี แต่ผมไม่ได้มีความสุขกับความจริงที่ฉันต้องไปด้วยตนเองผ่านแฟ้มการกำหนดค่าเพียงเพื่อตั้ง "เหมาะสม" DNSซึ่งฉันแล้วกำลังได้รับมากกว่าด้วยDHCPNetworkManager

ฉันไม่ขุดน้อยและสังเกตเห็นว่าไฟล์เป็นจริงการเชื่อมโยงและก็ชี้ไปที่/etc/resolv.conf /run/systemd/resolve/stub-resolv.confหลังจากการทดลองบางอย่างปรากฏว่า/run/systemd/resolve/ไดเรกทอรีมีไฟล์อื่นชื่อresolv.confซึ่งมีการตั้งค่าที่คุณได้รับDHCPแล้ว ดังนั้นแทนที่จะต้องเขียนทับ / สร้างไฟล์การกำหนดค่าด้วยตนเอง/etc/คุณสามารถลิงก์/etc/resolv.confไปที่/run/systemd/resolve/resolv.confไฟล์นั้นได้อีกครั้งและทั้งหมดควรจะดี:

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

ตอนนี้คุณควรจะสามารถแก้ไขการตั้งค่าได้จากตัวจัดการเครือข่ายใน Gnome :)

ไม่แน่ใจว่ามันจะใช้งานได้กับอูบุนตูรุ่นเก่า แต่ใช้บน Ubuntu 17.10


เมื่อเราเรียกใช้systemd-resolve --flush-cacheไฟล์ที่เชื่อมโยงเดิมถูกตัดคำตอบข้างต้นจะเรียกคืนการทำงานดั้งเดิม
hafizhanindito

1

แก้ไขพฤษภาคม 6,2016

ฉันเขียนสคริปต์เพื่ออัปเดตการตั้งค่าทั้งหมดสำหรับการเชื่อมต่อระบบใน/etc/Network-Manager/system-connections/ไดเรกทอรี GUI ที่คุณใช้แก้ไขการเชื่อมต่อส่วนบุคคลแก้ไขไฟล์เฉพาะในไดเรกทอรีนั้น สคริปต์จะอัปเดตไฟล์ทั้งหมด - เพียงแค่ค้นหาผู้ที่ไม่ได้ตั้งค่า DNS ด้วย grep และตั้งค่าด้วย awk

เนื่องจากการเข้าถึงไฟล์เหล่านั้นจำเป็นต้องsudoเข้าถึงให้เรียกใช้สคริปต์นี้ด้วยsudo- รีสตาร์ทตัวจัดการเครือข่าย

#!/bin/bash
# Author: Serg Kolo
# Date: May 6, 2015
# Description: this script checks all settings for connections in 
# /etc/NetworkManager/system-connections/ , and if there's no custom
# dns set , this script sets it;
# NOTE: run sudo service network-manager restart after running this script

set -x

for file in /etc/NetworkManager/system-connections/* ; do
        grep 'dns=208.67.220.220;' "$file"  || ( awk '{print;if ($1=="[ipv4]"){getline; print "method=auto\ndns=208.67.220.
220;\nignore-auto-dns=true"}}' "$file" > .tmpfile && ( cat .tmpfile > "$file") )
done

สคริปต์ทำงาน:

ป้อนคำอธิบายรูปภาพที่นี่

POST ORIGINAL POST ผู้ใช้บางคนที่นี่ชี้ให้เห็นว่า DNS ถูกควบคุมโดยอย่างใดdnsmasqถูกควบคุมอย่างใดโดย นั่นเป็นเรื่องจริง ฉันต้องเผชิญกับปัญหาที่ค่อนข้างมีขนาดเล็กที่ไม่ว่าผมเปลี่ยนheadหรือbodyใน/etc/resolvconf/resolv.conf.dคอมพิวเตอร์ของฉันอาจไม่จริงเข้าถึงฝึกงานโดยชื่อโดเมน - เพียงทำงานกับที่อยู่ IP

สิ่งที่ฉันทำคือแก้ไข /etc/NetworkManager/NetworkManager.confไฟล์ แต่เดิมก็กล่าวว่าแต่ฉันเปลี่ยนไป:dns=dnsmasq dns=208.67.222.222แม้ว่าวิธีนี้nm-toolจะไม่พูดถึง 208.67.222.222 แต่ฉันก็ยังสามารถใช้ชื่อโดเมนได้ไม่ใช่แค่ที่อยู่ IP

นี่คือวิธีของฉัน NetworkManager.confลักษณะที่ไฟล์ดูเหมือนตอนนี้:

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
dns=208.67.222.222

[ifupdown]
managed=false

บันทึก:สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับปัญหาของฉันและการแก้ปัญหานี้ให้ดูที่การโพสต์ของฉันในaskubuntu.com

อัปเดต # 1

วันนี้ฉันกลับบ้านจากมหาวิทยาลัยฉันค้นพบว่าฉันไม่สามารถเชื่อมต่อกับ WiFi ที่บ้านได้ ฉันได้อ่านขึ้นเพียงเล็กน้อยในman NetworkManager.confและปรากฎว่าdns=ใน[main]นั้นเป็นไลน์ของปลั๊กอินดังนั้น line dns=dnsmasqจึงเพิ่มปลั๊กอิน dnsmasq ลงใน NetworkManager อย่างเห็นได้ชัด

ดังนั้นวิธีการแก้ปัญหาของฉันยังคงทำงานไม่ได้อย่างที่คาดไว้ นี่คือข้อความที่ตัดตอนมาจากหน้าคน:

dns=plugin1,plugin2, ... List DNS plugin names separated by ','. 

ปลั๊กอิน DNS ใช้เพื่อจัดทำฟังก์ชันแคชเนมเซิร์ฟเวอร์แคช (ซึ่งเพิ่มความเร็วการสืบค้น DNS) และส่งข้อมูล DNS ไปยังแอปพลิเคชันที่ใช้

ดังนั้นโดยการตั้งค่าdns=208.67.222.222ฉันอาจมีโดยทั่วไปป้องกัน NetworkManager จากการใช้ปลั๊กอินนั้นซึ่งจะใช้เซิร์ฟเวอร์ DNS ท้องถิ่น (ซึ่งเห็นได้ชัดว่าไม่ทำงาน)


1

มีสองวิธี

วิธีที่ 1

เซิร์ฟเวอร์ DNS ที่จะใช้สามารถเปลี่ยนแปลงได้โดยอัปเดตheadไฟล์ที่อยู่ด้านล่างresolv.conf.d

$ echo 'nameserver 1.1.1.1' | sudo tee /etc/resolvconf/resolv.conf.d/base

จากนั้นเรียกใช้

$ sudo resolvconf -u

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

อย่างไรก็ตามมีความหมายต่อสิ่งนี้ เมื่อใช้resolvconfเพื่อสอบถาม1.1.1.1การแก้ไขที่อยู่โดยตรงพลังของการแคชที่จัดทำโดย dnsmasq จะหายไป ทุกคำขอจะไปที่1.1.1.1

วิธีที่ 2

หากคุณไม่ต้องการให้เกิดขึ้นข้างต้นและใช้ dnsmasq สำหรับการแก้ปัญหา DNS อ้างถึงสิ่งนี้คำตอบ คำตอบนั้นได้อธิบายไว้ที่นี่

เพิ่มเนื้อหาต่อไปนี้ใน/etc/dnsmasq.confไฟล์

เซิร์ฟเวอร์ = 1.1.1.1

จากนั้นรีสตาร์ทเซอร์วิส dnsmasq

$ sudo systemctl restart dnsmasq.service

สิ่งต่าง ๆ จะทำงานได้ดี แก้ไข


0

วิธีง่ายๆในการเปลี่ยน DNS:

$ sudo nano /etc/network/interfaces

หากเกิดปัญหาขึ้นให้ติดตั้งnano:

$ sudo apt-get install nano -y

แล้ว ..

  1. ค้นหาสิ่งนี้: dns-nameservers
  2. หากคุณไม่พบมันแค่พิมพ์ลงไปที่นั่น
  3. ฉันทำของฉันเช่นนี้: dns-nameservers 199.85.126.10 199.85.127.10

ฉันหวังว่านี่เป็นวิธีที่ดีที่สุดฉันทำแบบนี้ใน VPS โดยวิธี


0

บนราก:

  1. แสดงความคิดเห็นdns=dnsmasqใน/etc/NetworkManager/NetworkManager.conf
  2. เพิ่มsupersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;ที่ส่วนท้ายของ/etc/dhcp/dhclient.conf
  3. sudo service network-manager restart

ต่อไปนี้ทำให้การเปลี่ยนแปลงที่แสดงด้านบน:

$ sudo sed -i 's/dns\x3Ddnsmasq/\x23dns\x3Ddnsmasq/' \
   /etc/NetworkManager/NetworkManager.conf

$ echo 'supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;' | \
   sudo tee --append /etc/dhcp/dhclient.conf

$ sudo service network-manager restart

รอ 7/10 วินาทีเพื่อเสร็จสิ้นกระบวนการรีสตาร์ทตรวจสอบการกำหนดค่าของคุณด้วย "nslookup nist.gov" ทำงานได้ดีบน Ubuntu LTS 14.04


0

NB: ชอบคำตอบส่วนใหญ่อันนี้ถือว่าการใช้ NetworkManager แต่แตกต่างจากคำตอบอื่น ๆ ส่วนใหญ่ก็ไม่ถือว่าการใช้งานของresolvconf, dhclientหรือสิ่งอื่น - ระวังการที่พวกเขาอาจใช้เวลามากกว่า แต่ (ดูการปรับปรุง)

ได้รับหมายเลขของมุมมองของคำถามนี้ก็ค่อนข้างไม่น่าเชื่อว่านี่8 ตัวอักษรวิธีการแก้ปัญหายังไม่ได้รับการโพสต์ยัง: ตามman NetworkManager.conf,

dns: […] none: NetworkManager จะไม่แก้ไข resolv.conf สิ่งนี้บ่งบอกถึงตัวจัดการ rc ที่ไม่มีการจัดการ

ดังนั้นการเพิ่ม

dns=none

ใน[main]ส่วนของการ/etc/NetworkManager/NetworkManager.confรีสตาร์ท NetworkManager และมันจะไม่แก้ไข/etc/resolv.confอีกต่อไป

โปรดทราบว่าการตั้งค่าrc-manager=unmanagedควรจะเทียบเท่าdns=noneและการตั้งค่าrc-manager=symlinkพร้อมกับ/etc/resolv.confการเชื่อมโยงเป็นสัญลักษณ์อาจเป็นแนวคิดที่ดีกว่า (อ่าน manpage ที่กล่าวถึงข้างต้น)

อัปเดต:

หลังจาก NetworkManager หยุดเขียนทับ/etc/resolv.confฉันคิดว่าdhcpcdถูกแทนที่/etc/resolv.confด้วยไฟล์ว่างเปล่าที่ไม่มีประโยชน์ตอนบูต manpage ของdhcpcd.confช่วยมันพอเพียงที่จะเพิ่ม

nohook resolv.conf

ในของคุณdhcpcd.conf(ของฉันอยู่ใน/etc/dhcpcd.conf)


0

บนเซิร์ฟเวอร์ Linux centos7 ของฉันวิธีที่ดีที่สุดที่ฉันสามารถเปลี่ยนตัวเลือกนี้ได้คือการใช้

nmtui

คำสั่งที่ไม่แนะนำในคำตอบใด ๆ ที่นี่ คุณสามารถแก้ไขเนมเซิร์ฟเวอร์ในเครื่องมือนี้และเมื่อคุณเปลี่ยนตัวเลือกของ networkmanager จากยูทิลิตี้นี้พวกเขาจะถูกนำไปใช้โดยอัตโนมัติ/etc/resolv.confหลังจากรีบูต คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่

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