タイムアウトのためにホスト名を解決できない場合のアプリケーションの動作をテストする必要があります。設定nameserver 127.0.0.1
/etc/resolv.conf
が機能しませんでした。関連する関数は例外を除いてすぐに戻ります。テストリグは、DHCP経由でIPアドレスを受け取るVagrantで作成されたVMです。
nameserver 127.0.0.1
は、デフォルトの動作がすでに動作しているため機能しません。代わりに、存在しないDNSを使用してみてください。確認するには、次のようにします。
nslookup example.com 192.0.2.10
応答がない場合は、DNSサーバーとして192.0.2.10
を使用できます。
接続タイムアウトは、DNSサーバーがまったく応答しない、またはタイムリーに応答しない場合に発生します。
最初のものは、たとえばLinuxシステム上でDNSサーバーへのすべてのトラフィックを単にブロックすることでシミュレートできます。
# iptables -I OUTPUT -p udp -d <iIP of DNS server> --dport 53 -j DROP
DROPをターゲットとして使用すると、接続拒否エラーが発生することはなく、単なるブラックホールになります。 (通常はゾーン転送を行う可能性は低いため、TCPプロトコルをブロックする必要はありません。)
遅延の作成は少し複雑です。 netem
manual から:
# 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
これにより、±10ミリ秒のランダムな変動で200ミリ秒の遅延が生じます。
必要なのは「ブラックホールサーバー」です。 blackhole.webpagetest.org
(72.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
テストシステムでDNSサーバーを実行していない場合は、そのIPアドレスを使用できるはずです。
未使用の rfc1918 アドレスを使用してみてください。
サーバーのファイアウォールを使用して、宛先ポート53の発信パケットをブロックできます。