first commit

This commit is contained in:
wm
2026-02-04 08:38:46 +01:00
commit 58b582a9e3
8 changed files with 1966 additions and 0 deletions

File diff suppressed because it is too large Load Diff

30
KURZBESCHREIBUNG.txt Normal file
View File

@@ -0,0 +1,30 @@
WireGuard Service Installer und VPNTray - Automatisierte VPN-Lösung für Windows
================================================================================
Dieses Projekt bietet eine vollautomatische Installation und Verwaltung von
WireGuard VPN-Verbindungen unter Windows mit komfortabler Tray-Anwendung.
KOMPONENTEN:
- wireguard_service_installer.cmd: Automatisches Installationsskript
- WireGuardMon: Überwachungsdienst für WireGuard-Tunnel
- VPNTray: System-Tray-Anwendung mit Statusanzeige
- VPNTray.ini: Umfangreiche Konfigurationsdatei
FEATURES:
✓ Ein-Klick Installation mit automatischer WireGuard-Einrichtung
✓ WireGuard als Windows-Dienst mit Autostart
✓ Tray-Icon mit Echtzeit-Statusanzeige
✓ Konfigurierbare Checks: Ping, GeoIP, Speedtest
✓ Multi-Tunnel-Unterstützung (wg0, wg1, wg2, ...)
✓ Auto-Disconnect bei Firmennetzwerk-Erkennung
✓ Interaktive Elemente (RDP, Browser-Links per Klick)
✓ Anpassbare Themes (Auto, Dark, Light, Custom)
✓ Umfangreiche Variablen für LAN, VPN und GeoIP-Daten
VERWENDUNG:
wireguard_service_installer.cmd C:\Pfad\zur\config.conf
Das Skript installiert automatisch WireGuard, richtet den Dienst ein,
konfiguriert Sicherheitsberechtigungen und startet VPNTray im Autostart.
Ideal für IT-Support, Helpdesk und Remote-Arbeitsplätze!

2
README.md Normal file
View File

@@ -0,0 +1,2 @@
# Wireguard-Installer-and-Tray
Wireguard als Windows Dienst mit Trayicon für Support

BIN
VPNTray.exe Normal file

Binary file not shown.

118
VPNTray.ini Normal file
View File

@@ -0,0 +1,118 @@
# =================================================
# VPNTray Konfigurationsdatei
# =================================================
[General]
# Pfad zur Statusdatei von WireGuardMon. Default gleiches Verzeichnis wie .exe und .ini
#ITC=C:\Program Files\WireGuard\wireguardmon.itc
# Schließt die folgenden WireGuard-Dienste von der Überwachung aus.
# Disabled=wg1,wg2
# Visuelles Thema: Auto, Dark, Light, Custom
Theme=Auto
# Zeit in Sekunden, bis das Fenster automatisch schließt (0 = deaktiviert)
AutoClose=15
# AutoDisconnect=DOMAIN
# AutoDisconnect=IP:10.11.12.128/25,IP:192.168.178.0/24,DNS:mydomain.local
# Powermode Checks werden auch bei geschlossener UI ausgeführt (Traffic)
#PowerMode=0
#[Wireguardmon]
#POLL_TIME=30
#STEMP_MS=500
[Theme]
# Dieser Abschnitt wird nur bei Theme=Custom verwendet.
WindowBackgroundBrush=#FF252525
ItemCardBackgroundBrush=#FF3C3C3C
ItemHoverBackgroundBrush=#1AFFFFFF
SeparatorBrush=#FF555555
PrimaryTextBrush=#FFFFFFFF
SecondaryTextBrush=#FFB0B0B0
ShadowColor=Black
# =====================================================
# Definition der Checks
# Jeder [CheckX] Abschnitt ist eine Zeile im Fenster.
# =====================================================
## Type=
# Display - (Standard) Zeigt nur Name und Data an
# Ping - Pingt ein Ziel an.
# GeoIP - Ermittelt die öffentliche IP und den Standort.
# Speedtest - Führt einen Geschwindigkeitstest durch.
# Separator - Visuelle Trennlinie.
#
# --- Allgemeine Check-Einstellungen ---
# Name= - Der angezeigte Titel des Checks.
# Data= - Die Daten für den Check (z.B. IP-Adresse, URL).
# Hidden=True - Versteckt den Check in der UI.
#
# --- Interaktions-Einstellungen (optional) ---
# Click= - Pfad zu einer Datei, die bei Einfachklick gestartet wird.
# DblClick= - Pfad zu einer Datei, die bei Doppelklick gestartet wird.
# CmdArguments= - Argumente für die Click/DblClick-Aktion.
#
# --- Verfügbare Variablen für Name= und Data= ---
# LAN: $LAN_IP$, $LAN_GW$, $LAN_DNS1$, $LAN_DNS2$, $LAN_TYPE$, $LAN_SPEED$, $LAN_NAME$
# WireGuard:$WGX_STATUS$, $WGX_IP$, $WGX_DNS1$, $WGX_DNS2$, $WGX_SERVER_IP$, $WGX_LASTHANDSHAKE$, $WGX_BYTESSEND$, $WGX_BYTESRECV$ (X = Tunnel-Nummer)
# GeoIP: $GEO_IP$, $GEO_ORG$, $GEO_CITY$, $GEO_COUNTRY_NAME$, $GEO_COUNTRY_CODE$, $GEO_ASN$, $GEO_TIMEZONE$, $GEO_VERSION$
#
[Check1]
# Zeigt den Typ und die Geschwindigkeit des LAN-Adapters an.
Name=$LAN_TYPE$ ($LAN_NAME$) $LAN_SPEED$
# Zeigt die lokale IP-Adresse an.
Data=$LAN_IP$
[Check2]
# Ping auf den lokalen Router.
Name=Router
Data=$LAN_GW$
Type=Ping
[Check3]
# Führt eine GeoIP-Abfrage durch, um die öffentliche IP und den Standort zu ermitteln.
Type=GeoIP
[Check4]
# Ping auf einen öffentlichen DNS-Server zur Prüfung der Internetverbindung.
Name=Internet
Data=1.1.1.1
Type=Ping
[Check5]
# Eine visuelle Trennlinie.
Type=Separator
[Check6]
# Ping auf den VPN-Server (Peer).
Name=Firewall
Data=$WG0_SERVER_IP$
Type=Ping
[Check7]
# Ping auf die zugewiesene VPN-IP-Adresse.
Name=VPN IP
Data=$WG0_IP$
Type=Ping
[Check8]
# Ping auf einen internen DNS-Server im Firmennetzwerk.
Name=Firmen DNS
Data=$WG0_DNS1$
Type=Ping
[Check9]
# Ping auf einen Terminalserver. Bei Doppelklick wird eine RDP-Verbindung gestartet.
Name=Terminalserver
Data=my-terminal-server.company.local
Type=Ping
DblClick=C:\Windows\System32\mstsc.exe
CmdArguments="C:\Path\To\Your\Connection.rdp"
[Check10]
# Führt einen internen Speedtest durch.
Name=Speedtest intern
Type=Speedtest
Data=http://speedtest.internal.net/endpoint.php

98
speedtest.php Normal file
View File

@@ -0,0 +1,98 @@
<?php
/**
* speed.php - All-in-One Speedtest Endpoint
*
* FÜHRE DIESES SKRIPT EINMALIG PER CLI AUS, UM DIE ZUFALLSDATEN-DATEI ZU GENERIEREN:
* > php /pfad/zum/script/speed.php
*/
// --- KONFIGURATION ---
define('DATA_FILE_NAME', 'random_data.php');
// KORREKTUR: Wir definieren den VOLLSTÄNDIGEN Pfad zur Datendatei,
// basierend auf dem Speicherort dieses Skripts. Das ist jetzt idiotensicher.
define('DATA_FILE_PATH', __DIR__ . '/' . DATA_FILE_NAME);
define('NUM_CHUNKS', 10);
define('CHUNK_SIZE_KB', 256);
// --- KONTEXT-WEICHE: CLI oder WEB? ---
if (php_sapi_name() === 'cli') {
// --- GENERATOR-MODUS ---
echo "Führe im CLI-Modus aus. Generiere '" . DATA_FILE_PATH . "'...\n";
$chunk_size_bytes = CHUNK_SIZE_KB * 1024;
$chunks_array = [];
for ($i = 0; $i < NUM_CHUNKS; $i++) {
echo "Generiere Block " . ($i + 1) . "/" . NUM_CHUNKS . "...\n";
$random_data = random_bytes($chunk_size_bytes);
$chunks_array[] = base64_encode($random_data);
}
$file_content = "<?php\n// " . DATA_FILE_NAME . "\n// Generiert am: " . date('Y-m-d H:i:s') . "\n\n";
$file_content .= "\$RANDOM_CHUNKS = [\n";
foreach ($chunks_array as $chunk) {
$file_content .= " '" . $chunk . "',\n";
}
$file_content .= "];\n?>";
// KORREKTUR: Schreibe in den absoluten Pfad.
if (file_put_contents(DATA_FILE_PATH, $file_content)) {
echo "\nERFOLG: '" . DATA_FILE_PATH . "' wurde erfolgreich erstellt.\n";
} else {
echo "\nFEHLER: Konnte '" . DATA_FILE_PATH . "' nicht schreiben.\n";
}
exit(0);
}
// --- WEB-MODUS ---
// Security & Caching Headers
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Pragma: no-cache");
// Logik-Weiche: GET für Download, POST für Upload
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// --- UPLOAD LOGIK ---
$input = file_get_contents('php://input');
$received_bytes = strlen($input);
header('Content-Type: text/plain');
echo $received_bytes;
exit();
}
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// --- DOWNLOAD LOGIK ---
if (!file_exists(DATA_FILE_PATH)) {
http_response_code(503); // Service Unavailable
echo "FEHLER: Bitte das Skript zuerst einmal per CLI ausführen um Zufallsdaten zu erzeugen.";
exit();
}
require_once DATA_FILE_PATH;
$chunks_to_send = isset($_GET['chunks']) ? (int)$_GET['chunks'] : 1;
$chunk_size_bytes = CHUNK_SIZE_KB * 1024;
$total_size_bytes = $chunks_to_send * $chunk_size_bytes;
header('Content-Type: application/octet-stream');
header('Content-Length: ' . $total_size_bytes);
for ($i = 0; $i < $chunks_to_send; $i++) {
$random_chunk_base64 = $RANDOM_CHUNKS[array_rand($RANDOM_CHUNKS)];
echo base64_decode($random_chunk_base64);
flush();
}
exit();
}
if ($_SERVER['REQUEST_METHOD'] === 'HEAD') {
// Der Jitter-Test sendet HEAD. Wir antworten einfach mit 200 OK.
// Der Webserver sorgt dafür, dass kein Body gesendet wird.
exit();
}
// Fallback für andere HTTP-Methoden
http_response_code(405);
echo "Method Not Allowed";
exit();
?>

View File

