当应用程序由于超时而无法解析主机名时,我需要测试它的行为。在nameserver 127.0.0.1
中设置/etc/resolv.conf
无效:相关函数将立即返回(异常)。该测试平台是一个VM,它使用Vagrant创建,通过DHCP接收其IP地址。
发布于 2016-05-11 08:17:06
nameserver 127.0.0.1
不会工作,因为默认的行为已经是这样了。相反,尝试使用不存在的DNS。为了确保,您可以:
nslookup example.com 192.0.2.10
如果您没有得到响应,那么可以使用192.0.2.10
作为您的DNS服务器。
发布于 2016-05-11 08:42:46
当DNS服务器根本没有响应或没有及时响应时,就会发生连接超时。
可以通过简单地阻塞DNS服务器的al流量来模拟第一种情况,例如,在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
这就产生了一个200毫秒的随机变化的延迟。
发布于 2016-05-11 17:45:16
你需要的是一个“黑洞服务器”。您可以使用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
https://serverfault.com/questions/776049
复制相似问题