Multipath TCP (MPTCP) allows a single TCP connection to use multiple network paths simultaneously. This means a device can aggregate a wired Ethernet connection, a Wi-Fi link, and a cellular connection into one high-throughput, resilient connection. If one path fails, the connection survives on the remaining paths.

This guide compares three self-hosted MPTCP solutions: OpenMPTCProuter (a complete router appliance), mptcpd (a user-space path management daemon), and the Linux kernel MPTCP implementation (the upstream in-kernel solution).

Overview of MPTCP Solutions

MPTCP extends standard TCP to enable multiple subflows across different network interfaces. Each approach to MPTCP deployment has different complexity levels, from a ready-made router firmware to a kernel-level networking stack.

FeatureOpenMPTCProutermptcpdLinux Kernel MPTCP
TypeComplete router firmwareUser-space daemonIn-kernel implementation
GitHub Stars2,382228402+ (dev branch)
Active DevelopmentYes (updated 2026)Yes (updated 2025)Yes (upstream kernel)
PlatformOpenWrt-basedLinuxLinux kernel 5.6+
Web UIYes (LuCI-based)No (CLI only)No (sysctl/config)
Docker SupportVia VM/containerVia privileged containerNative in kernel
Multi-WANYes (built-in)Via path managerVia routing tables
FailoverYes (automatic)YesYes
Load BalancingYes (per-connection)YesYes
Cellular SupportYes (USB/LTE modems)Via kernel interfacesVia kernel interfaces
Setup ComplexityMediumAdvancedAdvanced

OpenMPTCProuter — Complete MPTCP Router Appliance

OpenMPTCProuter is an open-source solution built on OpenWrt that aggregates multiple internet connections using MPTCP. It provides a complete router firmware with a web interface, making it the most accessible MPTCP deployment option.

Key Features

  • Ready-to-flash OpenWrt-based firmware
  • Web management interface (LuCI)
  • Automatic connection aggregation across WAN links
  • Support for Ethernet, Wi-Fi, and cellular interfaces
  • Built-in QoS and traffic prioritization
  • Real-time bandwidth monitoring dashboard
  • Failover with automatic path recovery

Installation on OpenWrt

OpenMPTCProuter is designed for OpenWrt-compatible routers. The installation involves flashing a custom firmware image:

1
2
3
4
5
6
7
8
# Download the appropriate image for your router
wget https://github.com/Ysurac/openmptcprouter/releases/latest/download/openmptcprouter-sysupgrade.bin

# Flash via OpenWrt web interface or command line
sysupgrade -n /tmp/openmptcprouter-sysupgrade.bin

# Alternatively, flash via TFTP for bricked recovery
# tftp -g -r openmptcprouter-initramfs.bin <TFTP_SERVER_IP>

Docker-Based MPTCP Server Setup

OpenMPTCProuter requires a VPS server endpoint for MPTCP aggregation. Here is a Docker Compose setup for the server side:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
version: "3.8"

services:
  openmptcprouter-server:
    image: ubuntu:22.04
    container_name: omr-server
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    volumes:
      - ./omr/config:/etc/mptcp
      - ./omr/logs:/var/log/mptcp
    command: >
      bash -c "
        apt-get update && apt-get install -y iproute2 mptcp-tools &&
        sysctl -w net.mptcp.mptcp_enabled=1 &&
        sysctl -w net.mptcp.mptcp_checksum=1 &&
        tail -f /dev/null
      "
    network_mode: host

Server-Side MPTCP Configuration

1
2
3
4
5
6
7
8
# Enable MPTCP on the server
sysctl -w net.mptcp.mptcp_enabled=1
sysctl -w net.mptcp.mptcp_checksum=1
sysctl -w net.mptcp.mptcp_scheduler=blest

# Verify MPTCP is active
ss -tin | grep mptcp
cat /proc/net/mptcp/mptcp

mptcpd — User-Space MPTCP Path Management Daemon

mptcpd is a daemon that manages MPTCP paths from user space using the Linux kernel’s MPTCP path management netlink interface. It provides programmatic control over MPTCP connection establishment and path selection.

Key Features

  • User-space control over MPTCP path management
  • Netlink-based communication with kernel
  • Pluggable path manager modules
  • Support for address advertisement and removal
  • Integration with systemd for service management
  • Compatible with upstream kernel MPTCP

Docker Compose Configuration

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
version: "3.8"

services:
  mptcpd:
    image: ubuntu:22.04
    container_name: mptcpd
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - NET_RAW
    volumes:
      - ./mptcpd/config:/etc/mptcpd
      - ./mptcpd/run:/run/mptcpd
    command: >
      bash -c "
        apt-get update && apt-get install -y mptcpd iproute2 &&
        mptcpd -d -p default &&
        tail -f /dev/null
      "
    network_mode: host

mptcpd Configuration

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# /etc/mptcpd/mptcpd.conf

[mptcpd]
# Use the default path manager plugin
plugin = default

# Path manager plugin
path-manager = addr

# Log level
log-level = info

# Monitor kernel events
monitor = yes

Verifying mptcpd Operation

1
2
3
4
5
6
7
8
9
# Check mptcpd status
systemctl status mptcpd

# View MPTCP connections
ss -tinm