@@ -0,0 +1,170 @@
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: UAC-Elevation prüfen und anfordern
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Administratorrechte erforderlich. Starte Script als Administrator...
goto UACPrompt
) else (
goto gotAdmin
)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
:: Parameter prüfen
if "%~1"=="" (
echo Fehler: Keine WireGuard-Konfigurationsdatei angegeben.
echo Verwendung: %0 ^<pfad_zur_wireguard_config^>
pause
exit /b 1
)
set "CONFIG_FILE=%~1"
:: Prüfen ob Konfigurationsdatei existiert
if not exist "%CONFIG_FILE%" (
echo Fehler: Konfigurationsdatei "%CONFIG_FILE%" nicht gefunden.
echo es wird ein WireGuard-Configfile als Parameter erwartet
pause
exit /b 1
)
echo WireGuard Installation und Konfiguration wird gestartet...
:: WireGuard Installation prüfen und ggf. installieren
winget >nul 2>&1
if errorlevel 1 (
echo Fehler: winget lässt sich nicht ausführen
pause >nul
exit /b 1
)
echo "Es wird ein Wireguard Service eingerichtet. <strg>+<c> zum beenden, <enter> weiter"
pause >nul
echo Prüfe WireGuard Installation...
winget install --id WireGuard.WireGuard --silent --accept-package-agreements --accept-source-agreements
echo Installiere Microsoft Visual C++ Redistributable...
winget install --id Microsoft.VCRedist.2015+.x64 --accept-package-agreements --accept-source-agreements
:: Config-Verzeichnis erstellen
set "CONFIG_DIR=%PROGRAMFILES%\WireGuard\config"
echo Erstelle Konfigurationsverzeichnis: %CONFIG_DIR%
if not exist "%CONFIG_DIR%" (
mkdir "%CONFIG_DIR%"
if errorlevel 1 (
echo Fehler: Konnte Konfigurationsverzeichnis nicht erstellen.
pause
exit /b 1
)
)
:: Berechtigungen setzen - Vererbung entfernen und nur Admin/LocalSystem
echo Setze Berechtigungen für Konfigurationsverzeichnis...
icacls "%CONFIG_DIR%" /inheritance:d >nul 2>&1
icacls "%CONFIG_DIR%" /grant:r "Administratoren:(OI)(CI)F" >nul 2>&1
icacls "%CONFIG_DIR%" /grant:r "SYSTEM:(OI)(CI)F" >nul 2>&1
icacls "%CONFIG_DIR%" /remove "Benutzer" >nul 2>&1
icacls "%CONFIG_DIR%" /remove "Authentifizierte Benutzer" >nul 2>&1
:: Konfigurationsdatei kopieren
set "WG_CONFIG=%CONFIG_DIR%\wg0.conf"
echo Kopiere Konfigurationsdatei nach %WG_CONFIG%...
copy "%CONFIG_FILE%" "%WG_CONFIG%" >nul
if errorlevel 1 (
echo Fehler: Konnte Konfigurationsdatei nicht kopieren.
pause
exit /b 1
)
:: WireGuard Tunnel Service installieren
echo Installiere WireGuard Tunnel Service...
"%PROGRAMFILES%\WireGuard\wireguard.exe" /installtunnelservice "%WG_CONFIG%"
:: Service-Berechtigungen setzen
echo Setze Service-Berechtigungen...
sc sdset "WireGuardTunnel$wg0" "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;RPWPDTRCWD;;;AU)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)" >nul 2>&1
:: Zusätzliche Dateien kopieren
set "SCRIPT_DIR=%~dp0"
set "WG_DIR=%PROGRAMFILES%\WireGuard"
echo Kopiere zusätzliche Dateien...
:: WireGuardMon.exe kopieren
copy "%SCRIPT_DIR%wireguardmon.exe" "%WG_DIR%\" >nul
if errorlevel 1 (
echo Warnung: Konnte wireguardmon.exe nicht kopieren.
pause
) else (
echo wireguardmon.exe erfolgreich kopiert.
)
:: VPNTray.exe kopieren
copy "%SCRIPT_DIR%VPNTray.exe" "%WG_DIR%\" >nul
if errorlevel 1 (
echo Warnung: Konnte VPNTray.exe nicht kopieren.
pause
) else (
echo VPNTray.exe erfolgreich kopiert.
)
:: VPNTray.ini kopieren
copy "%SCRIPT_DIR%VPNTray.ini" "%WG_DIR%\" >nul
if errorlevel 1 (
echo Warnung: Konnte VPNTray.ini nicht kopieren.
pause
) else (
echo VPNTray.ini erfolgreich kopiert.
)
:: WireGuardMon installieren
if exist "%WG_DIR%\wireguardmon.exe" (
echo Installiere WireGuardMon...
pushd "%WG_DIR%"
wireguardmon.exe --install
if errorlevel 1 (
echo Warnung: WireGuardMon Installation fehlgeschlagen.
pause
) else (
echo WireGuardMon erfolgreich installiert.
net start wireguardmon
)
popd
) else (
echo Warnung: WireGuardMon nicht verfügbar - Installation übersprungen.
pause >nul
)
:: Autostart-Eintrag für VPNTray.exe erstellen
if exist "%WG_DIR%\VPNTray.exe" (
echo Erstelle Autostart-Eintrag für VPNTray...
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "VPNTray" /t REG_SZ /d "\"%WG_DIR%\VPNTray.exe\"" /f >nul 2>&1
if errorlevel 1 (
echo Warnung: Autostart-Eintrag konnte nicht erstellt werden.
pause
) else (
echo Autostart-Eintrag für VPNTray erfolgreich erstellt.
)
start "" explorer.exe "%WG_DIR%\VPNTray.exe"
) else (
echo Warnung: VPNTray.exe nicht verfügbar - Autostart-Eintrag übersprungen.
)
echo.
echo Drücke eine beliebige Taste zum Beenden...
pause >nul
endlocal

BIN
wireguardmon.exe Normal file

Binary file not shown.