
radmin-vpn-linux v1.0.0
شغّل Radmin VPN على Linux عبر Wine — برنامج تشغيل مخصص، جسر TAP، صفر فقدان للحزم
رادمين VPN لنظام لينكس
شغّل رادمين VPN على لينكس عبر Wine. انضم إلى شبكات VPN، وشاهد الأقران، والعب الألعاب — كل ذلك دون الحاجة إلى جهاز افتراضي بنظام ويندوز.
لم أبنِ هذا لأنه كان أسهل من جهاز افتراضي. بل بنيته لأنني اعتقدت أنه أسهل من جهاز افتراضي.
كود بمساعدة الذكاء الاصطناعي. بُني بالتعاون بين إنسان وClaude (Anthropic). كُتب السائق والخطافات والجسر بمساعدة واسعة من الذكاء الاصطناعي في الهندسة العكسية لبروتوكول سائق رادمين VPN غير الموثّق باستخدام Ghidra. هذا يعمل، لكن دون أي ضمانات. غير مرتبط بشركة Famatech. رادمين VPN برنامج مملوك — نزّله بنفسك من radmin-vpn.com. استخدمه على مسؤوليتك الخاصة.
كيف يعمل
تتحدث خدمة رادمين VPN الخاصة بنظام ويندوز مع سائق NDIS miniport الخاص بمحول الشبكة الافتراضي. لا يدعم Wine تقنية NDIS، لذا نستبدل السائق بتنفيذنا الخاص الذي يجسر إلى جهاز TAP في لينكس. تتعامل مكتبة DLL للخطاف مع مشاكل توافق Wine (تسمية المحول، صلاحيات السجل). والنتيجة هي عميل رادمين VPN كامل الوظائف يعمل بشكل أصلي تحت Wine.
Linux app ← TAP (radminvpn0) ← tap_bridge ← FIFO ← rvpnnetmp.sys (Wine driver) ← RvControlSvc.exe
بدء سريع (AppImage، موصى به)
احصل على RadminVPN-Linux-x86_64.AppImage من أحدث إصدار. لا حاجة لتثبيت أي شيء — Wine مدمج.
الإصدارات المرشّحة (مثل
v1.0.0-rc1) تُنشر كـ إصدارات مسبقة على GitHub. يشير رابطlatestأعلاه دائمًا إلى أحدث بناء مستقر، لذا لن تظهر الإصدارات المسبقة هناك — احصل عليها من قائمة الإصدارات الكاملة.
chmod +x RadminVPN-Linux-x86_64.AppImage
./RadminVPN-Linux-x86_64.AppImage
عند أول تشغيل سيطلب مثبّت رادمين VPN (نزّل Radmin_VPN_*.exe من radmin-vpn.com أولًا). سيُفتح طرفية تعرض التقدم، وستُطلب كلمة مرور sudo مرة واحدة لإعداد TAP.
توجد الحالة الدائمة (wineprefix، عنوان MAC، السجلات) في ~/.local/share/radmin-vpn-linux/.
المتطلبات الأساسية (بناء من المصدر / غير AppImage)
- Wine >= 11.0 (اختُبر على Wine 11.5 في Arch Linux وعلى Wine 11.6 في Ubuntu 24.04)
- مترجمات mingw-w64 المتقاطعة (
i686-w64-mingw32-gcc,x86_64-w64-mingw32-gcc) — للبناء من المصدر - iconv (glibc) — لتحليل سجلات الخدمة
- وصول sudo — لإنشاء جهاز TAP والتوجيه
- دعم النواة لـ TUN/TAP — مدمج عادةً، تحقق باستخدام
modprobe tun - مثبّت رادمين VPN — نزّله من radmin-vpn.com. يجب أن يكون بناء 2.0.x (طُوّر مقابل 2.0.4899.9). رادمين VPN 1.4 غير مدعوم — فهو يسجّل ويفتح المحول لكنه لا يكمل الاتصال أبدًا تحت طبقة Wine، تاركًا الواجهة الرسومية عالقة عند "جارٍ الاتصال...".
Arch Linux
sudo pacman -S wine mingw-w64-gcc
Ubuntu/Debian
sudo apt install wine64 wine32 gcc-mingw-w64
بدء سريع من المصدر
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
في التشغيلات اللاحقة، فقط:
./run.sh
خيارات سطر الأوامر
| الخيار | الوصف |
|---|---|
--installer <path> | المسار إلى مثبّت Radmin_VPN_*.exe (لأول تشغيل فقط). |
--no-ui | تشغيل الخدمة دون إطلاق واجهة رادمين الرسومية. |
--no-broadcast-routes | عدم إضافة مسارات البث/البث المتعدد → TAP. |
--filter-ui | تشغيل واجهة فلتر الحزم GTK4 الاختيارية (معطلة افتراضيًا). |
--fix-chat | تصحيح qwindows.dll الخاصة بـ Qt لإصلاح انهيار نافذة الدردشة تحت Wine (معطل افتراضيًا). |
كل من --filter-ui و --fix-chat اختياريان. تحتاج واجهة الفلتر إلى الملف الثنائي rvpn_filter_ui
(الذي يبنيه make)؛ ويحتاج إصلاح الدردشة إلى patch_qwindows_font.py ومفسّر بايثون 3.
أوضاع بدون واجهة رسومية / الخادم
مشغّلان إضافيان يشغّلان رادمين VPN دون سطح مكتب محلي — لخادم VPS أو مضيف مركز بيانات. كلاهما يُثبّت ويُهيَّأ تمامًا مثل run.sh (نفس wineprefix، ونفس تدفق أول تشغيل مع --installer، ونفس جسر TAP)؛ يختلفان فقط في طريقة الوصول إلى الواجهة الرسومية.
run_datacenter.sh — واجهة رسومية عبر المتصفح
يشغّل واجهة رادمين الرسومية الحقيقية على شاشة افتراضية (Xvfb) ويقدّمها عبر VNC + noVNC، بحيث يمكنك إعداد شبكاتك من المتصفح ثم تتركه يعمل.
sudo apt install -y xvfb x11vnc websockify novnc # or: make install-datacenter-deps
./run_datacenter.sh --installer ~/Downloads/Radmin_VPN_*.exe
| الخيار | الافتراضي | الوصف |
|---|---|---|
--vnc-port <n> | 5900 | منفذ خادم x11vnc. |
--web-port <n> | 6080 | منفذ نقطة نهاية noVNC على الويب. |
--vnc-password <pw> | (لا شيء) | كلمة مرور جلسة VNC / الويب. |
--web-bind <addr> | 127.0.0.1 | العنوان الذي يستمع عليه noVNC. |
افتراضيًا يربط noVNC بـ 127.0.0.1، لذا لا يمكن الوصول إليه إلا عبر نفق SSH:
ssh -L 6080:localhost:6080 your-vps # then open http://localhost:6080/vnc.html
لكشفه للعموم، مرّر --web-bind 0.0.0.0 مع --vnc-password — وإلا فسيصل أي شخص إلى منفذ الويب ليجد سطح مكتب دون مصادقة وبصلاحيات الجذر. يطبع السكربت تحذيرًا صريحًا إذا ربطت العنوان للعموم دون كلمة مرور.
run_vps.sh — الخدمة فقط، GUID ثابت
يبدأ الخدمة دون واجهة مع GUID ثابت لـ TAP (لا يتطلب Wine WMI) وبدون أي واجهة رسومية. إذا وُجد عداد شبكات مخصص (rv_net_enum.exe، غير مرفق في هذا المستودع) في مجلد أعلى، فسيتم تشغيله؛ وإلا فستعمل الخدمة حتى تضغط Ctrl+C. يُقبل --installer فقط.
./run_vps.sh --installer ~/Downloads/Radmin_VPN_*.exe
البناء من المصدر
يتطلب مترجمات mingw-w64 المتقاطعة. تتوفر ملفات ثنائية مبنية مسبقًا من الإصدارات (يبنيها CI عند كل نسخة موسومة) إذا كنت لا تريد تثبيت mingw.
make # build everything to build/
make clean # remove build artifacts
ينتج:
build/rvpnnetmp.sys— سائق نواة Wine (64-bit PE)build/adapter_hook.dll— DLL خطاف (32-bit PE)build/rvpn_launcher.exe— حاقن DLL (32-bit PE)build/netsh.exe— بديل netsh (32-bit PE، يُثبَّت في SysWOW64)build/netsh64.exe— بديل netsh (64-bit PE، يُثبَّت في System32)build/drvinst.exe— كعب لا يعمل شيئًا يحل محل مثبّت سائق NDIS الحقيقي لرادمين (issue #12)build/tap_bridge— جسر TAP أصلي للينكسbuild/rvpn_dnsfix.so— طبقة LD_PRELOAD أصلية، تُحمَّل مسبقًا في الخدمة فقطbuild/rvpn_filter_ui— واجهة فلتر حزم GTK4 اختيارية (--filter-ui)
بناء الـ AppImage
make
./packaging/build-appimage.sh # → packaging/dist/RadminVPN-Linux-x86_64.AppImage
ينزّل بناء Kron4ek لـ Wine-Staging amd64-wow64 (~100 MB) وappimagetool في أول تشغيل، ويخزّنهما مؤقتًا في packaging/dist/. يتطلب curl وImageMagick (convert).
ماذا يفعل run.sh
- أول تشغيل: يثبّت رادمين VPN عبر Wine (
/VERYSILENT)، ويزيل سائق NDIS الحقيقي (غير المتوافق مع Wine)، ويسجّل سائقنا المخصص - كل تشغيل: ينشئ جهاز TAP، ويشغّل جسر TAP إلى FIFO، ويضبط سجل Wine (GUID المحول، خدمة السائق)، ويطلق خدمة رادمين VPN وواجهتها الرسومية
- عند الخروج (Ctrl+C أو إغلاق الواجهة): ينهي Wine، ويزيل جهاز TAP، وينظّف
يُخزَّن wineprefix في ./wineprefix/ (تشغيل من المصدر) أو ~/.local/share/radmin-vpn-linux/wineprefix/ (AppImage). يُنشأ عنوان MAC دائم في أول تشغيل ويُحفظ في wineprefix.
البنية
| المكوّن | الوصف |
|---|---|
rvpnnetmp.sys | سائق نواة Wine. يحاكي منفذ NDIS المصغر الخاص بـ Radmin. يتعامل مع IOCTLs (VERSION, STATUS, SETUP, PEERMAC)، وترميز/فك ترميز إطارات TLV، وقائمة انتظار IRP للإدخال/الإخراج المتداخل، وتوجيه الإطارات المستند إلى MAC لدعم عدة أقران. |
adapter_hook.dll | DLL مصاحب يُحمَّل بجانب RvControlSvc.exe. خطافات IAT: يعيد تسمية محول TAP ليطابق الاسم المتوقع من رادمين، ويعطّل RegSetKeySecurity (no-op) للالتفاف حول خلل في SCM الخاص بـ Wine حيث تفتقر الخدمات إلى SYSTEM SID. |
tap_bridge | ملف ثنائي أصلي للينكس. يمرّر إطارات الإيثرنت بين جهاز TAP والأنابيب المسماة (FIFOs) التي يقرأها/يكتبها سائق Wine. |
netsh.exe / netsh64.exe | يستبدل كعب netsh الخاص بـ Wine (32-bit في SysWOW64، 64-bit في System32). يترجم أوامر ويندوز netsh interface ip إلى أوامر لينكس ip addr/ip link عبر مرحّل قائم على الملفات، مع التحقق من العنوان قبل وصوله إلى المرحّل الجذري. |
rvpn_launcher.exe | يحقن adapter_hook.dll في عملية خدمة رادمين عبر CreateRemoteThread + LoadLibrary. |
drvinst.exe | كعب لا يعمل شيئًا يحل محل مثبّت سائق NDIS الحقيقي لرادمين. يشغّله رادمين وقت التشغيل لتحميل NetMP60_1_1_64.sys، الذي يوقف Wine 11.x عبر NdisInitializeReadWriteLock (issue #12)؛ وبما أن سائقنا يستبدل ذلك المحول بالفعل، يجب ألا يُحمَّل الحقيقي أبدًا. |
rvpn_dnsfix.so | طبقة LD_PRELOAD أصلية، تُحقن في إطلاق الخدمة فقط. تختصر الـ DNS العكسي (getnameinfo/gethostbyaddr) لعناوين IPv4/IPv6 الخاصة عند طبقة glibc. يحل رادمين PTR لكل عنوان محلي مرشح يجمعه؛ وعلى مضيف يحجب مستخدِم DNS فيه استعلامات PTR الخاصة بـ RFC1918، يتوقف ذلك لدقائق وتسجَّل الخدمة لكنها لا تصبح جاهزة أبدًا (issue #16). يصدر الاستعلام من جانب Wine في يونكس، بعيدًا عن متناول أي خطاف داخل adapter_hook.dll. |
rvpn_filter_ui | واجهة GTK4 اختيارية لفحص وتصفية الحزم العابرة للجسر. معطلة افتراضيًا؛ شغّلها عبر --filter-ui. |
استكشاف الأخطاء وإصلاحها
الواجهة عالقة عند "في انتظار المحول": السائق لا يُحمَّل. تحقق من وجود /tmp/radmin_driver.log وأن به محتوى. إذا كان فارغًا، فقد يكون تسجيل خدمة السائق مفقودًا — احذف wineprefix وأعد التشغيل.
مسجَّلة لكنها لا تصبح "جاهزة" أبدًا: تصل الخدمة إلى Registered as #… وتتوقف عند ذلك. سببان معروفان، ويُبلَّغ عنهما عبر كتلة التشخيص التي تُطبع عند انتهاء المهلة. (أ) بروكسي شفاف أو نفق بسياسة توجيه خاصة به (sing-box, clash/mihomo, v2ray…) يعترض الاتصال الصادر — فهذه البرامج ترد على مصافحة TCP محليًا، فيقرأ المقبس ESTABLISHED بينما لا يُمرَّر شيء. استبعد 26.0.0.0/8 من مساراته، و*.radminte.com أيضًا إذا كنت تستطيع الوصول إليها مباشرة. (ب) مستخدِم DNS يحجب الاستعلامات العكسية للعناوين الخاصة (غالبًا ما يكون docker0 عند 172.17.0.1 هو المحفّز المعتاد). يعالج rvpn_dnsfix.so هذا، لكنه طبقة 64-bit: نظام Wine المبني كـ old-wow64 يتجاهله. الحل البديل هناك — أضف سطرًا للعنوان إلى /etc/hosts، أو استخدم contrib/run-in-netns.sh (الذي يجعل الخدمة تصل إلى "جاهزة" لكنه يُبقي VPN داخل namespace: لا يمكن لتطبيقات المضيف الوصول إلى 26.0.0.0/8، اقرأ التحذير في ترويسة الملف).
الخدمة تموت فورًا: افحص /tmp/radmin_service.log بحثًا عن أخطاء Wine. السبب الشائع: wineprefix قديم من إصدار Wine مختلف. احذف ./wineprefix/ وأعد التشغيل.
فقدان حزم 0% مع قرين واحد، وفقدان مرتفع مع عدة أقران: كانت هذه هي الخطأ الأصلي — أُصلح بتوجيه الإطارات المستند إلى MAC في السائق. تأكد من استخدامك أحدث بناء.
أول ping بطيء (~1 ثانية): يخزّن الإصدار الأحدث عناوين MAC مؤقتًا لكل حزمة IP يراها السائق. إذا أرسل عنوان IP الهدف حزمة واحدة على الأقل بينما كان السائق يعمل، فسيكون MAC مخزَّنًا بالفعل ولن يكون هناك أي تأخير ARP. فقط الأقران الصامتون تمامًا (من لم يرسلوا أي حزمة) يحتاجون إلى حل ARP الأولي، الذي يضيف ~1 ثانية.
ألعاب الشبكة المحلية لا ترى الأقران الآخرين / "الاكتشاف التلقائي" معطل: تكتشف معظم ألعاب الشبكة المحلية بعضها البعض عبر حزم استكشاف بالبث (UDP إلى 255.255.255.255) أو بالبث المتعدد (224.0.0.0/4). على ويندوز يعلن سائق TAP الخاص برادمين عن نفسه كواجهة مفضلة لتلك التدفقات؛ أما على لينكس فعليك إخبار النواة بذلك صراحةً. يثبّت run.sh الآن مسارين إضافيين عند تشغيل VPN:
ip route append 255.255.255.255/32 dev radminvpn0 metric 0
ip route append 224.0.0.0/4 dev radminvpn0 metric 0
تأثير جانبي: ستمر mDNS / Bonjour / SSDP على شبكتك المحلية الفعلية (Chromecast, AirPrint, Sonos, أجهزة التلفاز الذكية، ...) عبر VPN أثناء تشغيله. إذا كنت تحتاج اكتشاف الشبكة المحلية ورادمين في نفس الوقت، شغّل مع --no-broadcast-routes:
./run.sh --no-broadcast-routes
المسارات مرتبطة بجهاز TAP، لذا تُزال تلقائيًا عندما يهدم run.sh الجهاز عند الخروج.
القيود المعروفة
- يمكن تشغيل نسخة واحدة فقط في كل مرة (FIFOs مشتركة في
/tmp/) - يؤثر مسار الربط المباشر
26.0.0.0/8على النظام بأكمله أثناء التشغيل (يُنظَّف عند الخروج) - تُوجَّه مسارات البث الافتراضية (
255.255.255.255/32) والبث المتعدد (224.0.0.0/4) إلى VPN — عطّلها عبر--no-broadcast-routesإذا كنت تحتاج mDNS / SSDP للشبكة المحلية في نفس الوقت - قد يكون لإصدارات Wine الأقدم (< 11.0) سلوك مختلف في الإدخال/الإخراج المتداخل يكسر السائق
ملاحظات
التفاف حول خطأ Wine. يعمل خطاف RegSetKeySecurity على الالتفاف حول قيد Wine معروف حيث لا تتلقى الخدمات SYSTEM SID (S-1-5-18). قد يُصلَح هذا في المصدر الأعلى بإصدار Wine مستقبلي.
الاعتمادات
الهندسة العكسية وطبقة Wine: @baptisterajaut.
- @ayozetr — تتبّع تعليق "يسجّل لكنه لا يصبح جاهزًا" حتى
وصل إلى استعلام DNS عكسي لعنوان خاص حجبه مستخدِم DNS الخاص بالمضيف، وأثبته بنموذج إعادة إنتاج بمكتبة libc فقط بعد استبعاد أربع نظريات خاطئة (بما فيها نظريتي)، وكتب الأصل لكل من
src/rvpn_dnsfix.cوcontrib/run-in-netns.sh. - @gringoestrangeiro — عمل استقرار لينكس: فلاتر الحزم، وذاكرة ARP المؤقتة، والتعافي من الانهيار، وأوضاع بدون واجهة ومراكز البيانات.
- @yuxiaole-bili — اكتشف أن SCM في Wine يبدأ تلقائيًا نسخة ثانية من الخدمة بلا خطاف، تتنافس مع النسخة المحقونة على المحول.
- @D1spell-tech، @Milkiway13 و كل من لصق كتلة تشخيص كاملة — مضيفان مستقلان هما ما يجعل الخطأ قابلاً للاكتشاف.
الترخيص
GPL-3.0. انظر LICENSE.
بروحه، هذا الكود في الملكية العامة — افعل به ما تشاء. GPL هنا كشبكة أمان قانونية: فهو يحمي صراحةً الهندسة العكسية لأغراض التوافق التشغيلي، وهذا ما يفعله هذا المشروع. احتياط فوق احتياط.
رادمين VPN برنامج مملوك من شركة Famatech Corp. يوفّر هذا المشروع أدوات توافق تشغيلي فقط — لا يُضمَّن أو يُوزَّع أي كود من Famatech.