# Check kernel MPTCP status
cat /proc/net/mptcp/mptcp
mptcpd --show-addr

Linux Kernel MPTCP — The Upstream Implementation

The Linux kernel has included native MPTCP support since version 5.6. This is the foundation that both OpenMPTCProuter and mptcpd build upon. Running kernel MPTCP directly gives you the most lightweight approach with zero user-space dependencies.

Key Features

  • Zero user-space overhead — implemented entirely in the kernel
  • Built-in since Linux 5.6 (no custom kernel patches needed)
  • Multiple scheduling algorithms: default, binder, first, retransmit, bleed, backup
  • Full RFC 8684 compliance
  • Integration with standard iproute2 tools
  • Compatible with all MPTCP-aware applications

Enabling MPTCP in the Kernel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Check kernel MPTCP support (kernel 5.6+)
uname -r
# Output: 5.15.0-generic or higher

# Enable MPTCP
sysctl -w net.mptcp.mptcp_enabled=1
sysctl -w net.mptcp.mptcp_checksum=1

# Choose a scheduler
# default: standard MPTCP scheduling
# binder: bind subflows to specific interfaces
# first: use the first available subflow
sysctl -w net.mptcp.mptcp_scheduler=default

# Make persistent across reboots
echo "net.mptcp.mptcp_enabled=1" >> /etc/sysctl.conf
echo "net.mptcp.mptcp_checksum=1" >> /etc/sysctl.conf

Testing MPTCP Connections

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Install MPTCP testing tools
apt-get install mptcp-tools

# Test MPTCP connectivity
# The -M flag creates a regular TCP connection for comparison
curl -s https://check-mptcp.io/

# Verify with ss (socket statistics)
ss -tinm
# Look for "mptcp" in the output

# Check subflow status
ip mptcp show

Why Self-Host Your Own MPTCP Solution?

Running your own MPTCP infrastructure gives you complete control over traffic aggregation and failover. Commercial solutions like Speedify or Connectify charge per-device licensing fees and route your traffic through their servers. With self-hosted MPTCP, you own the infrastructure and control the data path.

This is especially valuable for remote sites, field operations, or any scenario where network reliability matters. By combining multiple inexpensive connections (broadband, cellular, satellite), you can achieve higher throughput and better resilience than any single connection alone.

For general network load balancing, see our HAProxy UDP load balancing guide. If you need BGP routing for multi-homed setups, our BGP route reflector guide covers advanced routing. For VXLAN tunneling between sites, check our VXLAN guide.

Network Architecture Considerations

When deploying MPTCP in production, consider these architectural patterns:

  • Single-homed clients with multi-homed server: Clients use one connection, but the server aggregates multiple upstream links for redundancy
  • Multi-homed clients with single-homed server: Clients aggregate multiple local connections for throughput, connecting to a standard server
  • Fully multi-homed: Both client and server use multiple connections for maximum resilience
  • Cellular backup: Use a primary broadband connection with cellular MPTCP subflow as automatic failover

Choosing the Right MPTCP Solution

Use CaseRecommended SolutionReason
Complete router applianceOpenMPTCProuterWeb UI, easy setup, all-in-one
Programmatic path controlmptcpdUser-space API, pluggable managers
Minimal overheadLinux Kernel MPTCPNo user-space daemon needed
OpenWrt router deploymentOpenMPTCProuterPurpose-built for OpenWrt
Custom application integrationmptcpdNetlink interface for developers
Quick testing on LinuxKernel MPTCPJust enable sysctl, no extra packages

FAQ

What is Multipath TCP (MPTCP)?

MPTCP is an extension of the standard TCP protocol that allows a single connection to use multiple network paths simultaneously. This enables bandwidth aggregation (combining multiple connections for higher throughput) and seamless failover (if one path fails, the connection continues on remaining paths). It is defined in RFC 8684.

Does Linux support MPTCP natively?

Yes. Linux kernel version 5.6 and later include native MPTCP support. No custom kernel patches are required. You can enable it via sysctl settings: sysctl -w net.mptcp.mptcp_enabled=1. Most modern distributions ship kernels newer than 5.6.

Can I use MPTCP with Docker containers?

MPTCP can be used inside Docker containers, but it requires privileged mode (--cap-add=NET_ADMIN) and host networking (--network host) to access the kernel’s MPTCP stack. The MPTCP functionality is provided by the host kernel, so the container itself does not need MPTCP-specific software.

How many connections can MPTCP aggregate?

MPTCP can theoretically aggregate any number of network paths. In practice, most deployments use 2-4 connections (e.g., broadband + cellular + Wi-Fi + satellite). Each additional subflow adds overhead, and the benefit diminishes beyond 4-6 paths.

Is MPTCP compatible with standard TCP servers?

Yes. MPTCP is designed to be transparent to applications. An MPTCP-enabled client can connect to a standard TCP server — the connection falls back to regular TCP if the server does not support MPTCP. This ensures backward compatibility with all existing internet services.

What is the difference between OpenMPTCProuter and mptcpd?

OpenMPTCProuter is a complete router firmware based on OpenWrt, designed for end users who want a plug-and-play MPTCP solution with a web interface. mptcpd is a user-space daemon that provides programmatic path management for developers and system administrators who need fine-grained control over MPTCP behavior.