July 17, 2016 1 Comment
Goal: Deploy internet modem for GNS3 topology using Docker container. The container uses iptables to perform NAT (masquerading) and dnsmasq as DHCP server for LAN interfaces.
Used Docker images:
- ajnouri/internet for the Internet container
- gns3/endhost for the end host container.
- gns3/webterm for firefox container.
- gns3/openvswitch for openvswitch container
GNS3 host preparation : This is performed on GNS3 linux host
From GNS3 host console, create a tap interface (tap0) and put it along with the physical interface (eth0) in a bridge (ex: ovsbr0):
ip tuntap add dev tap0 mode tap user <username>
sudo ovs-vsctl add-br ovsbr0
sudo ovs-vsctl add-port ovsbr0 tap0
You can use either linux bridge (brctl command) or OpenVswitch bridge (ovs-vsctl command)
sudo ovs-vsctl show
Remove ip address from eth0 (or release dhcp parameters) then reconfigure IP address and default gateway (or request dhcp) for the ovs bridge ovsbr0
1- Create a new docker template in GNS3. Create new docker template: Edit > Preferences > Docker > Docker containers and then “New”.
Choose “New image” option and the name ajnouri/internet
Accept all default parameters.
2- Create a new docker template in GNS3. Create new docker template: Edit > Preferences > Docker > Docker containers and then “New”.
Choose “New image” option and the name gns3/openvswitch
Set the number of interfaces to eight and accept default parameters with “next” until “finish”.
3- Same for end host container. From GNS3, create new docker template Edit > Preferences > Docker > Docker containers and then “New”.
Choose “New image” option and the name gns3/endhost.
Next you can choose a template name for the container, in this case I renamed it as “dvpc”.
Accept default parameters with “next” until “finish”.
Insert a cloud to the topology and map it to tap0
Build the below topology
Configure containers network interfaces:
Internet container ajnouri/Internet-1
End host container dvpc-1
The WAN interface of the Internet container should have been assigned an IP and gateway from your physical network (connected to internet).
Start the nat.sh script from /data directory
You will be asked to set the LAN and WAN interfaces as well as the IP range for dhcp clients connected to LAN interface, then the script will start dnsmasq and set iptables for NAT (masquerade)
Other dhcp parameters assigned to the client are taken from Internet device WAN interface DHCP parameters.
Let’s have fun! Now that we have internet connectivity, install a text-based browser package on the end host container
Start elinks and browse Internet
For more comfortable browsing experience, you can use the image gns3/webterm.
Create a new Docker template
Choose vnc as the console type to allow GUI browsing of Firefox
And keep the remaining default parameters.
Insert the image and connect it to the topology as follow:
Set the container interface for dhcp client
Start the stopped containers and console (vnc) to Webterm container.
(gns3/openvswitch doesn’t need any configuration)
You should get this