Bagaimana cara mensimulasikan batas waktu respons server DNS?

19

Saya perlu menguji perilaku aplikasi ketika itu tidak dapat menyelesaikan nama host karena batas waktu. Pengaturan nameserver 127.0.0.1di /etc/resolv.conftidak bekerja: fungsi yang relevan kembali segera dengan pengecualian. Rig pengujian adalah VM yang dibuat dengan Vagrant yang menerima alamat IP-nya melalui DHCP.

sinaps
sumber

Jawaban:

11

nameserver 127.0.0.1tidak akan berfungsi karena perilaku default sudah seperti itu. Sebagai gantinya, coba gunakan DNS yang tidak ada. Untuk memastikan, Anda bisa melakukan:

nslookup example.com 192.0.2.10

Jika Anda tidak mendapat respons, maka Anda dapat menggunakan 192.0.2.10sebagai server DNS Anda.

sysfiend
sumber
Ini tidak dijamin untuk menghasilkan batas waktu, karena 192.0.2.10 bisa (walaupun tidak mungkin) menjadi host nyata, dan seperti 127.0.0.1, ia bisa mengembalikan "port unreachable" segera setelah kueri. Anda tidak perlu memilih host yang Anda yakin tidak menjalankan DNS (seperti perintah nslookup Anda memeriksa) Anda perlu memilih host yang Anda yakin tidak akan merespons sama sekali .
Jeff Meden
nslookup example.com non_existent_dns_ipkeluaran: ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
sysfiend
4
@JeffMeden Anda mungkin tahu, tetapi kisaran 192.0.2.0/24 dicadangkan untuk keperluan dokumentasi , jadi tidak boleh digunakan di mana saja (dan ditolak sebagai bogon oleh firewall yang menghargai diri sendiri).
Dubu
2
@ Dubu itu sebenarnya peringatan yang lebih menarik; sesuai spesifikasi lalu lintas harus ditolak di router yang mungkin akan mengembalikan "host tujuan tidak terjangkau" ke stack, yang sekali lagi berbeda dari batas waktu.
Jeff Meden
26

Waktu habis koneksi terjadi ketika server DNS tidak merespons sama sekali, atau tidak merespons secara tepat waktu.

Yang pertama dapat disimulasikan dengan hanya memblokir semua lalu lintas ke server DNS Anda, pada sistem Linux misalnya dengan:

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

Menggunakan DROP sebagai target berarti Anda bahkan tidak akan mendapatkan koneksi yang ditolak kesalahan, itu hanya menjadi lubang hitam. (Sepertinya tidak mungkin Anda melakukan transfer zona, jadi memblokir protokol TCP selain UDP tidak diperlukan.)

Membuat penundaan sedikit lebih banyak terlibat. Dari netemmanual :

# 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

Yang menciptakan penundaan 200 ms dengan variasi acak ± 10 ms.

HBruijn
sumber
18

Yang Anda butuhkan adalah "server lubang hitam". Anda dapat menggunakan blackhole.webpagetest.org( 72.66.115.13) yang akan secara diam-diam menjatuhkan semua permintaan.

Mengapa saya menyarankan ini daripada jawaban lain, adalah karena server yang disebutkan di atas telah dibuat untuk tujuan tunggal ini.

Contoh:

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
grooveplex
sumber
2
Tepat ketika saya pikir saya sudah melihat semuanya; server khusus yang tidak melakukan ... apa-apa. Cemerlang! (mungkin hanya hal konfigurasi jaringan dan bukan server sebenarnya dengan filter-semua firewall, tapi tetap saja)
Jeff Meden
1
Ini adalah Raspberry PI dengan firewall yang diatur untuk menjatuhkan semuanya sehingga masih merutekan dan merespons ARP (hanya untuk memastikan lalu lintas tidak mendapatkan tanggapan tak terjangkau ICMP).
pmeenan
@Penenan itu menarik! Terima kasih telah berbagi! (Wow, tidak percaya Anda bergabung hanya untuk berkomentar: D)
grooveplex
3

Jika Anda tidak menjalankan server DNS pada sistem pengujian Anda, Anda harus dapat menggunakan alamat IP itu.

Anda dapat mencoba menggunakan alamat rfc1918 yang tidak digunakan .

Anda dapat menggunakan firewall server Anda untuk memblokir paket keluar dengan port tujuan 53.

user9517 mendukung GoFundMonica
sumber
1
Beberapa firewall juga dapat mengembalikan paket ICMP sehingga batas waktu instan.
Nathan Goings