2. The basic network

In our first test, we'll create an IPSec tunnel over an intermediate network. The tunnel will be created between router R1 and router R3, both Cisco routers. The intermediate network is represented by router R2.

lab_network.dia

We make sure that R1, R2 and R3 can see eachother. The IP addressing table is:

Device
Interface
IP address
Subnet mask
Default Gateway
R1
F0/0
192.168.201.1
255.255.255.0
N/A
F0/1
10.128.11.1
255.255.255.0
N/A
R2
F0/0
192.168.201.2
255.255.255.0
N/A
F0/1
192.168.200.2
255.255.255.0
N/A
R3
F0/0
192.168.200.1
255.255.255.0
N/A
F0/1
10.128.12.1
255.255.255.0
N/A
xenial1
vbox11
10.128.11.101
255.255.255.0
10.128.11.1
xenial2
vbox12
10.128.12.101
255.255.255.0
10.128.12.1

We'll configure OSPF to provide us with the complete routing.

2.1. Routers

2.1.1. R1

The basic configuration for R1 is:

enable
config t
hostname R1
no ip domain-lookup
int f0/0
ip address 192.168.201.1  255.255.255.0
no shut
int f0/1
ip address 10.128.11.1 255.255.255.0
no shut
router ospf 101
network 192.168.201.0 0.0.0.255 area 0
network 10.128.11.0 0.0.0.255 area 0

2.1.2. R2

The basic configuration for R2 is:

enable
config t
hostname R2
no ip domain-lookup
int f0/0
ip address 192.168.201.2  255.255.255.0
no shut
int f0/1
ip address 192.168.200.2 255.255.255.0
no shut
router ospf 101
network 192.168.200.0 0.0.0.255 area 0
network 192.168.201.0 0.0.0.255 area 0

2.1.3. R3

The basic configuration for R3 is:

enable
config t
hostname R3
no ip domain-lookup
int f0/0
ip address 192.168.200.1  255.255.255.0
no shut
int f0/1
ip address 10.128.12.1 255.255.255.0
no shut
router ospf 101
network 192.168.200.0 0.0.0.255 area 0
network 10.128.12.0 0.0.0.255 area 0

2.2. Hosts

2.2.1. Vagrantfile

For ease, the hosts are created with Vagrant.

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

	config.vm.define :xenial1 do |t|
		t.vm.box = "ubuntu/xenial64"
		t.vm.box_url = "file:////links/virt_comp/vagrant/boxes/xenial64.box"
		t.vm.provider "virtualbox" do |prov|
			prov.customize ["modifyvm", :id, "--nic2", "hostonly", "--hostonlyadapter2", "vboxnet11" ]
		end
		t.vm.provision "shell", path: "./setup.xenial1.sh"
	end

	config.vm.define :xenial2 do |t|
		t.vm.box = "ubuntu/xenial64"
		t.vm.box_url = "file:////links/virt_comp/vagrant/boxes/xenial64.box"
		t.vm.provider "virtualbox" do |prov|
			prov.customize ["modifyvm", :id, "--nic2", "hostonly", "--hostonlyadapter2", "vboxnet12" ]
		end
		t.vm.provision "shell", path: "./setup.xenial2.sh"
	end
end

2.2.2. Setup for xenial1

#!/bin/bash
ETH1=$(dmesg | grep -i 'renamed from eth1' | sed -n 's/: renamed from eth1//;s/.* //p')
ifconfig $ETH1  10.128.11.101 netmask 255.255.255.0 up

route add -net 192.168.192.0 netmask 255.255.192.0 gw 10.128.11.1
route add -net 10.128.0.0  netmask 255.255.0.0 gw 10.128.11.1

apt-get update
apt-get install traceroute

Some remarks are useful here. We use $ETH1 as the network interface, because Ubuntu has chosen to make the name of the interface unpredictable.

We also route only the networks that we use in the lab to R1. In this way, we can ensure that we can reach the host with vagrant ssh and that the host can reach the Internet via its NAT adapter.

2.2.3. Setup for xenial2

The same remarks as for xenial1 are also applicable here.

#!/bin/bash
ETH1=$(dmesg | grep -i 'renamed from eth1' | sed -n 's/: renamed from eth1//;s/.* //p')


ifconfig $ETH1  10.128.12.101 netmask 255.255.255.0 up
route add -net  192.168.192.0 netmask 255.255.192.0 gw 10.128.12.1
route add -net  10.128.0.0    netmask 255.255.0.0   gw 10.128.12.1


apt-get update
apt-get install traceroute