我需要测试应用程序因超时而无法解析主机名时的行为。设置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