This script is an example for how to create a point to point unicast VXLAN tunnel between two linux hosts via python. Included is a vagrant file that will spin up a vagrant environment for testing the script functionality.
>= python3.6
pip3
bridge-utils
Vagrant and virtualbox should be installed prior to bringing up the vagrant environment.
The vagrant environment is simulating two sites connected by an isp. The routers (circles in the diagram) are Ubuntu 18.04 with FRRouting installed. The servers (squares in the diagram) are vanilla Ubuntu 18.04.
Following the below instructions the script will form a VXLAN tunnel overlay between the two site routers allowing the two servers to talk to each other as if they were directly connected. Without the tunnel they are unable to communicate with each other.
git clone https://github.com/briantsaunders/linux-vxlan-tunnel-example-script.git
cd linux-vxlan-tunnel-example-script
vagrant up
Ansible is used to provision the vagrant boxes. It will configure FRRouting on the routers, install pip3 on the site routers, and will pip3 install the requirements.txt on the site routers. Check out the playbook pb.conf.all.yml for more details.
Once the vagrant environment is up issue the following commands to configure the VXLAN tunnel and validate.
Configure sie1router:
vagrant ssh site1router
cd /vagrant
sudo python3 linux_vxlan_tunnel_example.py --local_vtep 192.168.0.2 --remote_vtep 192.168.0.5 --vni 100 --physical_interface eth2
Configure site2router:
vagrant ssh site2router
cd /vagrant
sudo python3 linux_vxlan_tunnel_example.py --local_vtep 192.168.0.5 --remote_vtep 192.168.0.2 --vni 100 --physical_interface eth2
Validate site1server can ping site2server:
vagrant ssh site1server
ping 172.16.0.11
Option String | Required | Type | Default | Example | Description |
---|---|---|---|---|---|
local_vtep | True | string | none | 10.0.0.1 | Local VXLAN tunnel endpoint |
remote_vtep | True | string | none | 10.0.0.2 | Remove VXLAN tunnel endpoint |
vni | True | integer | none | 100 | VXLAN network identifier |
physical_interface | True | string | none | eth2 | Local interface to bridge to VXLAN Tunnel |
delete | False | boolean | False | none | Deletes VXLAN tunnel |
sudo python3 linux_vxlan_tunnel_example.py --local_vtep 192.168.0.2 --remote_vtep 192.168.0.1 --vni 100 --physical_interface eth2
sudo python3 linux_vxlan_tunnel_example.py --local_vtep 192.168.0.2 --remote_vtep 192.168.0.1 --vni 100 --physical_interface eth2 --delete