dns.insert_dns
Overview: The insert_dns model component provides an easy way to drop a configured DNS server onto an arbitrary experiment graph.
It consists of the following components: (1) dns.dns_objects, which provides the DNSServer graph_object. The DNSServer is a Ubuntu 16.04 server running bind.
(2) A series of model_components that configure the DNSServer as well as the rest of the hosts in the experiment graph: populate_zones, builds the dns zone graphs for the experiment graph insert_records, inserts additional records into the DNSServer configure_bind, configures bind for each DNSServer set_nameservers, sets the dns nameserver for each host
Requirements: Generally the requirements in order to use a configured DNSServer in an experiment graph are: (1) The DNS model components must be downloaded onto the host and made accessible to firewheel through firewheel repository install. (2) The model_component in which you plan to use a DNSServer graph_object depends on the dns.dns_objects model_component. (3) The “dns” attribute is depended on before minimega.launch and after topology.
Example – Adding DNS to the ACME Topology Plugin
Getting Started
If you haven’t already cloned and installed the linux model_component repository into firewheel, do the following:
clone the linux model_component repository to /opt/firewheel/linux
run firewheel repository install /opt/firewheel/linux.
Likewise, because we are modifying the acme experiment, ensure you have the acme model_component repository installed.
Overview
The acme experiment contains the following model_components: topology, set_hostname, and run. We will be making modifications to acme.topology and acme.run.
acme.run depends on the other model_components, so the entire experiment can be launched from the command line with:
$ firewheel experiment acme.run minimega.launch
Adding Required Dependencies
We want to add a DNSServer object to the acme.topology model_component. We also want the DNSServer to be configured when we run acme.run.
Add “dns.dns_objects” model_component dependencies of the acme.topology MANIFEST file.
Import the DNSServer object to our acme.topology plugin by adding:
from dns.dns_objects import DNSServer
to the top of the plugin.
Add the “dns” attribute to the attribute dependencies of acme.run MANIFEST file.
Adding DNSServer to Our Plugin
Let’s instantiate the DNSServer in our plugin and add it to the experiment graph.
In our case, we can add the DNSServer to building_1 by modifying the build_building1 function. At the end of the function, we can add:
dns_server = Vertex(self.g, "dns.acme.com")
dns_server.decorate(DNSServer, init_args=[b1_network[5]])
dns_server.connect(b1_int, b1_network[5], b1_network.netmask)
Launching the New Experiment
Our experiment should run with:
$ firewheel experiment acme.topology minimega.launch
Now let’s verify whether our DNSServer was correctly added and configured.
First let’s verify that the dns.acme.com VM was added:
$ firewheel vm list vnc state image
An excerpt of the expected output of the above command is shown below. You should see, among other items, dns.acme.com:
+----------------------+-------+---------------------+------------------------------------+
| dns.acme.com | 5906 | running/configuring | ubuntu-16.04.3-server-amd64.qc2.xz |
+----------------------+-------+---------------------+------------------------------------+
| b2-0.acme.com | 5908 | running/configuring | ubuntu-16.04.3-server-amd64.qc2.xz |
+----------------------+-------+---------------------+------------------------------------+
Once all of the VMs have the status running/configured, VNC into one of the Ubuntu desktops. In our case we will VNC into 5908 which belongs to b2-0.acme.com as shown above.
Log into the VM with the default credentials of ubuntu:ubuntu.
Verify whether nslookup works for the DNS server
$ nslookup dns.acme.com
Server: 10.30.10.5
Address: 10.30.10.5#53
Name: 10.30.10.5
Address: 10.30.10.5
Verify whether nslookup works for the the datacenter
$ nslookup datacenter.acme.com
Server: 10.30.10.5
Address: 10.30.10.5#53
Name: datacenter.acme.com
Address: 10.30.3.2
- Attribute Provides:
dns
- Attribute Depends:
topology
- Model Component Dependencies: