Back to updates
New releaseAug 20, 2026

radmin-vpn-linux v1.1.0

Run Radmin VPN on Linux via Wine — custom driver, TAP bridge, zero packet loss

Share

Radmin VPN for Linux

Run Radmin VPN on Linux via Wine. Join VPN networks, see peers, play games — all without a Windows VM.

I did not build this because it was easier than a VM. I built it because I thought it was easier than a VM.

AI-assisted code. Built collaboratively between a human and Claude (Anthropic). The driver, hooks, and bridge were written with extensive AI-assisted reverse engineering of Radmin VPN's undocumented driver protocol using Ghidra. This works, but comes with no guarantees. Not affiliated with Famatech. Radmin VPN is proprietary — download it yourself from radmin-vpn.com. Use at your own risk.

How it works

Radmin VPN's Windows service talks to an NDIS miniport driver for its virtual network adapter. Wine doesn't support NDIS, so we replace the driver with our own implementation that bridges to a Linux TAP device. A hook DLL handles Wine compatibility issues (adapter naming, registry permissions). The result is a fully functional Radmin VPN client running natively under Wine.

Linux app ← TAP (radminvpn0) ← tap_bridge ← FIFO ← rvpnnetmp.sys (Wine driver) ← RvControlSvc.exe

Grab RadminVPN-Linux-x86_64.AppImage from the latest release. Nothing to install — Wine is bundled.

Release candidates (e.g. v1.0.0-rc1) are published as GitHub pre-releases. The latest link above always points to the newest stable build, so pre-releases won't appear there — grab those from the full releases list.

chmod +x RadminVPN-Linux-x86_64.AppImage
./RadminVPN-Linux-x86_64.AppImage

On first launch it downloads the Radmin VPN installer it is validated against (or pass your own with --installer). A terminal opens with progress, and one sudo password prompt is needed for TAP setup.

Persistent state (wineprefix, MAC, logs) lives in ~/.local/share/radmin-vpn-linux/.

Radmin closing by itself? Its own updater is installing a newer build inside the running prefix. Do the upgrade in a controlled way instead — it keeps your prefix and your Radmin ID:

./RadminVPN-Linux-x86_64.AppImage --update

Then turn off "Automatic updates" in the Radmin settings so it stops trying. Details in Radmin's own auto-updater.

Prerequisites (source build / non-AppImage)

  • Wine >= 11.0 (tested on Wine 11.5 Arch Linux and on Wine 11.6 Ubuntu 24.04)
  • mingw-w64 cross-compilers (i686-w64-mingw32-gcc, x86_64-w64-mingw32-gcc) — for building from source
  • iconv (glibc) — for service log parsing
  • sudo access — for TAP device creation and routing
  • TUN/TAP kernel support — usually built-in, check with modprobe tun
  • Radmin VPN installer — downloaded automatically if absent. The version this project is validated against is pinned in one place, RADMIN_VERSION in lib.sh (currently 2.1.4951.1; 2.0.4899.9 also works). Radmin VPN 1.4 is not supported — it registers and opens the adapter but never finishes connecting under the Wine shim, leaving the GUI stuck at "Connecting...".

Arch Linux

sudo pacman -S wine mingw-w64-gcc

Ubuntu/Debian

sudo apt install wine64 wine32 gcc-mingw-w64

Source quick start

git clone https://github.com/baptisterajaut/radmin-vpn-linux.git
cd radmin-vpn-linux

# Option A: download pre-built binaries from GitHub Releases
mkdir -p build
TAG=$(curl -sI https://github.com/baptisterajaut/radmin-vpn-linux/releases/latest | grep -i location | grep -oP 'v[\d.]+')
curl -sL "https://github.com/baptisterajaut/radmin-vpn-linux/releases/download/${TAG}/radmin-vpn-linux-${TAG}.tar.gz" \
  | tar xz -C build/

# Option B: build from source
make

# Download Radmin VPN installer from https://www.radmin-vpn.com/
./run.sh --installer ~/Downloads/Radmin_VPN_*.exe

On subsequent runs, just:

./run.sh

Command-line flags

FlagDescription
--installer <path>Path to the Radmin_VPN_*.exe installer (first run only).
--no-uiRun the service without launching the Radmin GUI.
--updateUpgrade Radmin to the pinned version in place. Keeps the prefix, so the RID registered with Famatech survives.
--no-broadcast-routesDon't add the broadcast/multicast → TAP routes.
--filter-uiLaunch the optional GTK4 packet-filter UI (off by default).
--fix-chatPatch Qt's qwindows.dll to fix the chat-window crash under Wine (off by default).

Radmin's own auto-updater

Radmin's GUI can download a newer build and run its installer inside the live prefix, which kills the GUI and faults the running service (the GUI log then shows an installer under AppData\\Local\\Temp). Two defences: the launcher ships the current validated build so the updater has nothing to push, and a GUI that dies no longer takes the tunnel with it — it is restarted once, then the VPN keeps running headless. To upgrade deliberately, use ./run.sh --update, which stops everything first. Turning off "Automatic updates" in the GUI settings avoids the race entirely.

Both --filter-ui and --fix-chat are opt-in. The filter UI needs the rvpn_filter_ui binary (built by make); the chat fix needs patch_qwindows_font.py and a Python 3 interpreter.

Headless / server modes

Two extra launchers run Radmin VPN without a local desktop — for a VPS or datacenter host. Both install and configure exactly like run.sh (same wineprefix, same --installer first-run flow, same TAP bridge); they only differ in how the GUI is reached.

run_datacenter.sh — GUI over the browser

Runs the real Radmin GUI on a virtual display (Xvfb) and serves it through VNC + noVNC, so you can configure your networks from a browser and then leave it running.

sudo apt install -y xvfb x11vnc websockify novnc   # or: make install-datacenter-deps
./run_datacenter.sh --installer ~/Downloads/Radmin_VPN_*.exe
FlagDefaultDescription
--vnc-port <n>5900Port for the x11vnc server.
--web-port <n>6080Port for the noVNC web endpoint.
--vnc-password <pw>(none)Password for the VNC / web session.
--web-bind <addr>127.0.0.1Address noVNC listens on.

By default noVNC binds to 127.0.0.1, so it's only reachable through an SSH tunnel:

ssh -L 6080:localhost:6080 your-vps    # then open http://localhost:6080/vnc.html

To expose it publicly, pass --web-bind 0.0.0.0 together with --vnc-password — otherwise anyone who reaches the web port lands on an unauthenticated, root-capable desktop. The script prints a loud warning if you bind publicly without a password.

run_vps.sh — service only, fixed GUID

Starts the service headless with a hardcoded TAP GUID (no Wine WMI required) and no GUI at all. If a custom network enumerator (rv_net_enum.exe, not shipped in this repo) is present one directory up, it is launched; otherwise the service just runs until you Ctrl+C. Only --installer is accepted.

./run_vps.sh --installer ~/Downloads/Radmin_VPN_*.exe

Building from source

Requires mingw-w64 cross-compilers. Pre-built binaries are available from Releases (built by CI on each tagged version) if you don't want to install mingw.

make          # build everything to build/
make clean    # remove build artifacts

Categories