Introduction

As described in Section 2.4 of the course textbook, the Domain Name System (DNS) translates hostnames to IP addresses, fulfilling a critical role in the Internet infrastructure. In this lab, we’ll take a closer look at the client side of DNS. Recall that the client’s role in the DNS is relatively simple – a client sends a query to its local DNS server, and receives a response back. As shown in Figures 2.19 and 2.20 in the textbook, much can go on "under the covers," invisible to the DNS clients, as the hierarchical DNS servers communicate with each other to either recursively or iteratively resolve the client’s DNS query. From the DNS client’s standpoint, however, the protocol is quite simple – a query is formulated to the local DNS server and a response is received from that server. Before beginning this lab, you’ll probably want to review DNS by reading Section 2.4 of the text. In particular, you may want to review the material on local DNS servers, DNS caching, DNS records and messages, and the TYPE field in the DNS record.

nslookup

In this lab, we’ll make extensive use of the nslookup tool, which is available in most Linux/Unix and Microsoft platforms today. To run nslookup in Linux/Unix, you just type the nslookup command on the command line. To run it in Windows, open the Command Prompt and run nslookup on the command line.

In it is most basic operation, nslookup tool allows the host running the tool to query any specified DNS server for a DNS record. The queried DNS server can be a root DNS server, a top-level-domain DNS server, an authoritative DNS server, or an intermediate DNS server (see the textbook for definitions of these terms). To accomplish this task, nslookup sends a DNS query to the specified DNS server, receives a DNS reply from that same DNS server, and displays the result.

Figure 1
Figure 1: Example usage of nslookup

The above screenshot shows the results of three independent nslookup commands (displayed in the Linux Command Prompt). In this example, the client host is located in Vejle DK, where the default local DNS server is local on the computer at 127.0.0.53. When running nslookup, if no DNS server is specified, then nslookup sends the query to the default DNS server, which in this case is 127.0.0.53. Consider the first command:

nslookup www.sdu.dk

In words, this command is saying “please send me the IP address for the host www.sdu.dk”. As shown in the screenshot, the response from this command provides two pieces of information: (1) the name and IP address of the DNS server that provides the answer; and (2) the answer itself, which is the host name and IP address of www.sdu.dk. Although the response came from the local DNS server, it is quite possible that this local DNS server iteratively contacted several other DNS servers to get the answer, as described in Section 2.4 of the textbook.

Now consider the second command:

nslookup -type=NS sdu.dk

In this example, we have provided the option “-type=NS” and the domain “sdu.dk”. This causes nslookup to send a query for a type-NS record to the default local DNS server. In words, the query is saying, “please send me the host names of the authoritative DNS for sdu.dk”. (When the –type option is not used, nslookup uses the default, which is to query for type A records.) The answer, displayed in the above screenshot, first indicates the DNS server that is providing the answer (which is the default local DNS server) along with three sdu nameservers. Each of these servers is indeed an authoritative DNS server for the hosts on the SDU campus. However, nslookup also indicates that the answer is “non-authoritative,” meaning that this answer came from the cache of some server rather than from an authoritative MIT DNS server. Finally, the answer also includes the IP addresses of the authoritative DNS servers at SDU. (Even though the type-NS query generated by nslookup did not explicitly ask for the IP addresses, the local DNS server returned these “for free” and nslookup displays the result.)

Now finally consider the third command:

nslookup www.sdu.dk ns1.sdu.dk

In this example, we indicate that we want to the query sent to the DNS server ns1.sdu.dk rather than to the default DNS server. Thus, the query and reply transaction takes place directly between our querying host and ns1.sdu.dk. In this example, the DNS server ns1.sdu.dk provides the IP address of the host www.sdu.dk

Now that we have gone through a few illustrative examples, you are perhaps wondering about the general syntax of nslookup commands. The syntax is:

nslookup –option1 –option2 host-to-find dns-server

In general, nslookup can be run with zero, one, two or more options. And as we have seen in the above examples, the dns-server is optional as well; if it is not supplied, the query is sent to the default local DNS server.

Now that we have provided an overview of nslookup, it is time for you to test drive it yourself. Do the following (and write down the results):

  1. Run nslookup to obtain the IP address of a Web server in Asia. What is the IP address of that server? (Use fx. www.aiit.or.kr, which is a web server at the Advanced Institute of Information Technology in Korea))

  2. Run nslookup to determine the authoritative DNS servers for a university in Europe (not SDU).

  3. Run nslookup so that one of the DNS servers obtained in Question 2 is queried for the mail servers for Yahoo! mail. What is its IP address?

ipconfig

ipconfig (for Windows) and ifconfig (for Linux/Unix) are among the most useful little utilities in your host, especially for debugging network issues. Here we’ll only describe ipconfig, although the Linux/Unix ifconfig is very similar. ipconfig can be used to show your current TCP/IP information, including your address, DNS server addresses, adapter type and so on. For example, if you all this information about your host simply by entering

ipconfig \all

into the Command Prompt (Windows), or on Linux (see screenshot)

ifconfig
Figure 2
Figure 2: Example usage of ifconfig

