Skip to content

Multi-link VPN (ADSL/SDSL/xDSL/Network aggregation / bonding)

License

Notifications You must be signed in to change notification settings

tmolitor-stud-tu/MLVPN

This branch is 10 commits ahead of zehome/MLVPN:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

eef783c · Nov 26, 2022
Jul 29, 2021
Mar 29, 2020
Jul 29, 2021
Feb 17, 2015
Jul 29, 2021
Nov 26, 2022
Feb 20, 2020
Jun 22, 2016
Feb 20, 2020
Mar 28, 2016
Oct 20, 2015
Mar 4, 2015
Oct 21, 2015
Feb 16, 2015
Feb 23, 2015
Feb 20, 2020
Nov 14, 2016
Aug 4, 2022
Feb 28, 2015
Nov 12, 2015
Feb 20, 2020
Oct 25, 2022
Apr 12, 2021
Apr 12, 2021
Sep 17, 2015
Oct 20, 2015
Feb 17, 2015

Repository files navigation

MLVPN - Multi-Link Virtual Public Network

Build Status Coverity Status

author: Laurent Coustet

Take a look at the official documentation on Read The Docs

Introduction

MLVPN will do its best to achieve the following tasks:

  • Bond your internet links to increase bandwidth (unlimited)
  • Secure your internet connection by actively monitoring your links and removing the faulty ones, without loosing your TCP connections.
  • Secure your internet connection to the aggregation server using strong cryptography.
  • Scriptable automation and monitoring.

Quick install

A Nice tutorial using OpenBSD

See solene's article on how to use mlvpn on OpenBSD

Install debian package

sudo apt-key adv --keyserver pgp.mit.edu --recv 3324C952
echo "deb http://debian.mlvpn.fr unstable/" >/etc/apt/sources.list.d/mlvpn.list
sudo apt-get update
sudo apt-get install mlvpn

Install FreeBSD port

pkg install git libev libsodium
git clone --branch freebsd https://github.com/zehome/MLVPN mlvpn
cd mlvpn
make

Install "static" package

This is usefull on old systems. For example, for debian

wget https://github.com/zehome/MLVPN/releases/download/2.3.1/mlvpn_static_ev_4.22_libsodium_1.0.10.tar.gz
tar -C / -xpzf mlvpn_static_ev_4.22_libsodium_1.0.10.tar.gz
adduser --quiet --system --no-create-home --home /var/run/mlvpn --shell /usr/sbin/nologin mlvpn
chmod +x /etc/init.d/mlvpn
insserv mlvpn

Build from source (using nix)

Using nix, MLVPN can be built on any linux system without the need to manually setup a build environment or install dependencies. It also allows to build static binaries and cross built binaries. It just requires nix to be installed (see getting nix)

First obtain a flakes compatible nix :

  NIX_CONFIG="experimental-features = flakes nix-command" nix-shell -p nixFlakes

Build MLVPN via nix:

  • Build for your current platform
      nix build github:zehome/MLVPN
  • Static build for your current platform
      nix build github:zehome/MLVPN#mlvpn-static
  • Cross build for another platform
      nix build github:zehome/MLVPN#mlvpn-aarch64-linux
  • Static cross build for another platform
      nix build github:zehome/MLVPN#mlvpn-static-aarch64-linux

The binary will end up in ./result/bin

Build from source (debian / arch)

# Debian
$ sudo apt-get install build-essential make autoconf automake libev-dev libsodium-dev libpcap-dev pkg-config
# OR ArchLinux
$ sudo pacman -S base-devel git libev libsodium
$ ./autogen.sh
$ ./configure
$ make
$ make install

Build debian package

$ sudo apt-get install build-essential make autoconf debhelper fakeroot cdbs ruby-ronn
$ dpkg-buildpackage -us -uc -rfakeroot

Generating a static binary

apt-get install flex bison build-essential
MLVPN_VERSION=2.3.0
EV_VERSION=4.22
LIBSODIUM_VERSION=1.0.8
PCAP_VERSION=1.7.4
wget http://dist.schmorp.de/libev/libev-${EV_VERSION}.tar.gz
wget https://github.com/jedisct1/libsodium/releases/download/1.0.8/libsodium-${LIBSODIUM_VERSION}.tar.gz
wget http://www.tcpdump.org/release/libpcap-${PCAP_VERSION}.tar.gz
tar xzf libev-${EV_VERSION}.tar.gz
tar xzf libsodium-${LIBSODIUM_VERSION}.tar.gz
tar xzf libpcap-${PCAP_VERSION}.tar.gz

echo libev
(cd libev-${EV_VERSION}
./configure --enable-static --disable-shared --prefix $HOME/libev/
make -j4 install)

echo libsodium
(cd libsodium-${LIBSODIUM_VERSION}
./configure --enable-static --disable-shared --prefix=$HOME/libsodium/
make -j4 install)

echo libpcap
(cd libpcap-${LIBPCAP_VERSION}
./configure --disable-shared --prefix $HOME/libpcap/
make -j4 install)

wget https://github.com/zehome/MLVPN/releases/download/${MLVPN_VERSION}/mlvpn-${MLVPN_VERSION}.tar.gz
tar xzf mlvpn-${MLVPN_VERSION}.tar.gz
cd mlvpn-${MLVPN_VERSION}
libpcap_LIBS="-L${HOME}/libpcap/lib -lpcap" libpcap_CFLAGS="-I${HOME}/libpcap/include" libsodium_LIBS="-L${HOME}/libsodium/lib -lsodium" libsodium_CFLAGS=-I${HOME}/libsodium/include libev_LIBS="-L${HOME}/libev/lib -lev" libev_CFLAGS=-I${HOME}/libev/include ./configure --enable-filters LDFLAGS="-Wl,-Bdynamic" --prefix=${HOME}/mlvpn/
make install

Dependencies

  • libev
  • libsodium
  • libpcap (optional)

Security

Privilege separation

MLVPN uses privilege separation to keep high privileges operations away from the core routing stuff.

Code running as root is very minimalist and highly readable to avoid risks as much as possible.

Read more about privilege separation

Cryptography

  • Encryption: Salsa20 stream cipher
  • Authentication: Poly1305 MAC

Read more on salsa20 and libsodium.

Compatibility

Linux, OpenBSD, FreeBSD, OSX

Windows is NOT supported, but MLVPN runs on routers, so you can benefit from MLVPN on ANY operating system of course.

Contributors

  • Laurent Coustet, author and maintainer
  • Philippe Pepiot, contributor (privilege separation, bugfix)
  • Ghislain Lévèque, contributor (weight round robin)
  • Fabien Dupont, contributor (bugfix)
  • Thomas Soëte, contributor (bugfix)
  • Frank Denis, contributor (documentation)
  • Nicolas Braud-Santoni, contributor (documentation)
  • Stuart Henderson, contributor (OpenBSD port/package)
  • Olivier Cochard-Labbé, contributor (FreeBSD/OpenBSD fib routing)
  • Michael Stapelberg, contributor (documentation)

LICENSE

See LICENSE file.

Documentation

Documentation is available on Read The Docs. The manpage is also authored in Markdown, and converted using ronn.

About

Multi-link VPN (ADSL/SDSL/xDSL/Network aggregation / bonding)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 91.1%
  • M4 3.2%
  • Shell 3.1%
  • Lua 1.1%
  • Other 1.5%