2. The network
The basic idea is, that we have two different networks, one with a web server
and one with the client. Both networks get a DNS server, but the website will
not be in the DNS server of the client. The client can only access the
URL for the website via the proxy.
2.1. The client network
The client is a Windows 10 virtual machine that I have lying around. In
the client network, there is also a DNS server that serves DNS for the
client network only (so not for the server network that will be
created later on.

R1, which is the client router, will get the more-or-less standard .1 address
on those networks.
interface Ethernet0/0 ip address 10.128.1.1 255.255.255.0 no shut ! interface Ethernet0/1 ip address 10.128.2.1 255.255.255.0 no shut ! interface Ethernet0/3 ip address 10.128.3.2 255.255.255.0 half-duplex !
E0/3 is the connection towards the server router.
The server precise2 is a Linux server that will act as an Intranet server.
It will do name resolution for the Intranet, 10.128.1.0/24 and 10.128.2.0/24.
The server is created with Vagrant:
# -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure("2") do |config| config.vm.define :precise2 do |t| t.vm.box = "hashicorp/precise64" t.vm.provider "virtualbox" do |prov| prov.customize ["modifyvm", :id, "--nic2", "hostonly", "--hostonlyadapter2", "vboxnet2" ] end t.vm.provision "shell", path: "./setup.precise2.sh" end end
And the basic network configuration in
setup.precise2.sh
is:
ifconfig eth1 10.128.2.100 netmask 255.255.255.0 up route add -net 10.128.0.0 netmask 255.255.0.0 gw 10.128.2.1
On the Windows client, the second network is connected to vboxnet1 and
it has the static IP address 10.128.1.100.
In a
cmd
console as administrator, the route to the GNS3 network needs to be set:
:\WINDOWS\system32>route ADD 10.128.0.0 MASK 255.255.0.0 10.128.1.1 OK! C:\WINDOWS\system32>ping 10.128.1.1 Pinging 10.128.1.1 with 32 bytes of data: Reply from 10.128.1.1: bytes=32 time=3ms TTL=255 Reply from 10.128.1.1: bytes=32 time=7ms TTL=255 Reply from 10.128.1.1: bytes=32 time<1ms TTL=255 Ping statistics for 10.128.1.1: Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 7ms, Average = 3ms Control-C ^C C:\WINDOWS\system32>ping 10.128.2.1 Pinging 10.128.2.1 with 32 bytes of data: Reply from 10.128.2.1: bytes=32 time<1ms TTL=255 Reply from 10.128.2.1: bytes=32 time=4ms TTL=255 Reply from 10.128.2.1: bytes=32 time=8ms TTL=255 Ping statistics for 10.128.2.1: Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 8ms, Average = 4ms Control-C ^C C:\WINDOWS\system32>ping 10.128.2.100 Pinging 10.128.2.100 with 32 bytes of data: Reply from 10.128.2.100: bytes=32 time=17ms TTL=63 Reply from 10.128.2.100: bytes=32 time=10ms TTL=63 Reply from 10.128.2.100: bytes=32 time=14ms TTL=63 Ping statistics for 10.128.2.100: Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 10ms, Maximum = 17ms, Average = 13ms Control-C ^C
2.2. The server network
The server network will have three servers:
-
a proxy on precise1
-
a web server on precise3
-
a name server on precise4
The Vagrantfile then becomes:
# -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure("2") do |config| config.vm.define :precise1 do |t| t.vm.box = "hashicorp/precise64" t.vm.provider "virtualbox" do |prov| prov.customize ["modifyvm", :id, "--nic2", "hostonly", "--hostonlyadapter2", "vboxnet0" ] end t.vm.provision "shell", path: "./setup.precise1.sh" end config.vm.define :precise2 do |t| t.vm.box = "hashicorp/precise64" t.vm.provider "virtualbox" do |prov| prov.customize ["modifyvm", :id, "--nic2", "hostonly", "--hostonlyadapter2", "vboxnet2" ] end t.vm.provision "shell", path: "./setup.precise2.sh" end config.vm.define :precise3 do |t| t.vm.box = "hashicorp/precise64" t.vm.provider "virtualbox" do |prov| prov.customize ["modifyvm", :id, "--nic2", "hostonly", "--hostonlyadapter2", "vboxnet3" ] end t.vm.provision "shell", path: "./setup.precise3.sh" end config.vm.define :precise4 do |t| t.vm.box = "hashicorp/precise64" t.vm.provider "virtualbox" do |prov| prov.customize ["modifyvm", :id, "--nic2", "hostonly", "--hostonlyadapter2", "vboxnet4" ] end t.vm.provision "shell", path: "./setup.precise4.sh" end end
And the setup files:
setup.precise1.sh:
ifconfig eth1 10.128.4.100 netmask 255.255.255.0 up route add -net 10.128.0.0 netmask 255.255.0.0 gw 10.128.4.1
setup.precise3.sh:
ifconfig eth1 10.128.5.100 netmask 255.255.255.0 up route add -net 10.128.0.0 netmask 255.255.0.0 gw 10.128.5.1
setup.precise4.sh:
ifconfig eth1 10.128.6.100 netmask 255.255.255.0 up route add -net 10.128.0.0 netmask 255.255.0.0 gw 10.128.6.1
The router R2 will get:
sh ip int br Interface IP-Address OK? Method Status Protocol Ethernet0/0 10.128.5.1 YES manual up up Ethernet0/1 10.128.4.1 YES manual up up Ethernet0/2 10.128.6.1 YES manual up up Ethernet0/3 10.128.3.1 YES manual up up
2.3. Last points
Finally, both routers get to talk RIP, because I'm a lazy sod and I don't care.
enable conf t router rip network 10.0.0.0
The network now looks like this.