On Windows, ipconfig is also very useful for managing the DNS information stored in your host. In Section 2.5 we learned that a host can cache DNS records it recently obtained. To see these cached records, after the prompt C:\> provide the following command:

ipconfig /displaydns

Each entry shows the remaining Time to Live (TTL) in seconds. To clear the cache, enter

ipconfig /flushdns

Flushing the DNS cache clears all entries and reloads the entries from the hosts file.

On Linux, there is usually no DNS caching, unless extra packages are installed.

Tracing DNS with Wireshark

Now that we are familiar with nslookup and ipconfig, we’re ready to get down to some serious business. Let’s first capture the DNS packets that are generated by ordinary Web- surfing activity.

If you are on Windows, use ipconfig to empty the DNS cache in your host.

Open Wireshark and enter "ip.addr = <your ip address>" into the filter. This filter includes only packets that come to and from your network interface.

  1. Locate a DNS query and response messages. Are they sent over UDP or TCP?

  2. What is the destination port for the DNS query message? What is the source port of DNS response message?

  3. To what IP address is the DNS query message sent?

  4. Examine the DNS query message. What “Type” of DNS query is it? Does the query message contain any “answers”?

  5. Examine the DNS response message. How many “answers” are provided? What do each of these answers contain? Did you expect this answer? Expain its meaning.

  6. Consider the subsequent TCP SYN packet sent by your host. Does the destination IP address of the SYN packet correspond to any of the IP addresses provided in the DNS response message?

  7. This web page contains images. Before retrieving each image, does your host issue new DNS queries?

Now let’s play with nslookup

  • Start packet capture.

  • Do an nslookup on www.sdu.dk

  • Stop packet capture.

  • You should get a trace that looks something like the following:

Figure 3
Figure 3: Wireshark DNS capture

In Windows, there may be sent three DNS queries and received three DNS responses. Ignore the first two sets of queries/responses, as they are specific to nslookup and are not normally generated by standard Internet applications. You should instead focus on the last query and response messages. You should instead focus on the last query and response messages.

  1. What is the destination port for the DNS query message? What is the source port of DNS response message?

  2. To what IP address is the DNS query message sent? Is this the IP address of your default local DNS server?

  3. Examine the DNS query message. What “Type” of DNS query is it? Does the query message contain any “answers”?

  4. Examine the DNS response message. How many “answers” are provided? What do each of these answers contain?

Now repeat the previous experiment, but instead issue the command:

nslookup –type=NS sdu.dk

Answer the following questions

  1. To what IP address is the DNS query message sent? Is this the IP address of your default local DNS server?

  2. Examine the DNS query message. What “Type” of DNS query is it? Does the query message contain any “answers”?

  3. Examine the DNS response message. What SDU nameservers does the response message provide? Does this response message also provide the IP addresses of the SDU namesers?

Now repeat the previous experiment, but instead issue the command:

nslookup www.aiit.or.kr 8.8.8.8

Answer the following questions

  1. To what IP address is the DNS query message sent? Is this the IP address of your default local DNS server? If not, what does the IP address correspond to?

  2. Examine the DNS query message. What “Type” of DNS query is it? Does the query message contain any “answers”?

  3. Examine the DNS response message. How many “answers” are provided? What does each of these answers contain?

For Linux only: Dig

There is DNS Lookup utility on Linux, dig. Its syntax like this:

dig @<nameserver> url -t <type>

Where nameserver and type can be left out. Fx: dig www.sdu.dk.

  1. Try to repeat a few of the questions above using dig instead of nslookup

Free and Public DNS Servers

DNS is a core part of using the internet. If the DNS server you are using is poorly configured with regards to caching, or just slow, it will effectively slow your connection.

This is especially true when you load a page that draws content from many different domains, such as advertisers and affiliates. Switching to DNS servers optimized for efficiency can speed up your surfing, whether in a home or business setting.

When you are at the university (or anywhere else fx at work), the default dns server will receive your dns requests, and the admin can filter out malicious websites at the DNS level, so the pages never reach your browser. They may also filter out porn and other work-inappropriate sites, like the danish goverment does on chield pornography and other censored sites. In a similar fashion, DNS-based parental control systems help parents control children’s access to age-inappropriate content, on every device.

Your ISP could even, when DNS shows no result, lead you to a "Sorry, not found site - but here is some advertisement" page. From a privacy point of view, this is troubling.

With this tool, your employee would be able to monitor which sites you visit, just by monitoring the DNS requests in the DNS server!

To avoid these issues, you can use one of the free and public DNS services available. There are many, but below is listed a few.

  • Google Public DNS It has been available for almost 10 years, and the adresses are easy to remember: 8.8.8.8 or 8.8.4.4.

  • OpenDNS In addition to DNS servers focusing on privacy and security, it offers what it calls FamilyShield servers, which filter out inappropriate content. It is now owned by Cisco. 208.67.222.222 and 208.67.220.220

  • Cloudflare Best known for its top-rated content delivery network, Cloudflare has extended its range to include a new public DNS service, the catchily-named 1.1.1.1 and 1.0.0.1. The website also have some nice guides on setting the dns server on your system.

You can find more free dns services at https://www.techradar.com/news/best-dns-server

  1. Try out nslookup or dig with a couple of the above dns services