Skip to content

Feature Request: Native/Kernel WireGuard support for Newt with full site-to-site networking #2349

Description

@fampla

Feature Request

Problem

I want to use Pangolin/Newt as my single networking solution to replace Tailscale, connecting multiple servers (homelab, remote Proxmox hosts) with full site-to-site connectivity for services like NFS shares.

Currently I face two limitations:

  1. Performance: Newt's userspace WireGuard implementation is significantly slower than kernel WireGuard. As discussed in Pangolin performance via Newt #512, users report ~1-10 MB/s with Newt vs 22+ MB/s with native WireGuard for the same connection.

  2. Site-to-Site networking: Private resources and subnet routing only work with Newt, but the performance penalty makes it unsuitable for bandwidth-intensive use cases (NFS, media streaming, backups).

Current Workaround

I'm forced to run a hybrid setup:

  • Native WireGuard (wg0) for bandwidth-intensive services (Emby, etc.)
  • Tailscale for site-to-site connectivity (NFS between servers)

This defeats the purpose of having a unified self-hosted solution.

Proposed Solution

Add native/kernel WireGuard support to Newt, similar to how Tailscale offers both userspace and kernel modes:

  1. --native or --kernel flag that uses the system's WireGuard kernel module instead of userspace netstack
  2. Maintain Pangolin integration - keep the control plane communication, automatic peer configuration, and private resource management
  3. Site-to-site routing through kernel networking stack for proper subnet gateway functionality (related to Inability to Forward Traffic on OpenWrt When Using --accept-clients #1370)

Benefits

  • Near line-speed performance for all traffic
  • True Tailscale replacement with full site-to-site networking
  • Single service to manage instead of multiple VPN solution

Environment

  • Multiple Proxmox hosts
  • Docker containers (Emby, NFS, etc.)
  • Currently using: Pangolin + native WireGuard + Tailscale (want to consolidate)

I noticed there's a --native / USE_NATIVE_INTERFACE flag in the code - is this intended for this purpose? If so, documentation would be helpful.

Thank you for this great project!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions