ฉันจะล้างแคช DNS ได้อย่างไร


191

ฉันเพียงแค่การปรับปรุงระเบียน DNS ( ns1, ns2, ns3.myhostingcompany.com) สำหรับเว็บไซต์ของฉันมีเจ้าภาพ แต่ฉันยังคงได้รับโดเมนหน้าที่จอดรถนายทะเบียน

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


1
/etc/hostsนอกจากนี้ตรวจสอบ ฉันเพิ่งแน่ใจว่าที่อยู่ IP เก่าของโดเมนของฉันถูกแคช แต่strace ping example.comเปิดเผยว่าฉันลืมที่จะลบ/etc/hostsระเบียนที่ฉันเพิ่มไปเมื่อไม่นานมานี้เนื่องจากขาดความอดทนในการเผยแพร่ DNS
ulidtko

2
คำตอบเหล่านี้ส่วนใหญ่แนะนำให้แคชถูกปิดใช้งานโดยค่าเริ่มต้น แต่พวกเขายังอ้างถึงรุ่นเก่ากว่า แน่นอนว่ามันจะเปิดโดยค่าเริ่มต้นในเครื่องของฉัน (18.04) และคำตอบต่าง ๆ ด้านล่างจะแสดงวิธีล้างมันเพียงเลื่อนลงมา
Madivad

คำตอบ:


64

สำหรับ 18.04 และสูงกว่า

ดูคำตอบไมค์ Shultz'

สำหรับ 11.10 และต่ำกว่า

Ubuntu จะไม่แคชระเบียน DNS ตามค่าเริ่มต้นดังนั้นหากคุณไม่ได้ติดตั้งแคช DNS ให้ล้างข้อมูลใด ๆ

ระเบียน DNS น่าจะถูกแคชโดยเซิร์ฟเวอร์ DNS ของผู้ให้บริการของคุณดังนั้นหากคุณต้องการตรวจสอบว่าการเปลี่ยนแปลง DNS ที่คุณทำสำเร็จหรือไม่คุณสามารถสอบถามเซิร์ฟเวอร์ DNS จากบริการโฮสต์โดเมนของคุณด้วยขุด:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

มันคุณต้องการอูบุนตูที่จะเริ่มต้นการแคช DNS ผมขอแนะนำให้ติดตั้งร่วมกับpdnsd เป็นรถและไม่แนะนำให้เลือกresolvconfnscd


14
การอ้างอิงใด ๆ เกี่ยวกับสาเหตุที่ nscd เป็นบั๊กซี? วันนี้ยังเป็นรถบั๊กกี้หรือไม่ (2012-10)
jjmontes

3
คุณช่วยอัปเดตคำตอบของคุณได้ไหม - มันฟังดูเหมือนกับ Ubuntu เวอร์ชั่น 11.10+ ทำแคช DNS records
Martin Konecny

70

Ubuntu 17.04 และสูงกว่า (18.04)

จาก Ubuntu 17.04 และต่อไปจะใช้การแก้ไขปัญหาระบบสำหรับ DNS คุณสามารถล้างแคชของ systemd ดังนี้:

sudo systemd-resolve --flush-caches

2
OMG คุณจะแต่งงานกับฉันไหม แก้ไขปัญหาของฉันด้วย 18.04 ด้วย \ o /
NiKo

5
สิ่งนี้ไม่ได้ผลสำหรับฉันที่ 16.04 LTS - แต่มันมีประโยชน์ที่จะเห็นอีกวิธีหนึ่งที่อาจถูกแคช:sudo systemd-resolve --statistics
ฟิล

คุณบันทึกวัน
Danilo Gomes

1
ไม่ทำงานใน 18.04
LnxSlck

1
สำหรับฉันsystemctl restart systemd-resolved.serviceทำงานได้ 18.04 ด้วย
Justin Sane

69

12.04

Ubuntu 12.04 ใช้dnsmasqซึ่งสร้างไว้network-managerแต่ไม่แคช DNS ดังนั้นจึงไม่จำเป็นต้องล้างออก นี่คือตัวอย่างบรรทัดจากของฉันsyslogเพื่อพิสูจน์จุดนั้น:

