Question Comment simuler le délai de réponse du serveur DNS?


Je dois tester le comportement d'une application lorsqu'elle ne peut pas résoudre un nom d'hôte en raison d'un délai d'attente. Réglage nameserver 127.0.0.1 dans /etc/resolv.conf ne fonctionne pas: les fonctions correspondantes sont renvoyées immédiatement avec une exception. Le banc de test est une machine virtuelle créée avec Vagrant qui reçoit son adresse IP via DHCP.


17
2018-05-11 08:12


origine




Réponses:


nameserver 127.0.0.1 ne fonctionnera pas car le comportement par défaut est déjà cela. Au lieu de cela, essayez d'utiliser un DNS non existant. Pour vous en assurer, vous pouvez faire:

nslookup example.com 192.0.2.10

Si vous n'obtenez pas de réponse, vous pouvez utiliser 192.0.2.10 en tant que votre serveur DNS.


10
2018-05-11 08:17



Cela ne garantit pas nécessairement un délai d'expiration, car 192.0.2.10 pourrait (bien que ce ne soit probablement pas le cas) être un hôte réel et, comme 127.0.0.1, il pourrait renvoyer "port inaccessible" immédiatement après une interrogation. Vous n'avez pas besoin de choisir un hôte pour lequel vous n'êtes pas sûr d'exécuter DNS (comme vos contrôles de commande nslookup), vous devez choisir un hôte pour lequel vous êtes certain de ne pas répondre. du tout. - Jeff Meden
nslookup example.com non_existent_dns_ip les sorties: ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached - sysfiend
@JeffMeden Vous le savez probablement, mais la plage 192.0.2.0/24 est réservé à des fins de documentation, il ne doit donc pas être utilisé nulle part (et refusé par tout pare-feu qui se respecte). - Dubu
@ Dubu, c'est une mise en garde plus intéressante; Selon les spécifications, le trafic doit être rejeté sur le routeur, ce qui donnera probablement à la pile un "hôte de destination inaccessible", ce qui est à nouveau différent d'un délai d'attente. - Jeff Meden


Un délai de connexion survient lorsque le serveur DNS ne répond pas du tout ou pas à temps.

Le premier peut être simulé en bloquant tout le trafic sur votre serveur DNS, sur un système Linux par exemple avec:

# iptables -I OUTPUT -p udp -d <iIP of DNS server> --dport 53 -j DROP

Utiliser DROP comme cible signifie que vous ne recevrez même pas d'erreur de connexion refusée, cela devient simplement un trou noir. (Il est peu probable que vous effectuiez normalement des transferts de zone. Il n'est donc pas nécessaire de bloquer le protocole TCP en plus du protocole UDP.)

La création de retards est légèrement plus compliquée. Du netem Manuel:

# 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

Ce qui crée un délai de 200 ms avec une variation aléatoire de ± 10 ms.


25
2018-05-11 08:42





Ce dont vous avez besoin, c'est d'un "serveur de trou noir". Vous pouvez utiliser blackhole.webpagetest.org (72.66.115.13) qui abandonnera silencieusement toutes les demandes.

Pourquoi je suggère cela par rapport aux autres réponses, c'est parce que le serveur susmentionné a été mis en place à cette seule fin.

Exemple:

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

16
2018-05-11 17:45



Juste au moment où je pensais avoir tout vu; un serveur dédié qui fait spécifiquement ... rien. Brillant! (probablement juste une chose de configuration de réseau et pas un serveur réel avec un pare-feu filtre-tout, mais quand même) - Jeff Meden
Il s'agit d'un Raspberry PI avec un pare-feu configuré pour tout supprimer, de sorte qu'il route et réponde toujours à ARP (pour que le trafic ne reçoive pas de réponses ICMP inaccessibles). - pmeenan
@ Pmeenan c'est intéressant! Merci d'avoir partagé! (Wow, je ne peux pas croire que vous avez rejoint juste pour commenter: D) - grooveplex


Si vous n'exécutez pas de serveur DNS sur votre système de test, vous devriez pouvoir utiliser son adresse IP.

Vous pouvez essayer d’utiliser un rfc1918 adresse.

Vous pouvez utiliser le pare-feu de votre serveur pour bloquer les paquets sortants avec un port de destination 53.


3
2018-05-11 08:39



Certains pare-feu peuvent également renvoyer des paquets ICMP afin que le délai d'attente soit instantané. - Nathan Goings