WireGuard Mesh Configurator
On the Horizon:
wg-dynamic is a tool designed officially by WireGuard developing team. This new utility will provide a convenient way of configuring networks dynamically, where mesh network being one of the them. If you're interested, check it out at wg-dynamic@github or wg-dynamic@official repository).
1.2.0 (May 16, 2019)
- You can now set Aliases and Descriptions for peers.
- Profiles can now be saved and loaded in JSON format.
1.1.7 (Feburary 20, 2019)
- Public address can now be either FQDN or IP address, as requested by @KipourosV
WireGuard mesh configurator is a tool that will help you generating peer configuration files for wireguard mesh networks. You generate configuration files for a large amount of peers easily and quickly via this tool.
|ncurses dev package
||Required by the installation of the Python
libncurses5-dev on Debian
The following libraries can be installed easily through executing
pip3 install -r requirements.txt under the root directory of this repository.
|Command line I/O library
|For better interactive command line interface
|For calculating IP addresses
Learn By An Example
In this section, we will be going through how to configure a mesh network with the topology shown below using wireguard mesh configurator (this tool, WGC).
Step 1: Create a Profile
Launch the WGC interactive shell. This will be where you give instructions to WGC.
$ python3 wireguard_mesh_configurator.py int
Every profile in WGC contains a complete topology. To create a new mesh network, we start by creating a new profile. Once a profile is created, you will be prompted automatically to enroll new peers. This leads us to the next step.
Step 2: Enroll Peers
Now that a profile has already been created, we need to input peers' information into WGC, so it knows the layout of the network.
Step 3: Export Configurations
Now that we have all the peers in the profile, it's time to export everything into wireguard configuration files. We can dump configuration files into a directory using the
GenerateConfigurations command. The following command will dump all the configuration files into the
[WGC]> gen /tmp/wg
Step 4: Copy Configuration Files to Endpoints
With the configuration files generated, all that's left to do is to copy the configuration files to the endpoints. Copy each configuration to the corresponding device with any method you like (sftp, ftps, plain copy & paste, etc.).
Put the configuration file to
/etc/wireguard/wg0.conf is recommended, since it will make us able to use the
wg-quick command for express configuration.
Step 5: Enable WireGuard and Apply the Configuration
Lets tell wireguard to create an interface with this configuration and make it a service, so the interface will be created as system is booted up.
$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0
Step 6: Saving and Loading Profiles
We can save a profile for future use using the
SaveProfile command. The following example will save the profile to
[WGC]> save /home/k4yt3x/example.pkl
To load the profile, just use the
[WGC]> load /home/k4yt3x/example.pkl
Then you can use
ShowPeers command to verify that everything has been loaded correctly.
Clone the repository and enter it.
$ git clone https://github.com/K4YT3X/wireguard-mesh-configurator.git
$ cd wireguard-mesh-configurator/
Install Python 3 dependencies.
$ sudo pip3 install -r requirements.txt
Run the tool.
$ python3 wireguard_mesh_configurator.py interactive
$ python3 wireguard_mesh_configurator.py int
Creating A Profile
NewProfile command to create a new profile.
[WGC]> NewProfile # Create new profile
Then the peer enrolling wizard will ask you for all the information needed for all the peers. Select
n when being asked if you want to add a new peer to end the wizard.
Adding a Peer
AddPeer command to initialize the wizard of appending a new peer to the profile.
Deleting a Peer
DeletePeer command to remove a peer from the profile.
[WGC]> DeletePeer [Peer Address (e.g. 10.0.0.1/8)]
Run the following command to dump your currently-loaded profile into configuration files and export them to
[WGC]> GenerateConfigurations [output path]
Viewing All Peers
To view all the peers configurations in the current profile:
Saving / Loading Profiles
To save a profile in JSON format:
[WGC]> JSONSaveProfile [output path]
To save a profile in Pickle format:
[WGC]> PickleSaveProfile [output path]
To load a profile in JSON format:
[WGC]> JSONLoadProfile [output path]
To load a profile in Pickle format:
[WGC]> PickleLoadProfile [output path]