first commit
This commit is contained in:
1548
KONFIGURATION_DOKUMENTATION.md
Normal file
1548
KONFIGURATION_DOKUMENTATION.md
Normal file
File diff suppressed because it is too large
Load Diff
30
KURZBESCHREIBUNG.txt
Normal file
30
KURZBESCHREIBUNG.txt
Normal 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
2
README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# Wireguard-Installer-and-Tray
|
||||
Wireguard als Windows Dienst mit Trayicon für Support
|
||||
BIN
VPNTray.exe
Normal file
BIN
VPNTray.exe
Normal file
Binary file not shown.
118
VPNTray.ini
Normal file
118
VPNTray.ini
Normal 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
98
speedtest.php
Normal 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();
|
||||
?>
|
||||
170
wireguard_service_installer.cmd
Normal file
170
wireguard_service_installer.cmd
Normal 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
BIN
wireguardmon.exe
Normal file
Binary file not shown.
Reference in New Issue
Block a user