如何模拟DNS服务器响应超时?

如何模拟DNS服务器响应超时?

我需要测试应用程序因超时而无法解析主机名时的行为。设置nameserver 127.0.0.1不起作用/etc/resolv.conf:相关函数立即返回异常。测试设备是使用 Vagrant 创建的虚拟机,它通过 DHCP 接收其 IP 地址。

答案1

nameserver 127.0.0.1不会起作用,因为默认行为已经是那样了。相反,请尝试使用不存在的 DNS。要确保这一点,您可以执行以下操作:

nslookup example.com 192.0.2.10

如果您没有收到回应,那么您可以将其用作192.0.2.10您的 DNS 服务器。

答案2

当 DNS 服务器根本没有响应或没有及时响应时,就会发生连接超时。

第一种可以通过简单地阻止到 DNS 服务器的所有流量来模拟,例如在 Linux 系统上使用以下命令:

# 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

这会产生 200ms 的延迟和 ± 10ms 的随机变化。

答案3

您需要的是“黑洞服务器”。您可以使用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

答案4

如果您的测试系统上没有运行 DNS 服务器,您应该能够使用它的 IP 地址。

你可以尝试使用一个未使用的rfc1918地址。

您可以使用服务器的防火墙来阻止目标端口为 53 的传出数据包。

相关内容