dnsmasq[2980]: started, version 2.59 cache disabled

dnsmasqนอกจากนี้ยังมีความจำเป็นในการกำหนดค่าของใด ๆ หากคุณใช้งานการตั้งค่าสต็อกมันจะไม่แคช dns สำหรับการทำเช่นนั้นคุณจะต้องตั้งค่าอย่างชัดเจนตามที่บทความของ Ubuntuอธิบายไว้

หากคุณต้องการรีเฟรชการตั้งค่าคุณสามารถปิดใช้งานแล้วเปิดใช้งานเครือข่ายหรือเรียกใช้

sudo service network-manager restart

สิ่งนี้จะรีสตาร์ทdnsmasqเพราะมันถูกสร้างไว้ในnetwork-manager; ตรวจสอบsyslogหลักฐานของคุณ

หากคุณใช้การเชื่อมต่อแบบมีสายกับ dhcp network managerจะทำการตั้งค่าโดยตรงจากเราเตอร์ของคุณและการเชื่อมต่อของคุณจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณลงชื่อเข้าใช้ Ubuntu คุณสามารถตรวจสอบว่าการตั้งค่านั้นถูกต้องในเราเตอร์ของคุณหรือไม่หากคุณสามารถเข้าถึงได้ผ่านทางเว็บอินเตอร์เฟสและอาจจะทำการรีบูตหากจำเป็น ถ้ามันเป็นปัญหาทั่วไปที่มี DNS คุณอาจจะลองใช้ Google DNS แทน DNS ของ ISP ของคุณและข้อมูลเพิ่มเติมเกี่ยวกับที่มีรายละเอียดที่นี่


sudo service network-manager restartเคล็ดลับสำหรับฉันกับ Debian
Pierre de LESPINAY

61

โปรดทราบว่า Ubuntu ใช้การแก้ปัญหาระบบจาก 17.04 เป็นต้นไปดังนั้นคำตอบนี้จะไม่ใช้กับ Ubuntu รุ่นล่าสุดอีกต่อไป ดู " ล้างแคช DNS ใน Ubuntu 17.04 และสูงกว่า (18.04) "

ตามค่าเริ่มต้น DNS จะไม่ถูกแคชใน Ubuntu <17.04 (แต่อาจถูกแคชในเครือข่ายหรือแอปพลิเคชัน)

หากต้องการยืนยันวิธีใดวิธีหนึ่งไม่ว่าจะdnsmasqเป็นการแคชให้รันps ax | grep dnsmasqและดูที่คำสั่งที่กำลังรัน นี่คือรายละเอียดของเครื่องเริ่มต้นของฉัน 13.10:

/ usr / sbin / dnsmasq \
  - ไม่แก้ไข \
  - เก็บไว้ด้านหน้าเบื้องหน้า \
  - ไม่มีโฮสต์ \
  - ผูกอินเทอร์เฟซ \
  --pid-file = / var / run / NetworkManager / dnsmasq.pid \
  - รายการที่อยู่ = 127.0.1.1 \
  --conf-file = / var / run / NetworkManager / dnsmasq.conf \
  --cache-size = 0 \
  --proxy-dnssec \
  --enable-dbus = org.freedesktop.NetworkManager.dnsmasq \
  --conf-dir = / etc / NetworkManager / dnsmasq.d

/etc/NetworkManager/dnsmasq.dว่างเปล่าโดยค่าเริ่มต้น ดังนั้นจึงไม่มีการแทนที่ใด ๆ ที่เข้ามาและเพียงแค่ตรวจสอบ--cache-size=0หมายความว่าสิ่งที่เราคิดว่ามันหมายถึง (แทนที่จะเป็นแคชไม่ จำกัด ) man dnsmasqแสดง:

-c, --cache-size=<cachesize>
  Set the size of dnsmasq's cache. The default is 150 names. 
  Setting the cache size to zero disables caching.

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

