Accéder au contenu principal

GNS3: Simulating a 100% opensource site2site VPN using Wireguard, VyOS and OpenVSwitch

 This is something I had in mind but didn't find the time to accomplish before. It just took a very cold day to convince me that I have to play with Wireguard on VyOS.

I used GNS3 of course, on my personal Linux laptop to create this setup. Of course the performance was not that great since it is just a simulation. 

In real life, I am using Wireguard on a 10 years old Raspberry Pi Model B and amazingly with just a 700MHz single core ARM CPU and less than 512 MB of RAM I had a decent and stable permanent Wireguard tunnel. (My bandwidth would reach 24 Mbps without issue)

Back to my simulation, this is what it looks like :


Quick explanation: the VYOS routers labeled IPERF1 and IPERF2 are only used for an iperf3 test, which was able to reach about 50 to 60 Mbps each time. It ain't much but it was honest (and free) secure bandwidth!


I won't get into the details of this setup but I will just post the two most important configurations : R-East and R-West :

#### VYOS WireGuard Site2Site ####

##KEY GENERATION ON BOTH ROUTERS##

generate wireguard default-keypair

##GETTING THE PUBLIC KEY ON EACH ROUTER##

show wireguard keypairs pubkey default

#R-EAST CONFIG

set interfaces wireguard wg01 address '10.255.255.1/30'

set interfaces wireguard wg01 description 'VPN-to-wg02'

set interfaces wireguard wg01 peer to-wg02 allowed-ips '10.0.0.0/24'

set interfaces wireguard wg01 peer to-wg02 address '172.16.0.2'

set interfaces wireguard wg01 peer to-wg02 port '51820'

set interfaces wireguard wg01 peer to-wg02 pubkey 'R-WEST PUBLIC KEY'

set interfaces wireguard wg01 port '51820'

set protocols static interface-route 10.0.0.0/24 next-hop-interface wg01

#R-WEST CONFIG

set interfaces wireguard wg01 address '10.255.255.2/30'

set interfaces wireguard wg01 description 'VPN-to-wg02'

set interfaces wireguard wg01 peer to-wg02 allowed-ips '192.168.0.0/24'

set interfaces wireguard wg01 peer to-wg02 address '172.17.0.2'

set interfaces wireguard wg01 peer to-wg02 port '51820'

set interfaces wireguard wg01 peer to-wg02 pubkey 'R-EAST PUBLIC KEY'

set interfaces wireguard wg01 port '51820'

set protocols static interface-route 192.168.0.0/24 next-hop-interface wg01

## VYOS Firewall, on both routers

set firewall name OUTSIDE_LOCAL rule 10 action accept

set firewall name OUTSIDE_LOCAL rule 10 description 'Allow established/related'

set firewall name OUTSIDE_LOCAL rule 10 state established enable

set firewall name OUTSIDE_LOCAL rule 10 state related enable

set firewall name OUTSIDE_LOCAL rule 20 action accept

set firewall name OUTSIDE_LOCAL rule 20 description WireGuard_IN

set firewall name OUTSIDE_LOCAL rule 20 destination port 51820

set firewall name OUTSIDE_LOCAL rule 20 log enable

set firewall name OUTSIDE_LOCAL rule 20 protocol udp

set firewall name OUTSIDE_LOCAL rule 20 source

set interfaces ethernet eth0 firewall local name 'OUTSIDE_LOCAL'


This configuration allows only the networks 192.168.0.0/24 from the East side and 10.0.0.0/24 from the West side to send traffic through the Wireguard VPN Tunnel between R-East and R-West. For testing purposes, you should for example ping from PC1 to PC2 and PC2 to PC1. Pinging from R-East to R-West would fail if the source is not set to the authorized network. 

Also, there has been no configuration whatsoever on the OpenVSwitch switches, they are used only for L2 packet switching.

Commentaires

Posts les plus consultés de ce blog

GNS3 on Manjaro/Arch Linux: How to create virbr0 for NAT to work

Problem: You can't add a NAT connection to your GNS3 simulation, and you get the error : "ERROR template_manager:226 Error while creating node from template: NAT interface virbr0 is missing, please install libvirt" Steps to resolve: 1- Create a file named /tmp/default.xml 2- Paste this content and save: <network>   <name>default</name>   <bridge name="virbr0"/>   <forward mode="nat"/>   <ip address="192.168.123.1" netmask="255.255.255.0">     <dhcp>       <range start="192.168.123.2" end="192.168.123.254"/>     </dhcp>   </ip> </network> 3- Execute the following commands in your shell : virsh net-define /tmp/default.xml sudo virsh net-start default sudo virsh net-autostart default  

AutoWG: a simple Bash script to connect two devices with Wireguard

 I made today a quite simple BASH script that allows to connect two devices running Wireguard (tested with Debian Linux 12, but should work with any device) You can check it out (and fork it if you want) in this Gitlab Page This is the source code as of now, but I could modify it later (any suggestions are welcome) : #!/bin/bash # # AUTOWG written by Hamdi KADRI  # No copyright in any form or kind # This script is intended to create configurations for  # a point-to-point Wireguard connection between a server # and a client (/30 network) # # Step zero: declare configurations as variables servercfg="[Interface] Address = <serverwgIP> SaveConfig = true ListenPort = <port> PrivateKey = <server-privatekey> [Peer] PublicKey = <client-pubkey> AllowedIPs = <clientwgIP> " clientcfg="[Interface] PrivateKey = <client-privatekey> Address = <clientwgIP> [Peer] PublicKey = <server-pubkey> AllowedIPs = 0.0.0.0/0 EndPoint = <serverIP...