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.

client.png>

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.

totalnw.png>


toposum.png>