Jak wyczyścić pamięć podręczną DNS?

191

Właśnie aktualizowany rekord DNS ( ns1, ns2, ns3.myhostingcompany.com) na miejscu mam gospodarzem, ale wciąż otrzymuję stronę parkingu rejestratora domeny.

Chciałbym sprawdzić, czy problemem są buforowane rekordy DNS Ubuntu. Czy istnieje sposób na wyczyszczenie pamięci podręcznej DNS Ubuntu? (jeśli coś takiego istnieje?)

Jono
źródło
1
Sprawdź także /etc/hosts. Właśnie byłem pewien, że stary adres IP mojej domeny jest buforowany, ale strace ping example.comujawniłem tylko , że zapomniałem usunąć /etc/hostsrekord, który dodałem jakiś czas temu z powodu braku cierpliwości dla propagacji DNS.
ulidtko
2
wiele z tych odpowiedzi sugeruje, że buforowanie jest domyślnie wyłączone, ale odnoszą się również do starszych wersji. Wygląda na to, że domyślnie jest włączony na moim komputerze (18.04), a różne odpowiedzi poniżej pokazują, jak go opróżnić, po prostu przewiń w dół
Madivad

Odpowiedzi:

64

Dla 18.04 i wyższych

Spójrz na odpowiedź Mike'a Shultza .

Dla wersji 11.10 i niższej

Ubuntu domyślnie nie buforuje rekordów dns, więc dopóki nie zainstalujesz pamięci podręcznej dns, nie ma nic do wyczyszczenia.

Rekordy DNS są prawdopodobnie buforowane przez serwery DNS Twojego dostawcy, więc jeśli chcesz sprawdzić, czy wprowadzone zmiany DNS zakończyły się powodzeniem, możesz przesłuchać serwer DNS z usługi hostingowej domeny za pomocą dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Jeśli chcesz, aby Ubuntu zaczął buforować dns, polecam zainstalować pdnsdrazem z resolvconf. nscdjest wadliwy i niewskazany.

Li Lo
źródło
14
Wszelkie odniesienia do tego, dlaczego nscd jest błędny? Czy nadal jest wadliwy dzisiaj (2012-10)?
jjmontes
3
Czy możesz zaktualizować swoją odpowiedź - ATM, to brzmi jak Ubuntu w wersji 11.10+ do buforowania rekordów DNS.
Martin Konecny
70

Ubuntu 17.04 i wyższe (18.04)

Począwszy od Ubuntu 17.04 i późniejszych, DNS jest używany w systemie-resolver. Możesz opróżniać pamięci podręczne systemd tak:

sudo systemd-resolve --flush-caches
Mike Shultz
źródło
2
OMG, wyjdziesz za mnie? Rozwiązałem również mój problem z 18.04 \ o /
NiKo
5
Nie działało to dla mnie 16.04 LTS - ale warto było zobaczyć inny sposób, w jaki mógłby to być buforowanie:sudo systemd-resolve --statistics
Phil
uratowałeś dzień
Danilo Gomes
1
Nie działa w dniu 18.04
LnxSlck
1
Dla mnie systemctl restart systemd-resolved.servicepracował także 18.04.
Justin Sane
69

12.04

Ubuntu 12.04 używa dnsmasqwbudowanego network-manager, ale nie buforuje dns, więc nie ma potrzeby go opróżniać. Oto przykładowa linia ode mnie, syslogaby udowodnić ten punkt:

dnsmasq[2980]: started, version 2.59 cache disabled

Nie ma również potrzeby konfiguracji dnsmasq. Jeśli korzystasz z ustawień fabrycznych, nie będzie buforował dns, ponieważ aby to zrobić, musisz jawnie skonfigurować go, jak opisano w tym artykule Ubuntu .

Jeśli chcesz odświeżyć swoje ustawienia, możesz wyłączyć, a następnie włączyć sieć lub uruchomić

sudo service network-manager restart

Spowoduje to ponowne uruchomienie, dnsmasqponieważ jest wbudowane w network-manager; sprawdź swoje syslogdowody na to.

Jeśli używasz połączenia przewodowego z dhcp, ustawienia network managerbędą pobierane bezpośrednio z routera, a twoje połączenie zostanie nawiązane automatycznie po zalogowaniu się do Ubuntu. Możesz sprawdzić, czy ustawienia są prawidłowe w routerze, jeśli możesz uzyskać do niego dostęp za pośrednictwem interfejsu internetowego, i być może uruchom go ponownie, jeśli to konieczne. Jeśli jest to ogólny problem z usługami DNS, możesz spróbować użyć Google DNS zamiast ISDN DNS, a więcej informacji na ten temat można znaleźć tutaj .

