This document describes the process for compiling n2n in several different scenarios.
There are some configuration options available during the build process, which are documented in the Build time Configuration page.
Also of use are the steps used for the automated Continuous Integration process, which can be found in the Github actions config file
If you are compiling with the UPnP libraries, it is possible that your operating system or your build system do not include binaries for the required libraries.
Using these libraries can cause issues with some build systems, so be aware that not all combinations are supportable.
To make this scenario simpler, the required source code has been
added to this repository as git
submodules which require
one extra step to complete their checkout.
So the very first time after cloning the n2n git repo, you should run this command in the n2n directory to fetch the submodules:
git submodule update --init --recursive
In order to use n2n on macOS, you first need to install support for TUN/TAP interfaces:
brew tap homebrew/cask brew cask install tuntap
If you are on a modern version of macOS (i.e. Catalina), the commands above will ask you to enable the TUN/TAP kernel extension in System Preferences → Security & Privacy → General.
For more information refer to vendor documentation or the Apple Technical Note.
Note that on the newest MacOS versions and on Apple Silicon, there may be increasing security restrictions in the OS that make installing the TUN/TAP kernel extension difficult. Alternative software implementations to avoid these difficulties are being discussed for future n2n versions.
The following document some possible windows compile recipes. Of them, the MinGW build process is more tested as it is more friendly to open source development.
In order to build with Vidual Studio on Windows the following tools should be installed:
Visual Studio. For a minimal install, the command line only build tools can be downloaded and installed from https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2017.
CMake (From https://cmake.org/download/)
NOTE: You should always use the official cmake stable release as
otherwise you may have issues finding libraries (e.g: the installed
OpenSSL library). If you still have problems, you can try invoking it
(optional) The OpenSSL library. This optional library can be enabled as per the steps in the Build time Configuration
Pre-built OpenSSL binaries can be downloaded from https://slproweb.com/products/Win32OpenSSL.html. The full version is required, i.e. not the "Light" version. The Win32 version of it is usually required for a standard build.
In order to build from the command line, open a terminal window change to the directory where the git checkout of this repository is and run the following commands:
cmake works as follows:
cmake -E make_directory build cd build rem Append any options to the next line cmake .. cmake --build . --config Release
.exe files should now be available in the
These steps were tested on a fresh install of Windows 10 Pro with all patches applied as of 2021-09-29.
choco install git mingw make
git clone $THIS_REPO
Due to limitations in the Windows environment, the normal autotools
steps have been emulated by the
hack_fakeautoconf - This
currently results in the version number reported by the compiled
software being inaccurate.
Note: MinGW builds have had a history of incompatibility reports with other OS builds (for example #617 and #642) However, if the tests pass, you should have a high confidence that your build will be compatible.
In order to run n2n on Windows, you will need the following:
The TAP drivers should be installed into the system. They can be installed from http://build.openvpn.net/downloads/releases, search for "tap-windows".
If OpenSSL has been linked dynamically, the corresponding
.dll file should be available onto the target
edge.exe program reads the
file located into the current directory if no option is provided.
supernode.exe program reads the
supernode.conf file located into the current directory if
no option is provided.
Example edge.conf and supernode.conf are available.
edge.exe --help and
supernode.exe --help for a full list of supported
The Makefiles are all setup to allow cross compiling of this code.
You will need to have the cross compiler, binutils and any additional
libraries desired installed for the target architecture. Then you can
./configure with the appropriate CC and AR
environment and the right
If compiling on Debian or Ubuntu, this can be as simple as the following example:
HOST_TRIPLET=arm-linux-gnueabi sudo apt-get install binutils-$HOST_TRIPLET gcc-$HOST_TRIPLET ./autogen.sh export CC=$HOST_TRIPLET-gcc export AR=$HOST_TRIPLET-ar ./configure --host $HOST_TRIPLET make
A good starting point to determine the host triplet for your
destination platform can be found by copying the
./config.guess script to it and running it on the
This is not a good way to produce binaries for embedded environments (like OpenWRT) as they will often use a different libc environment.
There are also some example package build recipes included with the source.