DNS

Many Source IP Address DNS Query

2020年01月21日

Overview

負荷分散装置でDNSの負荷分散の動作試験をするツールの解説をする

Installation

dnsping help

$ dnsping --help
dnsping version 1.6.3
usage: dnsping [-ehqv] [-s server] [-p port] [-P port] [-S address] [-c count] [-t type] [-w wait] hostname
  -h  --help      Show this help
  -q  --quiet     Quiet
  -v  --verbose   Print actual dns response
  -s  --server    DNS server to use (default: first entry from /etc/resolv.conf)
  -p  --port      DNS server port number (default: 53)
  -T  --tcp       Use TCP instead of UDP
  -4  --ipv4      Use IPv4 as default network protocol
  -6  --ipv6      Use IPv6 as default network protocol
  -P  --srcport   Query source port number (default: 0)
  -S  --srcip     Query source IP address (default: default interface address)
  -c  --count     Number of requests to send (default: 10)
  -w  --wait      Maximum wait time for a reply (default: 2 seconds)
  -i  --interval  Time between each request (default: 0 seconds)
  -t  --type      DNS request record type (default: A)
  -e  --edns      Disable EDNS0 (default: Enabled)

$ 

Source Code

ipaddress.txtを読み取り一行ずつ source ip address 指定で dnsping を実行する。

事前にip addr add xxx.xxx.xxx.xxx dev ifname を実行しておく必要がある。

ip address

$ sudo ip address add 192.168.1.16/24 dev wlp2s0
$ sudo ip address add 192.168.1.17/24 dev wlp2s0
$ 
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether f0:de:f1:2e:f9:93 brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:26:c7:7f:c0:2a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.15/24 brd 192.168.1.255 scope global noprefixroute wlp2s0
       valid_lft forever preferred_lft forever
    inet 192.168.1.16/24 scope global secondary wlp2s0
       valid_lft forever preferred_lft forever
    inet 192.168.1.17/24 scope global secondary wlp2s0
       valid_lft forever preferred_lft forever
    inet6 2408:211:540:ca00:aba8:fe9e:79f:e783/64 scope global dynamic noprefixroute 
       valid_lft 14375sec preferred_lft 12575sec
    inet6 fe80::3596:e0d8:75e7:b1f6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:53:e9:f4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:53:e9:f4 brd ff:ff:ff:ff:ff:ff
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:b8:5d:92:2e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
7: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
$

script

$ cat dns.sh
#!/bin/bash

while IFG= read -r line;
do
  echo -e "\n"
  echo -e "souce ip:" $line "\n"
  dnsping -v -i 1 -c 1 -s 192.168.1.10 -S $line git.travelersmedia.jp
done < ipaddress.txt

$

IP Address list

$ cat ipaddress.txt
192.168.1.15
192.168.1.16
192.168.1.17
$

Result

$ bash dns.sh


souce ip: 192.168.1.15 

dnsping DNS: 192.168.1.10:53, hostname: git.travelersmedia.jp, rdatatype: A
54 bytes from 192.168.1.10: seq=0   time=6.327 ms
svr-gitlab.travelersmedia.jp. 86400 IN A 192.168.1.115
flags: QR AA RD RA

--- 192.168.1.10 dnsping statistics ---
1 requests transmitted, 1 responses received, 0% lost
min=6.327 ms, avg=6.327 ms, max=6.327 ms, stddev=0.000 ms


souce ip: 192.168.1.16 

dnsping DNS: 192.168.1.10:53, hostname: git.travelersmedia.jp, rdatatype: A
54 bytes from 192.168.1.10: seq=0   time=6.146 ms
svr-gitlab.travelersmedia.jp. 86400 IN A 192.168.1.115
flags: QR AA RD RA

--- 192.168.1.10 dnsping statistics ---
1 requests transmitted, 1 responses received, 0% lost
min=6.146 ms, avg=6.146 ms, max=6.146 ms, stddev=0.000 ms


souce ip: 192.168.1.17 

dnsping DNS: 192.168.1.10:53, hostname: git.travelersmedia.jp, rdatatype: A
54 bytes from 192.168.1.10: seq=0   time=7.071 ms
svr-gitlab.travelersmedia.jp. 86400 IN A 192.168.1.115
flags: QR AA RD RA

--- 192.168.1.10 dnsping statistics ---
1 requests transmitted, 1 responses received, 0% lost
min=7.071 ms, avg=7.071 ms, max=7.071 ms, stddev=0.000 ms
$ vim dns.sh
$