운영체제의 스터브 리졸버는 한 번 조회한 이름을 TTL 동안 기억한다. 레코드를 바꾼 직후 옛 주소로 계속 붙거나, hosts 파일을 고쳤는데 반영이 안 될 때 캐시를 비운다. 모두 관리자 권한이 필요하다.
캐시를 비워도 브라우저(Chrome chrome://net-internals/#dns)나 자바 런타임(networkaddress.cache.ttl) 같은 애플리케이션 자체 캐시는 따로 남는다.
ipconfig /flushdns
ipconfig /displaydns # 현재 캐시 보기
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
어느 리졸버가 캐시를 들고 있는지에 따라 다르다. /etc/resolv.conf 의 nameserver 가 127.0.0.53 이면 systemd-resolved 다.
# systemd-resolved (Ubuntu 18.04+, Fedora 33+, RHEL 9 선택)
sudo resolvectl flush-caches
resolvectl statistics # 캐시 항목 수 확인
# nscd
sudo nscd -i hosts
# dnsmasq (NetworkManager 가 띄운 경우 포함)
sudo systemctl restart dnsmasq
# 또는
sudo pkill -HUP dnsmasq
# Unbound
sudo unbound-control flush_zone .
glibc 자체는 캐시를 두지 않으므로 위 데몬 중 아무것도 없으면 비울 캐시도 없다.
# 리졸버가 실제로 무엇을 돌려주는지 — TTL 이 다시 최대값이면 캐시가 비워진 것
resolvectl query www.example.com
dig www.example.com