COSC 6377: Introduction to Computer Networks

HW1: Building your own dynamic DNS

Due: March 31, 2022

In this HW, we will learn about DNS and how we can use DNS to manage access to a service that may not have a static IP address.

You will need at least two linux machines for this assignment. The easiest way to obtain those machines is on one of the cloud providers. If you decided to use AWS, micro instances in the free tier should be adequate for this assignment. The observations in the last few steps can be done from a separate machine (client machine), e.g., your laptop.

  1. Setup a DNS server in a linux machine. This machine should have a static IP address. If it has a dynamic address, do not reboot for the entire duration of the experiments in this assignment. You will need to make sure DNS requests are allowed by the firewall. You can test by using the "dig" command.
  2. Setup a linux machine (web server machine) that does not have a static IP address. This means the server will have a random IPv4 address assigned to it every time it boots up. You can run a web server on this machine to verify it is working correctly. You will need to make sure http traffic is allow by the firewall.
  3. Pick a domain and hostname and put a record for that host+domain in your DNS server where IP address is the IP address of the web server machine.
  4. Configure your client machine to use the DNS server machine as your name resolver.
  5. On the DNS server machine, run a simple web app that accepts a GET API call to update the A record and executes an update on the DNS server to update the A record. Do not forget to enable this API traffic by the firewall.
  6. When the web server machine boots up, the web server machine needs to run a script that reads its own IP address that was assigned to it when it boots up and calls the address update API runing in the DNS server machine to update the A record. Make sure the script is working properly before configuring to run it at boot time.
  7. Access the web page on the web server machine using the host+domain on a browser to confirm it is working after each reboot of the web server even though it has a different IP address each time.
  8. Write a Python script that makes a GET request every second to the web server machine using the domain+hostname in the URL. Then, you can manually or automatically reboot the linux server with the web server several times. Use print statement or logging to collect information about the reachability of the web page on the web server machine.
  9. Use the data collected above to plot at least one graph. Describe what you observed and learned about how DNS works. Also describe how the solution you developed is different from duckdns and dyndns. Your submission should include all the code you wrote, instruction to run them, and any screenshots as relevant.