Voltar às atualizações
New releaseAug 8, 2026

radmin-vpn-linux v1.0.0

Execute Radmin VPN no Linux via Wine — driver personalizado, ponte TAP, zero perda de pacotes

Compartilhar

Radmin VPN para Linux

Execute o Radmin VPN no Linux via Wine. Entre em redes VPN, veja os pares, jogue — tudo sem uma VM Windows.

Eu não construí isto porque era mais fácil que uma VM. Eu o construí porque pensei que era mais fácil que uma VM.

Código assistido por IA. Construído colaborativamente entre um humano e Claude (Anthropic). O driver, os hooks e a ponte foram escritos com extensa engenharia reversa assistida por IA do protocolo de driver não documentado do Radmin VPN usando Ghidra. Funciona, mas não oferece garantias. Sem afiliação com a Famatech. O Radmin VPN é proprietário — baixe você mesmo do radmin-vpn.com. Use por sua conta e risco.

Como funciona

O serviço Windows do Radmin VPN conversa com um driver NDIS miniport para seu adaptador de rede virtual. O Wine não suporta NDIS, então substituímos o driver por nossa própria implementação que faz ponte com um dispositivo TAP do Linux. Uma DLL de hook lida com problemas de compatibilidade do Wine (nomes de adaptadores, permissões de registro). O resultado é um cliente Radmin VPN totalmente funcional rodando nativamente sob o Wine.

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

Início rápido (AppImage, recomendado)

Baixe o RadminVPN-Linux-x86_64.AppImage do último lançamento. Nada para instalar — o Wine já vem incluído.

Candidatos a lançamento (ex.: v1.0.0-rc1) são publicados como pré-lançamentos do GitHub. O link latest acima sempre aponta para a versão estável mais recente, então pré-lançamentos não aparecerão ali — baixe-os da lista completa de lançamentos.

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

No primeiro início, ele solicitará o instalador do Radmin VPN (baixe o Radmin_VPN_*.exe do radmin-vpn.com primeiro). Um terminal abre com o progresso, e uma solicitação de senha do sudo é necessária para a configuração do TAP.

O estado persistente (wineprefix, MAC, logs) fica em ~/.local/share/radmin-vpn-linux/.

Pré-requisitos (build pela fonte / sem AppImage)

  • Wine >= 11.0 (testado no Wine 11.5 Arch Linux e no Wine 11.6 Ubuntu 24.04)
  • Compiladores cruzados mingw-w64 (i686-w64-mingw32-gcc, x86_64-w64-mingw32-gcc) — para compilar pela fonte
  • iconv (glibc) — para análise dos logs do serviço
  • Acesso ao sudo — para criação do dispositivo TAP e roteamento
  • Suporte de kernel TUN/TAP — geralmente embutido, verifique com modprobe tun
  • Instalador do Radmin VPN — baixe do radmin-vpn.com. Deve ser um build 2.0.x (desenvolvido contra o 2.0.4899.9). O Radmin VPN 1.4 não é suportado — ele registra e abre o adaptador, mas nunca termina de conectar sob o shim do Wine, deixando a GUI presa em "Connecting...".

Arch Linux

sudo pacman -S wine mingw-w64-gcc

Ubuntu/Debian

sudo apt install wine64 wine32 gcc-mingw-w64

Início rápido pela fonte

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

Nas execuções seguintes, apenas:

./run.sh

Flags de linha de comando

FlagDescrição
--installer <path>Caminho para o instalador Radmin_VPN_*.exe (apenas na primeira execução).
--no-uiExecuta o serviço sem abrir a GUI do Radmin.
--no-broadcast-routesNão adiciona as rotas de broadcast/multicast → TAP.
--filter-uiInicia a UI opcional de filtro de pacotes GTK4 (desativada por padrão).
--fix-chatAplica patch no qwindows.dll do Qt para corrigir o crash da janela de chat sob o Wine (desativado por padrão).

Ambos --filter-ui e --fix-chat são opt-in. A UI de filtro precisa do binário rvpn_filter_ui (construído pelo make); a correção do chat precisa de patch_qwindows_font.py e de um interpretador Python 3.

