DNS 서버 응답 시간 초과를 시뮬레이션하는 방법?


19

시간 초과로 인해 호스트 이름을 확인할 수없는 경우 응용 프로그램 동작을 테스트해야합니다. 설정 nameserver 127.0.0.1/etc/resolv.conf작동하지 않습니다. 관련 함수가 예외없이 즉시 반환됩니다. 테스트 장비는 Vagrant로 만든 VM으로 DHCP를 통해 IP 주소를받습니다.

답변:


11

nameserver 127.0.0.1기본 동작은 이미 작동하지 않습니다. 대신 기존 DNS가 아닌 다른 DNS를 사용해보십시오. 확인하려면 다음을 수행하십시오.

nslookup example.com 192.0.2.10

응답이 없으면 192.0.2.10DNS 서버로 사용할 수 있습니다 .


192.0.2.10은 (실제로는 아니지만) 실제 호스트가 될 수 있고 127.0.0.1과 같이 쿼리시 즉시 "포트에 연결할 수 없음"을 리턴 할 수 있으므로 시간 종료가 발생하지는 않습니다. DNS를 실행하지 않는 호스트 (nslookup 명령 검사와 같은)를 선택하지 않아도 전혀 응답하지 않을 호스트를 선택해야 합니다 .
Jeff Meden

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 범위는 문서화를 위해 예약되어 있으므로 어디에서나 사용해서는 안됩니다 (자기 존중 방화벽에 의해 bogon으로 거부 됨).
Dubu

2
@Dubu는 실제로 더 흥미로운 경고입니다. 사양에 따라 트래픽은 라우터에서 거부되어야합니다. 라우터에서 스택에 "도달 할 수없는 대상 호스트"를 다시 제공 할 수 있습니다. 이는 다시 타임 아웃과 다릅니다.
Jeff Meden

26

DNS 서버가 전혀 응답하지 않거나 적시에 응답하지 않으면 연결 시간 초과가 발생합니다.

첫 번째는 다음과 같은 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.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

2
내가 생각했을 때 나는 그것을 모두 보았다. 특별히 아무것도하지 않는 전용 서버. 훌륭한! (아마도 네트워크 설정 일 뿐이며 필터 전체 방화벽을 갖춘 실제 서버는 아니지만 여전히)
Jeff Meden

1
방화벽이 모든 것을 삭제하도록 설정된 라즈베리 PI이므로 여전히 ARP에 라우팅 및 응답합니다 (트래픽이 ICMP에 도달 할 수없는 응답을 얻지 않도록하기 위해).
pmeenan

@pmeenan 흥미 롭습니다! 공유해 주셔서 감사합니다! (D 와우, 당신은 단지 의견에 가입 믿을 수 없다)
grooveplex

3

테스트 시스템에서 DNS 서버를 실행하지 않는 경우 해당 IP 주소를 사용할 수 있어야합니다.

사용하지 않는 rfc1918 주소를 사용해보십시오 .

서버의 방화벽을 사용하여 대상 포트 53으로 나가는 패킷을 차단할 수 있습니다.


1
일부 방화벽은 ICMP 패킷을 반환하여 시간 초과가 즉시 발생할 수 있습니다.
Nathan Goings
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.