web-dev-qa-db-ja.com

キャッシュを使用せずにDigを強制的に解決する

Digを使用して)DNSサーバーにクエリを実行し、キャッシュをバイパスする方法があるかどうか疑問に思っています。多くの場合、DNSサーバーのゾーンを変更し、それが自分のワークステーションから正しく解決されるかどうかを確認したいと思います。しかし、サーバーは解決された要求をキャッシュするため、古い要求を取得することがよくあります。サーバーを再起動またはロードすることは、実際には素晴らしいことではありません。

98
Daniel

@構文を使用して、特定のサーバーからドメインを検索します。 DNSサーバーがそのドメインに対して権限がある場合、応答はキャッシュされた結果にはなりません。

Dig @ns1.example.com example.com

権限のあるサーバーを見つけるには、ドメインのNSレコードを要求します。

Dig example.com NS
130
Ladadadada

DNSプロトコルには、キャッシュを使用せずにネームサーバーを強制的に応答させるメカニズムはありません。 Dig自体はネームサーバーではなく、標準のDNSリクエストを使用して、設定したネームサーバーにクエリを渡すツールです。 DNS does再帰を使用しないようサーバーに指示する方法が含まれていますが、これはあなたが望むものではありません。これは、信頼できるネームサーバーに直接クエリを送信する場合にのみ役立ちます。

ネームサーバーのキャッシュからの応答を停止したい場合は、構成を変更することによってのみ実行できますネームサーバー上。ただし、ネームサーバーを制御しない場合、これは不可能です。 。

ただし、Digをbypass構成されたネームサーバーに取得し、ルートサーバーに戻る独自の再帰的要求を実行できます。これを行うには、+traceオプションを使用します。

Dig example.com +trace

実際には、これはローカルキャッシングリゾルバーではなく信頼できるサーバーのみをクエリするため、これらのサーバーが内部キャッシングを採用していても、結果は古くなりません。 +traceを使用することの追加の利点は、パスに沿って行われた個別の要求をすべて確認できることです。

31
thomasrutter

ここで注意すべき重要な点は、+traceについて話すときに多くの人がこれまでに含めなかったことに気付きますが、+traceを使用すると、構成で指定されたDNSサーバーではなく、Digクライアントがトレースを実行します( /etc/resolv.conf)。したがって、言い換えれば、Digクライアントは、要求があれば、再帰DNSサーバーのように機能します。しかし、重要なことに、キャッシュがありません。

詳細-すでに[Dig -t mx example.com]を使用してmxレコードを要求していて、/ etc/resolv.confが8.8.8.8の場合、TTLゾーンはキャッシュされた結果を返します。ある意味で、自分のゾーンについて何かを探していて、Googleがそれをどのように認識しているのかは、ゾーンのTTLに対するDNSの結果をGoogleで汚染していることになります。あなたが短いTTLを持っているなら悪くない、あなたが1時間のものを持っているならややごみ。

したがって、+traceは、Googleに初めて問い合わせたときにエントリがキャッシュされていなかった場合に何が表示されるかを確認するのに役立ちますが、Googleが全員に同じことを伝えているという誤った考えを与える可能性がありますあなたの+trace結果は以前に尋ねたものではなく、長いTTLを持っている場合、キャッシュからTTLが期限切れになるまでサービスを提供するため、結果は提供されません。あなたの+traceが明らかにしたものと同じです。

詳細なIMOは使用できません。

15
c0ntr1but3

このbashは、最初にリストされているネームサーバーからexample.comのDNSエントリを掘り出します。

Dig @$(Dig @8.8.8.8 example.com ns +short | head -n1) example.com ANY +noall +answer
  • 内部のDigは、example.comのネームサーバーを取得するためにGoogleのDNS(8.8.8.8)にクエリを送信します。
  • 外側のDigはexample.comの最初のネームサーバーをクエリします。

これは、.zshrc(およびおそらく.bashrc)のエイリアスと同じです。

# e.g. `checkdns google.com`
checkdns () { Dig @$(Dig @8.8.8.8 $1 ns +short | head -n1) $1 ANY +noall +answer; ping -c1 $1; }

/。の出力は次のとおりです。

☀  checkdns slashdot.org                                                                                                dev
-->Server DNS Query

; <<>> Dig 9.10.3-P4-Ubuntu <<>> @ns1.dnsmadeeasy.com. slashdot.org ANY +noall +answer
; (2 servers found)
;; global options: +cmd
slashdot.org.       21600   IN  SOA ns0.dnsmadeeasy.com. hostmaster.slashdotmedia.com. 2016045603 14400 600 604800 300
slashdot.org.       86400   IN  NS  ns3.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns4.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns0.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns2.dnsmadeeasy.com.
slashdot.org.       86400   IN  NS  ns1.dnsmadeeasy.com.
slashdot.org.       3600    IN  MX  10 mx.sourceforge.net.
slashdot.org.       3600    IN  TXT "google-site-verification=mwj5KfwLNG8eetH4m5w1VEUAzUlHotrNwnprxNQN5Io"
slashdot.org.       3600    IN  TXT "v=spf1 include:servers.mcsv.net ip4:216.34.181.51 ?all"
slashdot.org.       300 IN  A   216.34.181.45
-->Local DNS Query
PING slashdot.org (216.34.181.45) 56(84) bytes of data.
64 bytes from slashdot.org (216.34.181.45): icmp_seq=1 ttl=242 time=33.0 ms

--- slashdot.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 33.026/33.026/33.026/0.000 ms

このソリューションは複雑で覚えにくいほど複雑ですが、問題が修正されないほど単純です。 Digは私の専門ではありません-改善を歓迎します:-)

3
Michael Cole