Modos headless / servidor

Dois lançadores extras executam o Radmin VPN sem uma área de trabalho local — para um VPS ou host de datacenter. Ambos instalam e configuram exatamente como o run.sh (mesmo wineprefix, mesmo fluxo de primeira execução com --installer, mesma ponte TAP); eles só diferem em como a GUI é acessada.

run_datacenter.sh — GUI pelo navegador

Executa a GUI real do Radmin em um display virtual (Xvfb) e a serve via VNC + noVNC, para que você possa configurar suas redes pelo navegador e depois deixá-la rodando.

sudo apt install -y xvfb x11vnc websockify novnc   # or: make install-datacenter-deps
./run_datacenter.sh --installer ~/Downloads/Radmin_VPN_*.exe
FlagPadrãoDescrição
--vnc-port <n>5900Porta do servidor x11vnc.
--web-port <n>6080Porta do endpoint web noVNC.
--vnc-password <pw>(nenhuma)Senha da sessão VNC / web.
--web-bind <addr>127.0.0.1Endereço no qual o noVNC escuta.

Por padrão, o noVNC faz bind em 127.0.0.1, então só é acessível por um túnel SSH:

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

Para expô-lo publicamente, passe --web-bind 0.0.0.0 junto com --vnc-password — caso contrário, qualquer pessoa que alcançar a porta web cairá em uma área de trabalho não autenticada com poderes de root. O script imprime um aviso bem visível se você fizer bind público sem senha.

run_vps.sh — apenas serviço, GUID fixo

Inicia o serviço headless com um GUID TAP fixo no código (sem necessidade de Wine WMI) e nenhuma GUI. Se um enumerador de rede personalizado (rv_net_enum.exe, não incluído neste repositório) estiver presente um diretório acima, ele é iniciado; caso contrário, o serviço apenas roda até você pressionar Ctrl+C. Apenas --installer é aceito.

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

Compilando pela fonte

Requer compiladores cruzados mingw-w64. Binários pré-compilados estão disponíveis nas Releases (compilados pela CI em cada versão etiquetada) se você não quiser instalar o mingw.

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

