
radmin-vpn-linux v1.0.0-rc8
Radmin VPN unter Linux mit Wine ausführen — eigener Treiber, TAP-Brücke, null Paketverlust
Radmin VPN für Linux
Führen Sie Radmin VPN unter Linux über Wine aus. Treten Sie VPN-Netzwerken bei, sehen Sie Peers, spielen Sie Spiele – ganz ohne Windows-VM.
Ich habe das nicht gebaut, weil es einfacher als eine VM war. Ich habe es gebaut, weil ich dachte, es sei einfacher als eine VM.
KI-gestützter Code. Gemeinsam von einem Menschen und Claude (Anthropic) entwickelt. Der Treiber, die Hooks und die Brücke wurden mit umfangreicher KI-gestützter Reverse Engineering des undokumentierten Treiberprotokolls von Radmin VPN unter Verwendung von Ghidra geschrieben. Das funktioniert, kommt aber ohne Garantien. Nicht mit Famatech verbunden. Radmin VPN ist proprietär – laden Sie es selbst von radmin-vpn.com herunter. Nutzung auf eigene Gefahr.
So funktioniert es
Der Windows-Dienst von Radmin VPN kommuniziert mit einem NDIS-Miniport-Treiber für seinen virtuellen Netzwerkadapter. Wine unterstützt kein NDIS, daher ersetzen wir den Treiber durch unsere eigene Implementierung, die eine Brücke zu einem Linux-TAP-Gerät herstellt. Eine Hook-DLL behebt Wine-Kompatibilitätsprobleme (Adapterbenennung, Registrierungsberechtigungen). Das Ergebnis ist ein voll funktionsfähiger Radmin-VPN-Client, der nativ unter Wine läuft.
Linux-App ← TAP (radminvpn0) ← tap_bridge ← FIFO ← rvpnnetmp.sys (Wine-Treiber) ← RvControlSvc.exe
Schnellstart (AppImage, empfohlen)
Holen Sie sich RadminVPN-Linux-x86_64.AppImage vom neuesten Release. Nichts zu installieren – Wine ist enthalten.
Release-Kandidaten (z. B.
v1.0.0-rc1) werden als GitHub-Pre-Releases veröffentlicht. Derlatest-Link oben zeigt immer auf den neuesten stabilen Build, daher erscheinen Pre-Releases dort nicht – holen Sie diese aus der vollständigen Release-Liste.
chmod +x RadminVPN-Linux-x86_64.AppImage
./RadminVPN-Linux-x86_64.AppImage
Beim ersten Start wird das Radmin-VPN-Installationsprogramm heruntergeladen, gegen das es validiert wurde (oder übergeben Sie Ihr eigenes mit --installer). Ein Terminal öffnet sich mit Fortschrittsanzeige, und eine sudo-Passwortabfrage ist für die TAP-Einrichtung erforderlich.
Der dauerhafte Zustand (wineprefix, MAC, Logs) befindet sich in ~/.local/share/radmin-vpn-linux/.
Radmin schließt sich von selbst? Sein eigener Updater installiert einen neueren Build im laufenden Prefix. Führen Sie das Upgrade stattdessen kontrolliert durch – es behält Ihr Prefix und Ihre Radmin-ID:
./RadminVPN-Linux-x86_64.AppImage --updateDeaktivieren Sie dann „Automatische Updates" in den Radmin-Einstellungen, damit es nicht erneut versucht. Details in Radmins eigenem Auto-Updater.
Voraussetzungen (Quellcode-Build / Nicht-AppImage)
- Wine >= 11.0 (getestet mit Wine 11.5 auf Arch Linux und Wine 11.6 auf Ubuntu 24.04)
- mingw-w64-Cross-Compiler (
i686-w64-mingw32-gcc,x86_64-w64-mingw32-gcc) – für den Build aus dem Quellcode - iconv (glibc) – für die Dienst-Log-Analyse
- sudo-Zugriff – für die TAP-Geräteerstellung und das Routing
- TUN/TAP-Kernelunterstützung – normalerweise integriert, prüfen Sie mit
modprobe tun - Radmin-VPN-Installationsprogramm – wird automatisch heruntergeladen, falls nicht vorhanden. Die Version, gegen die dieses Projekt validiert wird, ist an einer Stelle festgelegt:
RADMIN_VERSIONinlib.sh(derzeit 2.1.4951.1; 2.0.4899.9 funktioniert ebenfalls). Radmin VPN 1.4 wird nicht unterstützt – es registriert und öffnet den Adapter, schließt die Verbindung unter dem Wine-Shim jedoch nie ab, sodass die GUI bei „Verbinden..." hängen bleibt.
Arch Linux
sudo pacman -S wine mingw-w64-gcc
Ubuntu/Debian
sudo apt install wine64 wine32 gcc-mingw-w64
Schnellstart aus dem Quellcode
git clone https://github.com/baptisterajaut/radmin-vpn-linux.git
cd radmin-vpn-linux
# Option A: Vorgefertigte Binärdateien von GitHub Releases herunterladen
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: Aus dem Quellcode bauen
make
# Radmin-VPN-Installationsprogramm von https://www.radmin-vpn.com/ herunterladen
./run.sh --installer ~/Downloads/Radmin_VPN_*.exe
Bei späteren Ausführungen einfach:
./run.sh
Befehlszeilenoptionen
| Flag | Beschreibung |
|---|---|
--installer <path> | Pfad zum Radmin_VPN_*.exe-Installationsprogramm (nur beim ersten Lauf). |
--no-ui | Dienst ohne Start der Radmin-GUI ausführen. |
--update | Radmin an Ort und Stelle auf die festgelegte Version aktualisieren. Behält das Prefix, sodass die bei Famatech registrierte RID erhalten bleibt. |
--no-broadcast-routes | Die Broadcast/Multicast-→-TAP-Routen nicht hinzufügen. |
--filter-ui | Die optionale GTK4-Paketfilter-Oberfläche starten (standardmäßig deaktiviert). |
--fix-chat | qwindows.dll von Qt patchen, um den Chat-Fenster-Absturz unter Wine zu beheben (standardmäßig deaktiviert). |
Radmins eigener Auto-Updater
Die Radmin-GUI kann einen neueren Build herunterladen und sein Installationsprogramm im laufenden Prefix ausführen,
was die GUI beendet und den laufenden Dienst zum Absturz bringt (das GUI-Log zeigt dann ein Installationsprogramm
unter AppData\\Local\\Temp). Zwei Verteidigungslinien: Der Launcher liefert den aktuell validierten
Build, sodass der Updater nichts zu pushen hat, und eine GUI, die stirbt, nimmt den Tunnel nicht mehr
mit – sie wird einmal neu gestartet, dann läuft das VPN headless weiter. Für ein bewusstes
Upgrade verwenden Sie ./run.sh --update, das zuerst alles stoppt. Das Deaktivieren von
„Automatische Updates" in den GUI-Einstellungen vermeidet das Wettrennen vollständig.
Sowohl --filter-ui als auch --fix-chat sind optional. Die Filter-Oberfläche benötigt die rvpn_filter_ui-Binärdatei
(von make erstellt); der Chat-Fix benötigt patch_qwindows_font.py und einen Python-3-Interpreter.
Headless-/Server-Modi
Zwei zusätzliche Launcher führen Radmin VPN ohne lokalen Desktop aus – für einen VPS oder einen Rechenzentrums-Host. Beide installieren und konfigurieren genau wie run.sh (gleiches wineprefix, gleicher --installer-Erstlauf-Ablauf, gleiche TAP-Brücke); sie unterscheiden sich nur darin, wie die GUI erreicht wird.
run_datacenter.sh – GUI über den Browser
Führt die echte Radmin-GUI auf einem virtuellen Display (Xvfb) aus und stellt sie über VNC + noVNC bereit, sodass Sie Ihre Netzwerke über einen Browser konfigurieren und dann laufen lassen können.
sudo apt install -y xvfb x11vnc websockify novnc # oder: make install-datacenter-deps
./run_datacenter.sh --installer ~/Downloads/Radmin_VPN_*.exe
| Flag | Standard | Beschreibung |
|---|---|---|
--vnc-port <n> | 5900 | Port für den x11vnc-Server. |
--web-port <n> | 6080 | Port für den noVNC-Web-Endpunkt. |
--vnc-password <pw> | (keiner) | Passwort für die VNC-/Web-Sitzung. |
--web-bind <addr> | 127.0.0.1 | Adresse, auf der noVNC lauscht. |
Standardmäßig bindet noVNC an 127.0.0.1, ist also nur über einen SSH-Tunnel erreichbar:
ssh -L 6080:localhost:6080 your-vps # dann http://localhost:6080/vnc.html öffnen
Um es öffentlich zugänglich zu machen, übergeben Sie --web-bind 0.0.0.0 zusammen mit --vnc-password – andernfalls landet jeder, der den Web-Port erreicht, auf einem unauthentifizierten, root-fähigen Desktop. Das Skript gibt eine deutliche Warnung aus, wenn Sie öffentlich ohne Passwort binden.
run_vps.sh – nur Dienst, feste GUID
Startet den Dienst headless mit einer fest codierten TAP-GUID (kein Wine-WMI erforderlich) und überhaupt keiner GUI. Wenn ein benutzerdefinierter Netzwerk-Enumerator (rv_net_enum.exe, nicht in diesem Repository enthalten) ein Verzeichnis höher vorhanden ist, wird er gestartet; andernfalls läuft der Dienst einfach, bis Sie Strg+C drücken. Nur --installer wird akzeptiert.
./run_vps.sh --installer ~/Downloads/Radmin_VPN_*.exe
Build aus dem Quellcode
Erfordert mingw-w64-Cross-Compiler. Vorgefertigte Binärdateien sind von Releases verfügbar (von CI bei jeder getaggten Version erstellt), falls Sie mingw nicht installieren möchten.
make # alles nach build/ bauen
make clean # Build-Artefakte entfernen
Erzeugt:
build/rvpnnetmp.sys– Wine-Kernel-Treiber (64-Bit-PE)build/adapter_hook.dll– Hook-DLL (32-Bit-PE)build/rvpn_launcher.exe– DLL-Injektor (32-Bit-PE)build/netsh.exe– netsh-Ersatz (32-Bit-PE, installiert nach SysWOW64)build/netsh64.exe– netsh-Ersatz (64-Bit-PE, installiert nach System32)build/drvinst.exe– No-op-Stub, der Radmins echten NDIS-Treiberinstaller ersetzt (Issue #12)build/tap_bridge– native Linux-TAP-Brückebuild/rvpn_dnsfix.so– nativer LD_PRELOAD-Shim, nur in den Dienst vorgeladenbuild/rvpn_reuseport.so– nativer LD_PRELOAD-Shim, inwineservervorgeladenbuild/rvpn_filter_ui– optionale GTK4-Paketfilter-Oberfläche (--filter-ui)
AppImage bauen
make
./packaging/build-appimage.sh # → packaging/dist/RadminVPN-Linux-x86_64.AppImage
Lädt den Kron4ek-Wine-Staging-amd64-wow64-Build (~100 MB) und appimagetool beim ersten Lauf herunter und cached beide in packaging/dist/. Erfordert curl und ImageMagick (convert).
Was run.sh tut
- Erster Lauf: Installiert Radmin VPN über Wine (
/VERYSILENT), entfernt den echten NDIS-Treiber (mit Wine inkompatibel), registriert unseren benutzerdefinierten Treiber - Jeder Lauf: Erstellt ein TAP-Gerät, startet die TAP-zu-FIFO-Brücke, konfiguriert die Wine-Registrierung (Adapter-GUID, Treiberdienst), startet den Radmin-VPN-Dienst und die GUI
- Beim Beenden (Strg+C oder GUI schließen): Beendet Wine, entfernt das TAP-Gerät, räumt auf
Das wineprefix wird in ./wineprefix/ (Quellcode-Lauf) oder ~/.local/share/radmin-vpn-linux/wineprefix/ (AppImage) gespeichert. Eine dauerhafte MAC-Adresse wird beim ersten Lauf generiert und im wineprefix gespeichert.
Architektur
| Komponente | Beschreibung |
|---|---|
rvpnnetmp.sys | Wine-Kernel-Treiber. Emuliert den Radmin-NDIS-Miniport. Behandelt IOCTLs (VERSION, STATUS, SETUP, PEERMAC), TLV-Frame-Kodierung/-Dekodierung, IRP-Warteschlange für überlappende E/A, MAC-basiertes Frame-Routing für Multi-Peer-Unterstützung. |
adapter_hook.dll | Begleit-DLL, die zusammen mit RvControlSvc.exe geladen wird. IAT-Hooks: Benennt den TAP-Adapter um, damit er Radmins erwartetem Namen entspricht, setzt RegSetKeySecurity auf No-op, um einen Wine-SCM-Fehler zu umgehen, bei dem Diensten die SYSTEM-SID fehlt, und beantwortet die vier Perf{Increment,Decrement}ULong{,Long}CounterValue-Lookups, die Wines advapi32 nicht exportiert. Letzteres ist nicht kosmetisch: Radmin 2.1 löst sieben perflib-Einstiegspunkte in einer Alles-oder-nichts-Kaskade auf und übergibt dann das resultierende Per-Peer-Counter-Objekt als Nutzlast des Peer-Handshakes – vier fehlende Telemetrie-Exporte legen also den gesamten Datenpfad lahm (Issue #24, docs/wine-perflib.md). |
tap_bridge | Natives Linux-Binärprogramm. Leitet Ethernet-Frames zwischen dem TAP-Gerät und benannten Pipes (FIFOs) weiter, die der Wine-Treiber liest/schreibt. |
netsh.exe / netsh64.exe | Ersetzt Wines netsh-Stub (32-Bit in SysWOW64, 64-Bit in System32). Übersetzt Windows-netsh interface ip-Befehle in Linux-ip addr/ip link-Befehle über ein dateibasiertes Relay und validiert die Adresse, bevor sie das Root-Relay erreicht. |
rvpn_launcher.exe | Injiziert adapter_hook.dll in den Radmin-Dienstprozess über CreateRemoteThread + LoadLibrary. |
drvinst.exe | No-op-Stub, der Radmins echten NDIS-Treiberinstaller ersetzt. Radmin führt ihn zur Laufzeit aus, um NetMP60_1_1_64.sys zu laden, das Wine 11.x über NdisInitializeReadWriteLock abbricht (Issue #12); da unser Treiber diesen Adapter bereits ersetzt, darf der echte niemals geladen werden. |
rvpn_dnsfix.so | Nativer LD_PRELOAD-Shim, nur in den Dienststart injiziert. Kurzschließt Reverse-DNS (getnameinfo/gethostbyaddr) privater IPv4/IPv6 auf der glibc-Ebene. Radmin führt PTR-Auflösungen für jede gesammelte lokale Kandidatenadresse durch; auf einem Host, dessen Resolver RFC1918-PTR-Abfragen blockiert, dauert das Minuten und der Dienst registriert sich, wird aber nie bereit (Issue #16). Die Abfrage wird von Wines Unix-Seite ausgeführt und ist für jeden Hook innerhalb von adapter_hook.dll unerreichbar. |
rvpn_reuseport.so | Nativer LD_PRELOAD-Shim, in wineserver vorgeladen (nicht in den Dienst – die Unix-Sockets gehören wineserver). Setzt SO_REUSEPORT auf jedem TCP-Socket bei der Erstellung. Radmin 2.1 führt TCP-Port-Reuse-NAT-Traversal durch: Es bindet einen Listener an uplink:PORT, bewirbt diese Zuordnung und bindet dann seine ausgehenden Peer-Sockets mit SO_REUSEADDR an denselben lokalen Port, was Windows erlaubt. Wine übersetzt diese Anfrage in keine Unix-Ebene-Option für TCP (server/sock.c, SO_REUSEPORT ist nur für __APPLE__ kompiliert), sodass der Kernel die zweite Bindung verweigert und der Client bei jeder Peer-Verbindung WSAEACCES sieht (Issue #24). Wineservers eigene Konfliktbuchhaltung läuft weiterhin, sodass Bindungen, die Windows verweigern würde, weiterhin verweigert werden. |
rvpn_filter_ui | Optionale GTK4-Oberfläche zum Inspizieren und Filtern der Pakete, die die Brücke überqueren. Standardmäßig deaktiviert; Start mit --filter-ui. |
Fehlerbehebung
GUI hängt bei „Warten auf Adapter": Der Treiber lädt nicht. Prüfen Sie, ob /tmp/radmin_driver.log existiert und Inhalt hat. Wenn leer, fehlt möglicherweise die Treiberdienstregistrierung – löschen Sie das wineprefix und führen Sie es erneut aus.
Registriert, aber nie „bereit": Der Dienst erreicht Registered as #… und stoppt dort. Zwei bekannte Ursachen, beide vom Diagnoseblock gemeldet, der bei Timeout gedruckt wird. (a) Ein transparenter Proxy oder Tunnel mit eigener Routing-Policy (sing-box, clash/mihomo, v2ray…), der die ausgehende Verbindung abfängt – solche Stacks beantworten den TCP-Handshake lokal, sodass der Socket ESTABLISHED liest, während nichts weitergeleitet wird. Schließen Sie 26.0.0.0/8 von seinen Routen aus und auch *.radminte.com, falls Sie diese direkt erreichen können. (b) Ein Resolver, der Reverse-Lookups privater Adressen blockiert (ein docker0 bei 172.17.0.1 ist der übliche Auslöser). rvpn_dnsfix.so behandelt dies, aber es ist ein 64-Bit-Shim: Ein System-Wine, das als old-wow64 gebaut wurde, ignoriert ihn. Workaround dort – fügen Sie eine Zeile für die Adresse zu /etc/hosts hinzu oder verwenden Sie contrib/run-in-netns.sh (das den Dienst zu „bereit" bringt, aber das VPN in einem Namespace hält: Host-Anwendungen können 26.0.0.0/8 nicht erreichen, lesen Sie die Warnung in seinem Header).
Ihre anderen Wine-Apps sind nach der Ausführung von Radmin kaputt (unimplemented function ndis.sys.NdisInitializeReadWriteLock): Versionen bis 1.0.0 ließen Wines winemenubuilder.exe laufen, das die Windows-Dateizuordnungen des Hosts (.exe, .msi, .lnk, .reg, .chm, …) neu schreibt, sodass sie in unserem Prefix geöffnet werden. Andere Windows-Programme starten dann im Radmin-Prefix, und wenn Radmins echter NDIS-Miniport (RvNetMP60) dort noch registriert ist, bricht jedes von ihnen an diesem ndis-Stub ab. 1.0.1 deaktiviert winemenubuilder überall, entfernt die Einträge, die es für ein Radmin-Prefix geschrieben hat, und entfernt RvNetMP60 offline aus system.reg – führen Sie 1.0.1 einfach einmal aus und beide werden repariert. Beachten Sie, dass echo $WINEPREFIX in dieser Situation nichts anzeigt: Die Entführung lebt in ~/.local/share/applications/*.desktop, nicht in Ihrer Umgebung. Manuelle Bereinigung, falls bevorzugt:
grep -rl 'WINEPREFIX=[^"]*radmin' ~/.local/share/applications --include='*.desktop' | xargs -r rm
rm -rf ~/.local/share/applications/wine/Programs/"Radmin VPN"
update-desktop-database ~/.local/share/applications
Online und in Ihren Netzwerken, aber kein Peer verbindet sich jemals (error: 0x700000000): Das ist Radmin 2.1 auf einem Build älter als 1.1.0. Das Dienst-Log sieht bis zu den Peer-Verbindungen gesund aus, die dann in einer Schleife mit diesem Code fehlschlagen und schließlich mit node offline aufgeben. Zwei unabhängige Wine-Lücken, beide in 1.1.0 behoben und beide oben in den Zeilen rvpn_reuseport.so und adapter_hook.dll erklärt: Wine setzt keine Unix-Ebene-Option für ein TCP-SO_REUSEADDR, sodass 2.1s Port-Reuse-NAT-Traversal bei jeder Peer-Verbindung WSAEACCES erhält; und Wines advapi32 fehlen vier perflib-Exporte, ohne die 2.1 eine Null-Nutzlast als Peer-Handshake sendet. Beachten Sie, dass der Code selbst keine Informationen trägt – es ist das generische Aufgeben am Ende der Fehlerkaskade, also versuchen Sie nicht, ein Subsystem daraus abzuleiten. Die Lösung besteht darin, dieses Projekt auf 1.1.0 zu aktualisieren; auf der Radmin-Seite muss nichts geändert werden.
Dienst stirbt sofort: Prüfen Sie /tmp/radmin_service.log auf Wine-Fehler. Häufige Ursache: altes wineprefix von einer anderen Wine-Version. Löschen Sie ./wineprefix/ und führen Sie es erneut aus.
0 % Paketverlust mit einem Peer, hoher Verlust mit vielen: Das war der ursprüngliche Fehler – behoben durch MAC-basiertes Frame-Routing im Treiber. Stellen Sie sicher, dass Sie den neuesten Build verwenden.
Erster Ping ist langsam (~1s): Die neueste Version cached MAC-Adressen für jedes IP-Paket, das der Treiber sieht. Wenn die Ziel-IP mindestens ein Paket gesendet hat, während der Treiber lief, ist die MAC bereits gecacht und es gibt keine ARP-Verzögerung. Nur völlig stille Peers (die nie ein Paket gesendet haben) erfordern die anfängliche ARP-Auflösung, die ~1 Sekunde hinzufügt.
LAN-Spiele sehen andere Peers nicht / „Auto-Discovery" kaputt: Die meisten LAN-Spiele finden sich über Broadcast-Probes (UDP an 255.255.255.255) oder Multicast (224.0.0.0/4). Unter Windows bewirbt sich der Radmin-TAP-Treiber als bevorzugte Schnittstelle für diese Flows; unter Linux müssen Sie dem Kernel dies explizit mitteilen. run.sh installiert jetzt zwei zusätzliche Routen, wenn das VPN hochkommt:
ip route append 255.255.255.255/32 dev radminvpn0 metric 0
ip route append 224.0.0.0/4 dev radminvpn0 metric 0
Nebeneffekt: mDNS / Bonjour / SSDP in Ihrem physischen LAN (Chromecast, AirPrint, Sonos, Smart-TVs, ...) laufen durch das VPN, solange es aktiv ist. Wenn Sie lokale LAN-Erkennung und Radmin parallel benötigen, führen Sie mit --no-broadcast-routes aus:
./run.sh --no-broadcast-routes
Die Routen sind auf das TAP-Gerät beschränkt und werden daher automatisch entfernt, wenn run.sh das Gerät beim Beenden abbaut.
Bekannte Einschränkungen
- Es kann nur eine Instanz gleichzeitig laufen (gemeinsame FIFOs in
/tmp/) - Die
26.0.0.0/8-On-Link-Route betrifft das gesamte System während der Ausführung (wird beim Beenden bereinigt) - Standard-Broadcast- (
255.255.255.255/32) und Multicast-Routen (224.0.0.0/4) werden zum VPN geleitet – mit--no-broadcast-routesdeaktivieren, wenn Sie lokales LAN-mDNS / SSDP parallel benötigen - Ältere Wine-Versionen (< 11.0) können ein anderes überlappendes E/A-Verhalten aufweisen, das den Treiber bricht
Hinweise
Wine-Fehler-Workaround. Der RegSetKeySecurity-Hook umgeht eine bekannte Wine-Einschränkung, bei der Dienste die SYSTEM-SID (S-1-5-18) nicht erhalten. Dies könnte in einer zukünftigen Wine-Version upstream behoben werden.
Danksagungen
Reverse Engineering und der Wine-Shim: @baptisterajaut.
- @ayozetr – hat den „registriert, aber nie bereit"-Hänger auf eine Reverse-DNS-Abfrage einer privaten Adresse zurückgeführt, die vom Host-Resolver blockiert wurde, hat es mit einem Bare-libc-Repro bewiesen, nachdem vier falsche Theorien verworfen worden waren (meine eingeschlossen), und hat das Original von
src/rvpn_dnsfix.cundcontrib/run-in-netns.shgeschrieben. - @gringoestrangeiro – Linux-Stabilitätsarbeit: Paketfilter, ARP-Cache, Crash-Recovery, Headless- und Rechenzentrumsmodi.
- @yuxiaole-bili – hat herausgefunden, dass Wines SCM automatisch eine zweite, ungehookte Dienstinstanz startet, die mit der injizierten um den Adapter kämpft.
- @D1spell-tech, @Milkiway13 und alle, die einen vollständigen Diagnoseblock eingefügt haben – zwei unabhängige Hosts sind es, die einen Fehler auffindbar machen.
Lizenz
GPL-3.0. Siehe LICENSE.
Im Geiste ist dieser Code Public Domain – tun Sie damit, was Sie wollen. Die GPL ist hier als rechtliches Sicherheitsnetz: Sie schützt ausdrücklich Reverse Engineering für Interoperabilität, was dieses Projekt tut. Gürtel und Hosenträger.
Radmin VPN ist proprietäre Software von Famatech Corp. Dieses Projekt stellt nur Interoperabilitätswerkzeuge bereit – kein Famatech-Code ist enthalten oder wird verteilt.