หากคุณเห็นปัญหาแคชสิ่งนี้อาจเกิดขึ้นได้ในที่ไม่กี่แห่ง:

  • อัปสตรีมจากคอมพิวเตอร์ของคุณ เราเตอร์บางแคช เครือข่ายองค์กรหลายแห่งจะแคช DNS เซิร์ฟเวอร์ DNS ที่ใช้งาน ISP จำนวนมากและจะใช้แคชของตัวเอง วิธีเดียวที่จะรับประกันกับแคชเครือข่ายคือการใช้แคชที่คุณสามารถรีเฟรชได้ด้วยตนเอง นี่คือเหตุผลที่ฉันชอบ OpenDNS
  • ในแอปพลิเคชันไคลเอนต์ (เบราว์เซอร์ที่สะดุดตา) แอปพลิเคชันสามารถทำแคชได้ทุกประเภทที่ Ubuntu ไม่มีผล Firefox เก็บ DNSอย่างไร วิธีการล้างแคช DNS ของ Chrome เบราว์เซอร์อื่น ๆ (และแอปพลิเคชัน) อาจมีกลไกของตนเอง
  • ฉันขูดบาร์เรลนี่ แต่บางทีคุณอาจได้ติดตั้งเซิร์ฟเวอร์ DNS ที่ไม่ได้มาตรฐานใน Ubuntu dnsmasqแทนการเปลี่ยนแคชใน มีหลาย ได้แก่ : nscd, djbdns dnscache(aka TinyDNS) pdns, pdnsd, bind9 (และตัวแปรของมัน) และอื่น ๆ อีกมากมายที่ฉันจะจำไม่ได้ว่า สิ่งเหล่านี้อาจเป็นหลักฐานใน/etc/resolv.conf(ด้วย config ใน / etc / resolvconf / `เพื่อ autogen ไฟล์นั้น) ต่อไปนี้แสดงให้เห็นถึงการสอบถาม DNS ภายในเครื่อง:

    $ nslookup askubuntu.com
    Server:     127.0.1.1
    Address:    127.0.1.1#53
    
    Non-authoritative answer:
    Name:   askubuntu.com
    Address: 198.252.206.24
    

    หากคุณไม่ได้กดปุ่ม 8.8.8.8 (หรือสิ่งที่คุณคาดหวังว่าเซิร์ฟเวอร์ DNS ของคุณจะเป็น) ให้ตรวจสอบสิ่งที่คุณกำลังกดปุ่มแทน ในกรณีของฉันฉันเห็นว่านี่เป็นเพียงการdnsmasqตั้งค่าให้มิเรอร์ DNS สืบค้นกลับสำหรับ LXC แต่ในกรณีของคุณอาจทำสิ่งที่ไม่ดี

    หากคุณทำแคชที่แสดงรายการไว้แล้วกระบวนการสำหรับการล้างแต่ละรายการจะแตกต่างกันไป:

    sudo /etc/init.d/nscd reload    # nscd
    sudo /etc/init.d/named restart  # bind9
    

ในบันทึกที่เกี่ยวข้องเล็กน้อยเห็นนี้เพื่อเปิดใช้งานในแคชdnsmasq


1
เอาต์พุตของฉันจาก ps aux | grep เหมือนกับของคุณ แต่มีบางสิ่งที่แน่นอนคือการแคช DNSs บนเครื่องของฉัน ถ้าไม่ใช่ dnsmasq ก็เป็นอย่างอื่น หลักฐาน: ฉันสร้างโดเมนย่อยบนเซิร์ฟเวอร์ของฉัน แต่ฉันไม่สามารถปิงได้โฮสต์ไม่สามารถเข้าถึงได้ ฉันตรวจสอบที่ downforeveryoneorjustme.com แล้วและมันก็ขึ้นอยู่ดังนั้นปัญหาการแพร่กระจายจึงถูกยกเลิก ไม่ใช่เราเตอร์หรือ ISP ของฉันเพราะฉันใช้ DNS ของ Google 8.8.8.8 จากนั้นฉันรีบูตคอมพิวเตอร์ (ไม่ใช่เราเตอร์) และสามารถเข้าถึงโดเมนได้ ฉันลองใหม่หลายสิบครั้งก่อนที่จะรีบูตโดยไม่มีโชค ลองครั้งแรกหลังจากรีบูตเครื่องถึงโฮสต์
matteo

และนี่ไม่ใช่ครั้งแรกที่ฉันได้สัมผัสกับสิ่งเดียวกันโดยวิธี หลายเดือนที่ผ่านมาสิ่งเดียวกันเกิดขึ้นและวิธีเดียวที่ฉันสามารถเข้าถึงโดเมนได้คือการรีสตาร์ทคอมพิวเตอร์ แต่หลังจากนั้นฉันก็มีรุ่น Ubuntu เก่ากว่า
matteo

@matteo เบราว์เซอร์?
Oli

ไม่อย่างที่ฉันบอกว่าฉันทดสอบด้วย ping ไม่ใช่เฉพาะเบราว์เซอร์
matteo

@matteo ฉันได้เพิ่มมากขึ้น แต่ความคิดของฉันหมดลง ไม่มีสถานที่อื่น ๆ อีกมากมายที่ใครสักคนสามารถแคช DNS :)
34432 Oli

39

สำหรับ 12.04:

Ubuntu 12.04 ทำการแคช DNS โดยใช้ dnsmasq (ดูman dnsmasq) ใช้สิ่งต่อไปนี้เพื่อล้างแคช:

sudo kill -HUP $(pgrep dnsmasq)

ขอขอบคุณ! คุณเป็นคนแรกที่ฉันได้เห็นพูดถึงอะไรเกี่ยวกับแคชเริ่มต้นของ 12.04!
Tarka

6
12.04 ไม่แคช DNS โดยค่าเริ่มต้น - ตรวจสอบ syslog ของคุณหลังจากรีสตาร์ทเครือข่ายผู้จัดการ มันจะมีรายการที่แสดง dnsmasq เริ่มต้นด้วยแคชที่ถูกปิดใช้งาน

1
ฉันไม่รู้ว่าแคชถูกเปิดใช้งานตามค่าเริ่มต้นหรือไม่ แต่คำตอบนี้ใช้ได้สำหรับฉัน
jeyk

ทำไมไม่เพียงsudo killall -HUP dnsmasq?
James Haigh

1
ใช้pkillแทนkillและpgrep
Robert Siemer

15

sudo /etc/init.d/nscd restart

http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html

นอกจากนี้ยังเป็นบันทึกย่อที่คุณสามารถตรวจสอบและดูว่าการเปลี่ยนแปลง DNS ของคุณเผยแพร่โดยใช้การขุดและค้นหาผู้อื่นที่ไม่ใช่เซิร์ฟเวอร์ DNS เริ่มต้นของคุณหรือไม่ ในกรณีนี้ google DNS

dig @8.8.8.8 example.com


12
เป็นที่น่าสังเกตว่า nscd ไม่ได้ถูกติดตั้งโดยค่าเริ่มต้น
Scaine

11

โดยส่วนตัวแล้วฉันใช้ OpenDNSและใช้ฟังก์ชัน Cache Checkเพื่อบังคับให้รีเฟรชเพียงเพื่อให้แน่ใจว่าการเปลี่ยนแปลงจะทำงาน แต่คุณไม่สามารถรับประกันได้ว่าพวกเขาจะรีเฟรชสำหรับผู้ใช้ของคุณภายใน 48 ชั่วโมง

DNS เป็นสัตว์ร้ายที่ช้า ความอดทนจะทำให้คุณมีสติ


+1 ฉันใช้ OpenDNS และล้างแคชมีประโยชน์มาก
Mark Davidson

ฉันสงสัย OpenDNS ตอนแรกฉันมีความสุข แต่หลังจากนั้นฉันก็เริ่มสงสัย แม้ว่าฉันเดาว่าเป็นตัวเลือกระหว่าง ISP และ OpenDNS ฉันดีกว่าด้วย OpenDNS ใช่ไหม
Jono

2
ฉันจะบอกว่า OpenDNS เป็นความชั่วร้ายที่น้อยกว่า พวกเขาต้องการสร้างรายได้จากการเข้าชมของคุณ แต่จะได้รับความนิยมในโดเมนที่ไม่ดีเท่านั้น
Oli

@Oli ลิงก์ไม่ทำงาน หากคุณยังใช้อยู่คุณสามารถอัพเดทลิงค์ได้ไหม?
Shayan

7

หากคุณกำลังใช้ nscd:

sudo /etc/init.d/nscd restart

เป็นมูลค่าการกล่าวขวัญว่ามันอาจจะไม่ใช่ระบบปฏิบัติการที่แคช ทุกคนชอบแคช DNS ... การทดสอบบางอย่าง:

ตรวจสอบว่าเป็น IP ใหม่หรือเก่า เบราว์เซอร์ส่วนใหญ่จะแคช DNS เช่นกันดังนั้นหากคุณยังไม่ได้รีสตาร์ท Chromium หรืออะไรก็ตามที่คุณอาจไม่เห็นล่าสุด

ping yourdomain.com

สลับเนมเซิร์ฟเวอร์ในเครื่องของคุณใน /etc/resolv.conf ไปยังผู้ให้บริการรายอื่น google หรือระดับตัวอย่าง:

nameserver 8.8.8.8
nameserver 4.2.2.2

แล้วส่ง Ping อีกครั้ง

ตรวจสอบให้แน่ใจว่าเราเตอร์ของคุณไม่ได้แคช DNS ในรูปแบบใด ๆ (แตกต่างกันไปตามเราเตอร์ / เฟิร์มแวร์ / ฯลฯ )

ในที่สุดความอดทน DNS อาจใช้เวลาสักครู่ในการเผยแพร่ทั่วทั้งอินเทอร์เน็ต


2
หากใช้ NetworkManager และ DHCP /etc/resolve.conf จะถูกล้างออกเมื่อ DHCP lease หมดอายุดังนั้นคุณจะต้องตั้งค่า ip แบบคงที่ใน NetworkManager เพื่อให้ใช้งานได้นานขึ้น
LassePoulsen

+1 ฉันไม่ทราบว่า Firefox กำลังแคช DNS สิ่งนี้ช่วยได้มาก
wavemode

+1 สำหรับการเปลี่ยนเนมเซิร์ฟเวอร์ท้องถิ่นเป็น google ใช้งานได้
Bibek Sharma

5

คำตอบทั้งหมดข้างต้นลืมสิ่งสำคัญอย่างหนึ่งในการแก้ไขชื่อ: โดยทั่วไปแล้วเซิร์ฟเวอร์ DNS ที่คุณขอให้มีการแก้ไขชื่อไม่ใช่คนที่ถือระเบียนด้วยตนเอง (เซิร์ฟเวอร์ที่มีสิทธิ์) เนื่องจากแต่ละระเบียน DNS มาพร้อมกับค่า Time To Live ซึ่งจะบังคับเซิร์ฟเวอร์ DNS แต่ละตัวในกลุ่มการแก้ปัญหาให้ทำการแคชในช่วงเวลาที่ระบุไว้ด้วยค่านี้ ดังนั้นไม่เพียง แต่คุณสามารถแคชในเครื่องของคุณได้ แต่ผลลัพธ์ของการค้นหาชื่อจะถูกแคชไว้ที่ใดที่หนึ่งบนเซิร์ฟเวอร์ที่คุณไม่ได้ควบคุม

ทางออกเดียวที่จะได้รับแจ้งทันทีของการเปลี่ยนแปลงบันทึกชื่อคือการใช้ค่า TTL เป็น 0 เมื่อสร้าง / อัพเดทรายการในเซิร์ฟเวอร์ชื่อที่เชื่อถือได้ แต่นี่หมายความว่าสำหรับการจำแนกชื่อแต่ละชื่อเซิร์ฟเวอร์จะถูกโจมตีโดยปกติจะไม่ได้รับอนุญาตจากผู้รับจดทะเบียน ตัวอย่างเช่นพวกเขาสามารถให้รายการค่า TTL ที่กำหนดไว้ล่วงหน้าที่คุณสามารถเลือกได้

ฉันจัดการชื่อโดเมนที่แตกต่างกันและเพื่อให้แน่ใจว่ามีการใช้การเปลี่ยนแปลงในเซิร์ฟเวอร์ชื่อที่มีสิทธิ์ฉันใช้เครื่องมือที่เรียกdnstracerว่าสามารถแสดงผลลัพธ์การค้นหาในแต่ละเซิร์ฟเวอร์จากรูท DNS

โดยสรุปแม้ว่าจะไม่มีโซลูชันการแคช DNS อยู่ก็ตามก็จะยังคงมีความล่าช้าระหว่างช่วงเวลาที่คุณเปลี่ยนระเบียน DNS และการเปลี่ยนแปลงจะปรากฏบนพีซี ความล่าช้านี้ขึ้นอยู่กับ TTL ของระเบียนและจำนวนเซิร์ฟเวอร์ DNS ระหว่างพีซีของคุณและเซิร์ฟเวอร์ชื่อที่เชื่อถือได้


แน่นอน แต่ถ้านั่นเป็นปัญหาการรีบูตเครื่องคอมพิวเตอร์จะไม่สามารถแก้ไขได้
matteo

2

สำหรับ Ubuntu 14.04 ฉันแนะนำและคำสั่งนี้:

sudo service dns-clean

ไม่ได้อยู่ในการติดตั้งเซิร์ฟเวอร์เริ่มต้น ใช้งานได้ตั้งแต่ 14.04 และต่ำกว่าเท่านั้น
RJ

1

ฉันใช้คำสั่งต่อไปนี้เพื่อล้างแคช DNS ในกล่องอูบุนตู 12.10 ของฉันและมันใช้งานได้ดี

sudo kill -HUP $(pgrep dnsmasq)

สัญญาณที่เป็นประโยชน์อีกอย่างคือ SIGUSR1 ซึ่งดัมพ์สถิติเล็กน้อยไปยัง syslog หรือตามที่ทราบจากman dnsmasq:

ในโหมด - no-daemon หรือเมื่อเปิดใช้งานการบันทึกแบบเต็ม (-q) การดัมพ์แบบสมบูรณ์ของเนื้อหาของแคชจะถูกสร้างขึ้น


ใช้pkillแทนkillและpgrep
Robert Siemer

1

ใน Ubuntu 16.04 ฉันไม่สามารถล้างแคชเว้นแต่ว่าฉันจะทำ:

sudo service dnsmasq restart

0

ฉันพบความขัดแย้งเช่นกัน แต่นี่: https://superuser.com/a/521562 woks สำหรับฉัน (Ubuntu 13.10 ที่มีการปรับปรุงล่าสุดไม่มีการติดตั้งแพ็กเกจเครือข่ายพิเศษ)
ในระยะสั้นเพียงใช้สิ่งนี้
sudo /etc/init.d/dns-clean


0

ฉันแนะนำ openDNS เป็นพิเศษในเซิร์ฟเวอร์ Ubuntu ระยะไกลมันช่วยลดความเจ็บปวดได้มาก ...

ทำอย่างไร? ดี...

cd /etc/dhcp
sudo nano dhclient.conf

แทรกสิ่งนี้ก่อนบรรทัด "request subnet-mask ... "

supersede domain-name-servers 208.67.222.222,208.67.220.220;

สิ่งนี้จะรีสตาร์ทอินเทอร์เฟซอย่างรวดเร็วจนคุณไม่ควรพลาดการเชื่อมต่อ SSH

sudo ifdown eth0 && sudo ifup eth0

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

cat /etc/resolv.conf

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