fossfreedom
źródło
sudo service network-manager restartwykonał dla mnie lewę z Debianem
Pierre de LESPINAY,
61

Zauważ, że Ubuntu używa systemd-resolver od 17.04 i nowszych, więc ta odpowiedź nie ma już zastosowania do najnowszych wersji Ubuntu. Zobacz „ Opróżnianie pamięci podręcznej DNS w systemie Ubuntu 17.04 i nowszych (18.04)

Domyślnie DNS nie jest buforowany w Ubuntu <17.04 (ale może być buforowany w sieci lub aplikacji)

Aby potwierdzić, czy dnsmasqbuforowanie odbywa się w ten czy inny sposób , uruchom ps ax | grep dnsmasqi spójrz na uruchomione polecenie. Oto podział mojej domyślnej maszyny 13.10:

/ usr / sbin / dnsmasq \
  --no-resolv \
  - utrzymanie na pierwszym planie \
  --no-hosts \
  --bind-interfaces \
  --pid-file = / var / run / NetworkManager / dnsmasq.pid \
  --listen-address = 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.djest domyślnie pusty. Więc nie ma żadnych nadpisań i po prostu sprawdzenie --cache-size=0oznacza, co naszym zdaniem oznacza (zamiast nieograniczonej pamięci podręcznej), man dnsmasqpokazuje:

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

Chociaż dnsmasq może buforować DNS, nie jest buforowany po wyjęciu z pudełka. Możesz sprawdzić swój komputer i różne katalogi konfiguracji, aby sprawdzić, czy jesteś na tej samej stronie.

