DNS, zkratka pro Domain Name System protokol, se používá v systémech Linux k získání IP adres spojených se jmény.
Když například provádíte požadavek ping, je docela pravděpodobné, že používáte protokol DNS k načtení IP serveru.
Ve většině případů požadavky DNS které provádíte, jsou uloženy v místní mezipaměti vašeho operačního systému.
V některých případech však možná budete chtít vyprázdnit mezipaměť DNS vašeho serveru .
Může to být způsobeno tím, že jste změnili IP adresu serveru ve vaší síti a chcete, aby se změny projevily okamžitě.
V tomto tutoriálu se naučíte, jak snadno vyprázdnit mezipaměť DNS v systému Linux , ať už používáte systemd nebo dnsmasq.
Předpoklady
Abyste mohli vyprázdnit mezipaměť DNS, musíte vědět, jak funguje překlad DNS ve vašem systému Linux .
V závislosti na vaší distribuci se můžete setkat s různými službami Linuxu, které fungují jako DNS resolver .
Než začnete, je docela důležité, abyste věděli, jak bude překlad DNS ve vašem operačním systému skutečně probíhat.
Pokud čtete tento článek, chcete vyprázdnit mezipaměť místního překladače DNS . Ale jak vidíte, existuje mnoho různých mezipamětí od vaší místní aplikace až po skutečné internetové servery DNS.
V tomto tutoriálu se zaměříme na žlutý rámeček znamenající lokální stub resolver implementovaný na každém systému Linux.
Nalezení místního překladače DNS
Na většině systémů Linux je DNS resolver buď „systemd-resolved“ nebo dnsmasq. Abyste věděli, zda máte co do činění s jedním nebo druhým, můžete provést následující příkaz
$ sudo lsof -i :53 -S
Poznámka :tak proč spouštíme tento příkaz? Protože DNS běží na portu 53, hledáme příkazy spojené se službou běžící na portu 53, což je váš místní překladač DNS neboli „stub“.
Jak můžete vidět, na nedávné distribuci Ubuntu 20.04 je služba naslouchající na portu 53 vyřešena systémem. Pokud byste však tento příkaz provedli na Ubuntu 14.04, dostali byste jiný výstup.
V tomto případě se místní DNS používané v dnsmasq a příkazy zjevně liší.
Když znáte tyto informace, můžete přejít na kapitolu, která vás zajímá. Pokud byste na svém serveru měli mít jiný výstup, nezapomeňte nám zanechat komentář, abychom tento článek aktualizovali.
Vyprázdnit DNS pomocí systemd-resolved
Nejjednodušší způsob, jak vyprázdnit DNS v Linuxu, pokud používáte systemd-resolved, je použít příkaz „systemd-resolve“ následovaný „–flush-caches“.
Případně můžete použít příkaz „resolvectl“ následovaný volbou „flush-caches“.
$ sudo systemd-resolve --flush-caches
$ sudo resolvectl flush-caches
Chcete-li ověřit, že vaše mezipaměť DNS systému Linux byla skutečně vyprázdněna, můžete použít „–statistiky “, která zvýrazní „Aktuální velikost mezipaměti“ v části „Cache“.
$ sudo systemd-resolve --statistics
Blahopřejeme, úspěšně jste vyprázdnili mezipaměť DNS v systému Linux!
Vyprázdnit mezipaměť DNS pomocí signálů
Dalšího způsobu vyprázdnění mezipaměti DNS lze dosáhnout odesláním signálu „USR2“ do služby „systemd-resolved“, která jí dá pokyn k vyprázdnění mezipaměti DNS.
$ sudo killall -USR2 systemd-resolved
Chcete-li zkontrolovat, zda byla mezipaměť DNS skutečně vyprázdněna, můžete odeslat „USR1 ” signál do služby systemd-resolved. Tímto způsobem vypíše svůj aktuální stav do deníku systemd.
$ sudo killall -USR1 systemd-resolved
$ sudo journalctl -r -u systemd-resolved
Výborně, vaše mezipaměť DNS byla správně vyprázdněna pomocí signálů!
Vyprázdnit DNS pomocí dnsmasq
Nejjednodušší způsob, jak vyprázdnit váš DNS resolver při použití dnsmasq, je odeslat signál „SIGHUP“ procesu „dnsmasq“ pomocí příkazu „killall“.
$ sudo killall -HUP dnsmasq
Podobně jako u systemd-resolved můžete odeslat „USR1 ” do procesu, aby mohl vytisknout své statistiky do souboru protokolu „syslog“. Pomocí jednoduchého příkazu „tail“ jsme schopni ověřit, že mezipaměť DNS byla skutečně vyprázdněna.
Co kdybyste spustili dnsmasq jako službu?
Dnsmasq se spuštěnou službou
V některých případech můžete na svém serveru spustit „dnsmasq“ jako službu. Chcete-li zkontrolovat, zda tomu tak je, nebo ne, můžete spustit příkaz „systemctl“ nebo příkaz „service“, pokud používáte systém SysVinit.
$ sudo systemctl is-active dnsmasq
# On SysVinit systems
$ sudo service dnsmasq status
Pokud si všimnete, že dnsmasq běží jako služba, můžete ji restartovat pomocí obvyklého „systemctl “ nebo „služba ” příkazy.
$ sudo systemctl restart dnsmasq
# On SysVinit systems
$ sudo service dnsmasq restart
Po spuštění těchto příkazů se vždy ujistěte, že byly vaše služby správně restartovány.
$ sudo systemctl status dnsmasq
# On SysVinit systems
$ sudo service dnsmasq status
Závěr
V tomto tutoriálu jste se naučili, jak můžete rychle a snadno vyprázdnit mezipaměť DNS v systému Linux.
Pomocí tohoto článku můžete snadno vymazat mezipaměť pro místní překladače systemd a dnsmasq. Měli byste však vědět, že existuje další běžný DNS, nazvaný bind , který je v tomto článku záměrně vynechán.
Další článek o nastavení lokálního serveru DNS cache pomocí BIND by měl vyjít v blízké budoucnosti.
Pokud vás zajímají dotazy DNS a jak jsou prováděny, můžete použít tento velmi užitečný článek od „zwischenzugs“ s názvem “ Anatomie dotazu DNS “ . Tento článek je zvláště užitečný, pokud chcete ladit dotazy DNS a zajímá vás, jak se provádějí.
Také pokud máte zájem o Správu systému Linux , na webu o tom máme kompletní sekci, takže se na to určitě podívejte.