Produz:

  • build/rvpnnetmp.sys — driver de kernel do Wine (PE 64 bits)
  • build/adapter_hook.dll — DLL de hook (PE 32 bits)
  • build/rvpn_launcher.exe — injetor de DLL (PE 32 bits)
  • build/netsh.exe — substituto do netsh (PE 32 bits, instalado em SysWOW64)
  • build/netsh64.exe — substituto do netsh (PE 64 bits, instalado em System32)
  • build/drvinst.exe — stub no-op substituindo o instalador real do driver NDIS do Radmin (issue #12)
  • build/tap_bridge — ponte TAP nativa do Linux
  • build/rvpn_dnsfix.so — shim nativo LD_PRELOAD, pré-carregado apenas no serviço
  • build/rvpn_filter_ui — UI opcional de filtro de pacotes GTK4 (--filter-ui)

Compilando o AppImage

make
./packaging/build-appimage.sh       # → packaging/dist/RadminVPN-Linux-x86_64.AppImage

Baixa o build Kron4ek Wine-Staging amd64-wow64 (~100 MB) e o appimagetool na primeira execução, armazenando ambos em packaging/dist/. Requer curl e ImageMagick (convert).

O que o run.sh faz

  1. Primeira execução: instala o Radmin VPN via Wine (/VERYSILENT), remove o driver NDIS real (incompatível com o Wine), registra nosso driver personalizado
  2. Toda execução: cria um dispositivo TAP, inicia a ponte TAP-para-FIFO, configura o registro do Wine (GUID do adaptador, serviço do driver), inicia o serviço e a GUI do Radmin VPN
  3. Ao sair (Ctrl+C ou fechar a GUI): encerra o Wine, remove o dispositivo TAP, limpa tudo

O wineprefix é armazenado em ./wineprefix/ (execução pela fonte) ou ~/.local/share/radmin-vpn-linux/wineprefix/ (AppImage). Um endereço MAC persistente é gerado na primeira execução e salvo no wineprefix.

Arquitetura

ComponenteDescrição
rvpnnetmp.sysDriver de kernel do Wine. Emula o miniport NDIS do Radmin. Trata IOCTLs (VERSION, STATUS, SETUP, PEERMAC), codificação/decodificação de quadros TLV, fila de IRP para I/O sobreposto, roteamento de quadros baseado em MAC para suporte a múltiplos pares.
adapter_hook.dllDLL companheira carregada junto com o RvControlSvc.exe. Hooks de IAT: renomeia o adaptador TAP para corresponder ao nome esperado pelo Radmin, transforma RegSetKeySecurity em no-op para contornar um bug do SCM do Wine em que os serviços não têm o SID SYSTEM.
tap_bridgeBinário nativo do Linux. Retransmite quadros ethernet entre o dispositivo TAP e pipes nomeados (FIFOs) que o driver do Wine lê/grava.
netsh.exe / netsh64.exeSubstitui o stub do netsh do Wine (32 bits em SysWOW64, 64 bits em System32). Traduz comandos Windows netsh interface ip para comandos Linux ip addr/ip link via um relay baseado em arquivo, validando o endereço antes que ele chegue ao relay root.
rvpn_launcher.exeInjeta adapter_hook.dll no processo do serviço do Radmin via CreateRemoteThread + LoadLibrary.
drvinst.exeStub no-op substituindo o instalador real do driver NDIS do Radmin. O Radmin o executa em tempo de execução para carregar NetMP60_1_1_64.sys, que aborta o Wine 11.x via NdisInitializeReadWriteLock (issue #12); como nosso driver já substitui esse adaptador, o real nunca deve ser carregado.
rvpn_dnsfix.soShim nativo LD_PRELOAD, injetado apenas na inicialização do serviço. Interrompe a resolução reversa de DNS (getnameinfo/gethostbyaddr) de IPv4/IPv6 privados na camada glibc. O Radmin resolve PTR para cada endereço candidato local que coleta; em um host cujo resolvedor anula consultas PTR RFC1918, isso trava por minutos e o serviço registra mas nunca fica pronto (issue #16). A consulta é emitida pelo lado Unix do Wine, fora do alcance de qualquer hook dentro de adapter_hook.dll.
rvpn_filter_uiUI opcional GTK4 para inspecionar e filtrar os pacotes que cruzam a ponte. Desativada por padrão; inicie com --filter-ui.

Solução de problemas

GUI presa em "Waiting for adapter": o driver não está carregando. Verifique se /tmp/radmin_driver.log existe e tem conteúdo. Se estiver vazio, o registro do serviço do driver pode estar faltando — delete o wineprefix e execute novamente.

Registrado mas nunca "ready": o serviço chega a Registered as #… e para ali. Duas causas conhecidas, ambas reportadas pelo bloco de diagnóstico impresso no timeout. (a) Um proxy transparente ou túnel com sua própria política de roteamento (sing-box, clash/mihomo, v2ray…) interceptando a conexão de saída — tais stacks respondem ao handshake TCP localmente, então o socket lê ESTABLISHED enquanto nada é retransmitido. Exclua 26.0.0.0/8 de suas rotas, e *.radminte.com também se você conseguir alcançá-los diretamente. (b) Um resolvedor que anula consultas reversas de endereços privados (um docker0 em 172.17.0.1 é o gatilho usual). O rvpn_dnsfix.so resolve isso, mas é um shim de 64 bits: um Wine de sistema compilado como old-wow64 o ignora. Solução alternativa — adicione uma linha para o endereço em /etc/hosts, ou use contrib/run-in-netns.sh (que leva o serviço a "ready" mas mantém a VPN dentro de um namespace: aplicativos do host não conseguem alcançar 26.0.0.0/8, leia o aviso no cabeçalho dele).

O serviço morre imediatamente: verifique /tmp/radmin_service.log para erros do Wine. Causa comum: wineprefix antigo de uma versão diferente do Wine. Delete ./wineprefix/ e execute novamente.

0% de perda de pacotes com um par, perda alta com muitos: este era o bug original — corrigido pelo roteamento de quadros baseado em MAC no driver. Certifique-se de estar usando o build mais recente.

O primeiro ping é lento (~1s): a versão mais recente armazena em cache os endereços MAC para cada pacote IP que o driver vê. Se o IP de destino enviou pelo menos um pacote enquanto o driver estava rodando, o MAC já está no cache e não há atraso de ARP. Apenas pares completamente silenciosos (aqueles que nunca enviaram um pacote) exigem a resolução ARP inicial, que adiciona ~1 segundo.

Jogos de LAN não veem outros pares / "auto-discovery" quebrado: a maioria dos jogos de LAN se descobre com sondas de broadcast (UDP para 255.255.255.255) ou multicast (224.0.0.0/4). No Windows, o driver TAP do Radmin se anuncia como a interface preferida para esses fluxos; no Linux, você precisa dizer ao kernel explicitamente. O run.sh agora instala duas rotas extras quando a VPN sobe:

ip route append 255.255.255.255/32 dev radminvpn0 metric 0
ip route append 224.0.0.0/4        dev radminvpn0 metric 0

Efeito colateral: mDNS / Bonjour / SSDP na sua LAN física (Chromecast, AirPrint, Sonos, smart TVs, ...) passarão pela VPN enquanto ela estiver ativa. Se você precisar de descoberta na LAN local e do Radmin em paralelo, execute com --no-broadcast-routes:

./run.sh --no-broadcast-routes

As rotas são limitadas ao dispositivo TAP, então são removidas automaticamente quando o run.sh derruba o dispositivo ao sair.

Limitações conhecidas

  • Apenas uma instância pode rodar por vez (FIFOs compartilhados em /tmp/)
  • A rota on-link 26.0.0.0/8 afeta todo o sistema enquanto estiver em execução (limpa ao sair)
  • As rotas padrão de broadcast (255.255.255.255/32) e multicast (224.0.0.0/4) são direcionadas para a VPN — desative com --no-broadcast-routes se precisar de mDNS / SSDP na LAN local em paralelo
  • Versões mais antigas do Wine (< 11.0) podem ter comportamento diferente de I/O sobreposto que quebra o driver

Notas

Solução de contorno para bug do Wine. O hook RegSetKeySecurity contorna uma limitação conhecida do Wine em que os serviços não recebem o SID SYSTEM (S-1-5-18). Isso pode ser corrigido upstream em uma futura versão do Wine.

Créditos

Engenharia reversa e o shim do Wine: @baptisterajaut.

  • @ayozetr — rastreou o travamento "registra mas nunca fica pronto" até uma consulta reversa de DNS de um endereço privado anulada pelo resolvedor do host, provou com um repro de libc pura depois que quatro teorias erradas foram descartadas (incluindo a minha), e escreveu o original de src/rvpn_dnsfix.c e contrib/run-in-netns.sh.
  • @gringoestrangeiro — trabalho de estabilidade no Linux: filtros de pacotes, cache ARP, recuperação de crash, modos headless e datacenter.
  • @yuxiaole-bili — descobriu que o SCM do Wine inicia automaticamente uma segunda instância do serviço sem hook que disputa o adaptador com a instância injetada.
  • @D1spell-tech, @Milkiway13 e todos que colaram um bloco de diagnóstico completo — dois hosts independentes é o que torna um bug encontrável.

Licença

GPL-3.0. Veja LICENSE.

Em espírito, este código é domínio público — faça o que quiser com ele. A GPL está aqui como uma rede de segurança legal: ela protege explicitamente a engenharia reversa para interoperabilidade, que é o que este projeto faz. Cinto e suspensórios.

O Radmin VPN é um software proprietário da Famatech Corp. Este projeto fornece apenas ferramentas de interoperabilidade — nenhum código da Famatech é incluído ou distribuído.

Categorias