Jeśli występują problemy z pamięcią podręczną, dzieje się tak prawdopodobnie w jednym z kilku miejsc:

  • Upstream z twojego komputera. Niektóre routery buforują. Wiele sieci korporacyjnych będzie buforować DNS. Wiele serwerów DNS obsługiwanych przez ISP i korzysta z własnych pamięci podręcznych. Jedynym sposobem na zabezpieczenie przed pamięcią podręczną w sieci jest użycie pamięci podręcznej, którą można ręcznie odświeżyć. Właśnie dlatego lubię OpenDNS.
  • W aplikacji klienckiej (zwłaszcza w przeglądarkach). Aplikacje mogą wykonywać wszelkiego rodzaju buforowanie, na które Ubuntu nie ma wpływu. Jak Firefox buforuje DNS . Jak wyczyścić pamięć podręczną DNS Chrome . Inne przeglądarki (i aplikacje) mogą mieć własne mechanizmy.
  • Skrobię tutaj beczułkę, ale być może zainstalowałeś niestandardowy serwer DNS w Ubuntu zamiast włączać buforowanie dnsmasq. Istnieje wiele: nscd, djbdns dnscache(aka tinydns), pdns, pdnsd, bind9 (i jego odmiany), a nie mogę sobie przypomnieć. Zostaną one prawdopodobnie potwierdzone w /etc/resolv.conf(z config w / etc / resolvconf / `, aby autogenować ten plik). Poniżej przedstawiono lokalnie przechwycone zapytanie 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
    

    Jeśli nie uderzasz w 8.8.8.8 (lub cokolwiek, czego oczekujesz od swojego serwera DNS), sprawdź, co uderzasz. W moim przypadku widzę, że jest to po prostu dnsmasqskonfigurowane do tworzenia kopii lustrzanych zapytań DNS dla LXC, ale w twoim przypadku może to robić złe, podręczne rzeczy.

    Jeśli wykonałeś wymienione pamięci podręczne, proces czyszczenia każdego z nich jest różny:

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

W nieco pokrewnej uwadze zobacz to, aby włączyć buforowaniednsmasq .

Oli
źródło
1
Moje dane wyjściowe z ps aux | grep są takie same jak twoje, ale coś zdecydowanie JEST buforowaniem DNS na moim komputerze. Jeśli to nie jest dnsmasq, to ​​coś innego. Dowód: utworzyłem poddomenę na moim serwerze, ale nie mogłem jej pingować, host nieosiągalny. Sprawdziłem na stronie downforeveryoneorjustme.com i okazało się, że problem propagacji został odrzucony. Nie mój router ani mój dostawca usług internetowych, ponieważ korzystam z DNS Google 8.8.8.8. Następnie ponownie uruchomiłem komputer (a NIE router) i mogłem dostać się do domeny. Próbowałem kilkanaście razy przed ponownym uruchomieniem bez powodzenia. Pierwsza próba po ponownym uruchomieniu komputera dotarła do hosta.
matteo
Nawiasem mówiąc, nie był to pierwszy raz, kiedy doświadczyłem tego samego. Kilka miesięcy temu stało się to samo i jedynym sposobem, w jaki mogłem dostać się do domeny, było ponowne uruchomienie komputera, ale potem miałem starszą wersję Ubuntu.
matteo
@matteo Przeglądarka?
Oli
nie, jak powiedziałem, testowałem przy pomocy ping, a nie (tylko) przeglądarek.
matteo
@matteo Dodałem więcej, ale brakuje mi pomysłów. Po prostu nie ma tak wielu miejsc, w których ktoś mógłby buforować DNS :)
Oli
39

W przypadku 12.04:

Ubuntu 12.04 wykonuje buforowanie DNS za pomocą dnsmasq (patrz man dnsmasq). Aby wyczyścić pamięć podręczną, wykonaj następujące czynności:

sudo kill -HUP $(pgrep dnsmasq)
zachariasz
źródło
Dziękuję Ci! Jesteś pierwszą osobą, o której wspominałem o domyślnym buforowaniu 12.04!
Tarka,
6
12.04 domyślnie nie buforuje dns - sprawdź swój syslog po zrestartowaniu menedżera sieci; będzie miał wpis, który pokazuje, że dnsmasq zaczyna się od wyłączonej pamięci podręcznej.
1
Nie wiem, czy pamięć podręczna jest domyślnie włączona, ale ta odpowiedź działała dla mnie.
jeyk
Dlaczego nie tylko sudo killall -HUP dnsmasq?
James Haigh,
1
użyj pkillzamiast killipgrep
Robert Siemer
15

sudo /etc/init.d/nscd restart

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

Również jako notatkę możesz sprawdzić i sprawdzić, czy zmiany DNS zostały propagowane za pomocą dig i sprawdzania w stosunku do kogoś innego niż domyślne serwery DNS. W tym przypadku Google DNS.

dig @8.8.8.8 example.com

Mark Davidson
źródło
12
Warto zauważyć, że nscd nie jest domyślnie instalowany.
Scaine,
11

Osobiście korzystam z OpenDNS i używam ich funkcji sprawdzania pamięci podręcznej, aby wymusić odświeżenie, aby upewnić się, że zmiany działają, ale nie możesz zagwarantować , że odświeżą się one dla użytkowników w ciągu 48 godzin.

DNS to powolna bestia. Cierpliwość utrzyma cię przy zdrowych zmysłach.

Oli
źródło
+1 Używam OpenDNS, a czyszczenie pamięci podręcznej jest bardzo przydatne.
Mark Davidson,
Jestem podejrzliwy w stosunku do OpenDNS. Z początku byłem z tego zadowolony, ale potem zacząłem się podejrzewać; choć myślę, że jeśli jest to wybór między ISP a OpenDNS, lepiej mi się z OpenDNS, prawda?
Jono
2
Powiedziałbym, że OpenDNS jest mniejszym złem. Chcieliby zarabiać na ruchu, ale tylko w przypadku złych trafień w domenie.
Oli
@Oli Link nie działa. Jeśli nadal go używasz, czy możesz zaktualizować linki?
Shayan
7

Jeśli używasz nscd:

sudo /etc/init.d/nscd restart

Warto wspomnieć, że może nie buforować go system operacyjny. Wszyscy lubią buforować DNS ... Niektóre testy:

Sprawdź, czy jest to nowy czy stary adres IP. Większość przeglądarek buforuje również DNS, więc jeśli nie uruchomiłeś ponownie Chromium lub czegoś, co może nie być najnowsze.

ping yourdomain.com

Zmień swój lokalny serwer nazw w /etc/resolv.conf na innego dostawcę, google lub poziom, przykłady:

nameserver 8.8.8.8
nameserver 4.2.2.2

A potem ponownie ping.

Sprawdź, czy router nie buforuje DNS w żadnej formie. (Zależy od routera / oprogramowania układowego / itp.)

Wreszcie cierpliwość. Rozpowszechnianie DNS w Internecie może trochę potrwać.

bikesandcode
źródło
2
Jeśli używasz NetworkManagera i DHCP /etc/resolve.conf zostanie opróżniony po wygaśnięciu dzierżawy DHCP, więc będziesz musiał ustawić statyczny adres IP w NetworkManager, aby działał przez dłuższy czas.
LassePoulsen,
+1 Nie zdawałem sobie sprawy, że Firefox buforuje DNS, co bardzo pomogło.
wavemode
+1 za przełączenie lokalnego
serwera
5

Wszystkie powyższe odpowiedzi zapomniały o jednej ważnej rzeczy w rozpoznawaniu nazw: generalnie serwery DNS, dla których żądasz rozpoznawania nazw, nie są tymi, które same przechowują rekordy (serwer autorytatywny). Ponieważ każdy rekord DNS ma wartość Time To Live, która zobowiązuje każdy serwer DNS w łańcuchu rozstrzygania do buforowania w ciągu sekund wskazanych przez tę wartość. Więc nie tylko możesz buforować w swoim komputerze, ale NIEZWYKLE wynik wyszukiwania nazwy zostanie zapisany w pamięci podręcznej gdzieś na serwerze, którego nie kontrolujesz.

Jedynym rozwiązaniem, które należy natychmiast powiadomić o zmianie rekordu nazwy, jest użycie wartości TTL 0 podczas tworzenia / aktualizowania wpisu na autorytatywnym serwerze nazw. Oznacza to jednak, że dla każdego rozpoznawania nazw serwer zostanie trafiony, zwykle rejestratorzy nie zezwalają na to. Na przykład mogą dostarczyć listę wstępnie zdefiniowanych wartości TTL, w których możesz wybrać.

Zarządzam różnymi nazwami domen i aby mieć pewność, że zmiana zostanie dobrze zastosowana na autorytatywnych serwerach nazw, używam narzędzia o nazwie, dnstracerktóre może wyświetlać wyniki wyszukiwania na każdym serwerze z katalogu głównego DNS.

Podsumowując, nawet bez żadnego rozwiązania buforowania DNS, nadal będzie opóźnienie między momentem zmiany rekordów DNS a zmianą widoczną na komputerze. To opóźnienie zależy w dużej mierze od TTL rekordów i liczby serwerów DNS między komputerem a autorytatywnym serwerem nazw.

Benoit
źródło
Oczywiście, ale gdyby to był problem, ponowne uruchomienie komputera nie rozwiązałoby problemu.
matteo
2

W przypadku Ubuntu 14.04 zalecam polecenie:

sudo service dns-clean
alphayax
źródło
Nie na domyślnym serwerze instaluje się. Działa tylko 14.04 i poniżej.
RJ
1

Użyłem następującego polecenia, aby opróżnić pamięć podręczną dns ​​na moim urządzeniu Ubuntu 12.10 i działało to fantastycznie.

sudo kill -HUP $(pgrep dnsmasq)

Innym pomocnym sygnałem jest SIGUSR1, który zrzuca trochę statystyk do syslog lub jak wynika z man dnsmasq:

W trybie --no-daemon lub gdy włączone jest pełne rejestrowanie (-q), następuje całkowity zrzut zawartości pamięci podręcznej.

j0inty
źródło
użyj pkillzamiast killipgrep
Robert Siemer
1

W systemie Ubuntu 16.04 nie mogłem wyczyścić pamięci podręcznej, chyba że:

sudo service dnsmasq restart
Volomike
źródło
0

Znalazłem też sprzeczności, ale to: https://superuser.com/a/521562 woki dla mnie (Ubuntu 13.10 z najnowszymi aktualizacjami, nie ma zainstalowanych specjalnych pakietów sieciowych).
Krótko mówiąc, po prostu użyj tego
sudo /etc/init.d/dns-clean

Nitz
źródło
0

Polecam openDNS specjalnie na zdalnych serwerach Ubuntu, zmniejsza ból ...

Jak to zrobić? Dobrze...

cd /etc/dhcp
sudo nano dhclient.conf

wstaw to PRZED linią „żądanie maski podsieci ...”

supersede domain-name-servers 208.67.222.222,208.67.220.220;

Spowoduje to ponowne uruchomienie interfejsu tak szybko, że nie powinieneś nawet tracić połączenia SSH

sudo ifdown eth0 && sudo ifup eth0

zaznacz to, aby sprawdzić, czy zupełnie nowy openDNS jest poprawnie zainstalowany

cat /etc/resolv.conf
D.Snap
źródło
To zdecydowanie nie jest odpowiedź na pytanie.
blafasel,