Làm thế nào để mô phỏng thời gian chờ phản hồi của máy chủ DNS?


19

Tôi cần kiểm tra hành vi của ứng dụng khi ứng dụng không thể giải quyết tên máy chủ do hết thời gian. Thiết nameserver 127.0.0.1trong /etc/resolv.confđã không làm việc: các chức năng có liên quan trở lại ngay lập tức với một ngoại lệ. Thiết bị thử nghiệm là một VM được tạo bằng Vagrant nhận địa chỉ IP của nó thông qua DHCP.

Câu trả lời:


11

nameserver 127.0.0.1Sẽ không hoạt động vì hành vi mặc định là vậy. Thay vào đó, hãy thử sử dụng DNS không tồn tại. Để chắc chắn, bạn có thể làm:

nslookup example.com 192.0.2.10

Nếu bạn không nhận được phản hồi, thì bạn có thể sử dụng 192.0.2.10làm máy chủ DNS của mình.


Điều này không được đảm bảo để tạo ra thời gian chờ, vì 192.0.2.10 có thể (mặc dù không có khả năng) là máy chủ thực sự và giống như 127.0.0.1, nó có thể trả về "cổng không thể truy cập" ngay lập tức khi truy vấn. Bạn không cần chọn một máy chủ mà bạn chắc chắn không chạy DNS (như kiểm tra lệnh nslookup của bạn), bạn cần chọn một máy chủ mà bạn chắc chắn sẽ không phản hồi gì cả .
Jeff Meden

nslookup example.com non_existent_dns_ipđầu ra: ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
sysfiend

4
@JeffMeden Có thể bạn biết, nhưng phạm vi 192.0.2.0/24 được dành riêng cho mục đích tài liệu , vì vậy không nên sử dụng nó ở bất kỳ đâu (và bị từ chối bởi bất kỳ tường lửa tự tôn nào).
Dubu

2
@Dubu đó thực sự là một cảnh báo thú vị hơn; theo thông số kỹ thuật, lưu lượng sẽ bị từ chối tại bộ định tuyến, điều này có thể sẽ trả lại "máy chủ đích không thể truy cập" vào ngăn xếp, một lần nữa khác với thời gian chờ.
Jeff Meden

26

Hết thời gian kết nối xảy ra khi máy chủ DNS hoàn toàn không phản hồi hoặc không phản hồi kịp thời.

Đầu tiên có thể được mô phỏng bằng cách chặn lưu lượng truy cập al đến máy chủ DNS của bạn, ví dụ trên hệ thống Linux với:

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

Sử dụng DROP làm mục tiêu có nghĩa là bạn thậm chí sẽ không nhận được lỗi từ chối kết nối, nó trở thành một lỗ đen. (Không chắc là bạn thường thực hiện chuyển vùng, do đó, việc chặn giao thức TCP ngoài UDP là không cần thiết.)

Tạo sự chậm trễ có liên quan nhiều hơn một chút. Từ netemhướng dẫn :

# 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

Điều này tạo ra độ trễ 200ms với biến thiên ngẫu nhiên ± 10ms.


18

Những gì bạn cần là một "máy chủ lỗ đen". Bạn có thể sử dụng blackhole.webpagetest.org( 72.66.115.13) sẽ âm thầm loại bỏ tất cả các yêu cầu.

Tại sao tôi đề nghị điều này hơn các câu trả lời khác, là bởi vì máy chủ nói trên đã được thiết lập cho mục đích duy nhất này.

Thí dụ:

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
Ngay khi tôi nghĩ tôi đã nhìn thấy tất cả; một máy chủ chuyên dụng mà cụ thể là ... không có gì. Rực rỡ! (có lẽ chỉ là một thứ cấu hình mạng chứ không phải máy chủ thực tế với tường lửa toàn bộ lọc, nhưng vẫn vậy)
Jeff Meden

1
Đó là Raspberry PI với tường lửa được thiết lập để thả mọi thứ để nó vẫn định tuyến và phản hồi với ARP (chỉ để chắc chắn rằng lưu lượng truy cập không nhận được phản hồi không thể truy cập của ICMP).
pmeenan

@pmeenan thật thú vị! Cám ơn vì đã chia sẻ! (Wow, không thể tin rằng bạn đã tham gia chỉ để bình luận: D)
grooveplex

3

Nếu bạn không chạy máy chủ DNS trên hệ thống kiểm tra của mình, bạn sẽ có thể sử dụng địa chỉ IP đó.

Bạn có thể thử sử dụng một địa chỉ rfc1918 không sử dụng .

Bạn có thể sử dụng tường lửa của máy chủ để chặn các gói gửi đi với cổng đích 53.


1
Một số tường lửa cũng có thể trả về các gói ICMP để thời gian chờ là tức thì.
Chuyến đi của Nathan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.