DNSサーバーの応答タイムアウトをシミュレートする方法は?


19

タイムアウトが原因でホスト名を解決できない場合、アプリケーションの動作をテストする必要があります。設定nameserver 127.0.0.1/etc/resolv.conf機能しませんでした。関連する関数は例外を伴ってすぐに戻ります。テストリグは、DHCPを介してIPアドレスを受け取るVagrantで作成されたVMです。

回答:


11

nameserver 127.0.0.1デフォルトの動作は既にそれであるので、動作しません。代わりに、存在しないDNSを使用してみてください。確認するために、次のことができます。

nslookup example.com 192.0.2.10

応答がない場合は192.0.2.10、DNSサーバーとして使用できます。


192.0.2.10は(おそらくそうではありませんが)実際のホストになる可能性があるため、タイムアウトを生成することは保証されません。DNSを実行していないことが確かなホスト(nslookupコマンドのチェックなど)を選択する必要はありません。まったく応答ないと確信しているホストを選択する必要があります。
ジェフメーデン

nslookup example.com non_existent_dns_ip出力: ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
sysfiend

4
@JeffMedenおそらくご存知でしょうが、192.0.2.0 / 24の範囲は文書化のため予約されているため、どこでも使用しないでください(そして、自尊心のあるファイアウォールによって、ボゴンとして拒否されます)。
ドゥブ

2
@Dubuは、実際にはもっと興味深い警告です。仕様に従って、トラフィックはルーターで拒否されるべきであり、おそらく「タイムアウトとは異なる」「到達不能な宛先ホスト」をスタックに返します。
ジェフメーデン

26

接続タイムアウトは、DNSサーバーがまったく応答しない場合、またはタイムリーに応答しない場合に発生します。

1つ目は、たとえば次のようなLinuxシステムでDNSサーバーへのすべてのトラフィックをブロックするだけでシミュレートできます。

# iptables -I OUTPUT -p udp -d <iIP of DNS server> --dport 53 -j DROP

DROPをターゲットとして使用すると、接続拒否エラーが発生することさえなく、単なるブラックホールになります。(通常、ゾーン転送を行うことはほとんどないため、UDPに加えてTCPプロトコルをブロックする必要はありません。)

遅延の作成は少し複雑です。netemマニュアルから:

# tc qdisc add dev eth0 root handle 1: prio
# tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit  3000
# tc qdisc add dev eth0 parent 30:1 handle 31: netem  delay 200ms 10ms distribution normal
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32  match ip dst <IP_of_DNS_server>/32 flowid 1:3

±10msのランダムな変動で200msの遅延が発生します。


18

必要なのは「ブラックホールサーバー」です。blackhole.webpagetest.org72.66.115.13)を使用すると、すべての要求をサイレントにドロップできます。

上記のサーバーがこの唯一の目的のために確立されているためです。

例:

barend@shells:~$ dig example.com @72.66.115.13

; <<>> DiG 9.10.3-P4-Debian <<>> example.com @72.66.115.13
;; global options: +cmd
;; connection timed out; no servers could be reached

2
私はそれをすべて見たと思ったときだけ。特に何もしない専用サーバー。ブリリアント!(おそらく、すべてのフィルターを備えた実際のサーバーではなく、単にネットワーク構成のことですが、それでも)
ジェフメデン

1
これは、すべてがドロップされるようにファイアウォールが設定されたRaspberry PIであり、ARPにルーティングおよび応答します(トラフィックがICMP到達不能応答を受信しないようにするためです)。
pmeenan

@pmeenanそれは面白い!共有してくれてありがとう!(うわー、コメントするだけで参加したとは信じられない:D)
-grooveplex

3

テストシステムでDNSサーバーを実行していない場合は、そのIPアドレスを使用できるはずです。

未使用のrfc1918アドレスを使用してみてください。

サーバーのファイアウォールを使用して、宛先ポート53の発信パケットをブロックできます。


1
一部のファイアウォールはICMPパケットを返すこともできるため、タイムアウトが即座に発生します。
ネイサンゴーイングス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.