# WireGuard Service Installer und VPNTray - Ausführliche Konfigurationsdokumentation

## Inhaltsverzeichnis
1. [Überblick](#überblick)
2. [Systemvoraussetzungen](#systemvoraussetzungen)
3. [Installation mit wireguard_service_installer.cmd](#installation-mit-wireguard_service_installercmd)
4. [VPNTray.ini Konfiguration](#vpntrayini-konfiguration)
5. [Check-Typen und deren Konfiguration](#check-typen-und-deren-konfiguration)
6. [Verfügbare Variablen](#verfügbare-variablen)
7. [Erweiterte Konfigurationsbeispiele](#erweiterte-konfigurationsbeispiele)
8. [Troubleshooting](#troubleshooting)

---

## Überblick

Dieses Projekt von [bashclub/Wireguard-Installer-and-Tray](https://github.com/bashclub/Wireguard-Installer-and-Tray) bietet eine vollständige Lösung zur Installation und Verwaltung von WireGuard VPN-Verbindungen unter Windows mit folgenden Komponenten:

- **wireguard_service_installer.cmd**: Automatisiertes Installationsskript
- **WireGuardMon**: Überwachungsdienst für WireGuard-Tunnel
- **VPNTray**: System-Tray-Anwendung mit Statusanzeige und Verbindungstests
- **VPNTray.ini**: Konfigurationsdatei für das Tray-Icon und Checks

---

## Systemvoraussetzungen

- **Betriebssystem**: Windows 10/11
- **Rechte**: Administratorrechte erforderlich
- **Software**: 
  - winget (Windows Package Manager)
  - WireGuard (wird automatisch installiert)
  - Microsoft Visual C++ Redistributable 2015+ (wird automatisch installiert)

---

## Installation mit wireguard_service_installer.cmd

### Funktionsweise des Installers

Das Skript `wireguard_service_installer.cmd` automatisiert die komplette Installation und Konfiguration von WireGuard als Windows-Dienst.

### Verwendung

```cmd
wireguard_service_installer.cmd <pfad_zur_wireguard_config>
```

**Beispiel:**
```cmd
wireguard_service_installer.cmd C:\Users\Username\Downloads\wg0.conf
```

### Was das Skript macht

#### 1. **UAC-Elevation (Administratorrechte)**
```batch
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
```
- Prüft, ob das Skript mit Administratorrechten läuft
- Fordert bei Bedarf automatisch erhöhte Rechte an
- Erstellt temporäres VBScript für UAC-Prompt

#### 2. **Parameter-Validierung**
- Prüft, ob eine WireGuard-Konfigurationsdatei als Parameter übergeben wurde
- Validiert, ob die angegebene Datei existiert
- Bricht mit Fehlermeldung ab, wenn Parameter fehlen oder ungültig sind

#### 3. **WireGuard Installation**
```batch
winget install --id WireGuard.WireGuard --silent --accept-package-agreements --accept-source-agreements
```
- Installiert WireGuard über winget
- Verwendet Silent-Installation (keine Benutzerinteraktion)
- Akzeptiert automatisch alle Lizenzbedingungen

#### 4. **Visual C++ Redistributable Installation**
```batch
winget install --id Microsoft.VCRedist.2015+.x64 --accept-package-agreements --accept-source-agreements
```
- Installiert erforderliche Runtime-Bibliotheken
- Notwendig für VPNTray und WireGuardMon

#### 5. **Konfigurationsverzeichnis erstellen**
```batch
set "CONFIG_DIR=%PROGRAMFILES%\WireGuard\config"
mkdir "%CONFIG_DIR%"
```
- Erstellt Verzeichnis: `C:\Program Files\WireGuard\config`
- Hier wird die WireGuard-Konfiguration gespeichert

#### 6. **Sicherheitsberechtigungen setzen**
```batch
icacls "%CONFIG_DIR%" /inheritance:d
icacls "%CONFIG_DIR%" /grant:r "Administratoren:(OI)(CI)F"
icacls "%CONFIG_DIR%" /grant:r "SYSTEM:(OI)(CI)F"
icacls "%CONFIG_DIR%" /remove "Benutzer"
icacls "%CONFIG_DIR%" /remove "Authentifizierte Benutzer"
```
- **Entfernt Vererbung** von übergeordneten Ordnern
- **Gewährt Vollzugriff** nur für:
  - Administratoren
  - SYSTEM-Konto
- **Entfernt Zugriff** für:
  - Normale Benutzer
  - Authentifizierte Benutzer
- **Flags**:
  - `(OI)` = Object Inherit (Objekt-Vererbung)
  - `(CI)` = Container Inherit (Container-Vererbung)
  - `F` = Full Control (Vollzugriff)

#### 7. **Konfigurationsdatei kopieren**
```batch
copy "%CONFIG_FILE%" "%WG_CONFIG%"
```
- Kopiert die übergebene WireGuard-Konfiguration nach:
  - `C:\Program Files\WireGuard\config\wg0.conf`
- Der Name `wg0.conf` definiert den Tunnel-Namen als `wg0`

#### 8. **WireGuard Tunnel Service installieren**
```batch
"%PROGRAMFILES%\WireGuard\wireguard.exe" /installtunnelservice "%WG_CONFIG%"
```
- Installiert WireGuard als Windows-Dienst
- Dienstname: `WireGuardTunnel$wg0`
- Startet automatisch beim Systemstart

#### 9. **Service-Berechtigungen anpassen**
```batch
sc sdset "WireGuardTunnel$wg0" "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;RPWPDTRCWD;;;AU)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)"
```
- Setzt SDDL (Security Descriptor Definition Language) für den Dienst
- Erlaubt authentifizierten Benutzern, den Dienst zu starten/stoppen

#### 10. **Zusätzliche Dateien kopieren**
```batch
copy "%SCRIPT_DIR%wireguardmon.exe" "%WG_DIR%\"
copy "%SCRIPT_DIR%VPNTray.exe" "%WG_DIR%\"
copy "%SCRIPT_DIR%VPNTray.ini" "%WG_DIR%\"
```
- Kopiert alle Komponenten nach `C:\Program Files\WireGuard\`

#### 11. **WireGuardMon installieren und starten**
```batch
wireguardmon.exe --install
net start wireguardmon
```
- Installiert WireGuardMon als Windows-Dienst
- Startet den Überwachungsdienst
- Erstellt ITC-Datei (Inter-Thread Communication) für VPNTray

#### 12. **Autostart für VPNTray einrichten**
```batch
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "VPNTray" /t REG_SZ /d "\"%WG_DIR%\VPNTray.exe\"" /f
```
- Fügt Registry-Eintrag hinzu
- VPNTray startet automatisch bei Benutzeranmeldung
- Startet VPNTray sofort nach Installation

### Installationsablauf - Schritt für Schritt

1. **Vorbereitung**
   - WireGuard-Konfigurationsdatei (`.conf`) bereitstellen
   - Als Administrator anmelden oder UAC-Berechtigung erteilen können

2. **Installation starten**
   ```cmd
   wireguard_service_installer.cmd C:\Pfad\zu\ihrer\config.conf
   ```

3. **Bestätigung**
   - Skript zeigt: "Es wird ein Wireguard Service eingerichtet"
   - Mit `Enter` bestätigen oder mit `Strg+C` abbrechen

4. **Automatische Installation**
   - WireGuard wird installiert
   - Visual C++ Redistributable wird installiert
   - Konfiguration wird kopiert und gesichert
   - Dienste werden eingerichtet

5. **Abschluss**
   - VPNTray startet automatisch
   - Tray-Icon erscheint in der Taskleiste
   - WireGuard-Verbindung ist aktiv

---

## VPNTray.ini Konfiguration

Die Datei `VPNTray.ini` steuert das Verhalten und Aussehen der VPNTray-Anwendung.

### Dateistruktur

```ini
[General]          # Allgemeine Einstellungen
[Theme]            # Farbschema (nur bei Theme=Custom)
[Wireguardmon]     # WireGuardMon-Einstellungen
[CheckX]           # Check-Definitionen (X = 1, 2, 3, ...)
```

### [General] Sektion

#### ITC (Inter-Thread Communication)
```ini
#ITC=C:\Program Files\WireGuard\wireguardmon.itc
```
- **Zweck**: Pfad zur Statusdatei von WireGuardMon
- **Standard**: Gleiches Verzeichnis wie VPNTray.exe
- **Verwendung**: Nur ändern, wenn WireGuardMon an anderem Ort installiert ist

#### Disabled
```ini
#Disabled=wg1,wg2
```
- **Zweck**: Schließt WireGuard-Tunnel von der Überwachung aus
- **Format**: Kommagetrennte Liste von Tunnel-Namen
- **Beispiel**: `Disabled=wg1,wg2,wg_backup`
- **Anwendungsfall**: Wenn mehrere Tunnel konfiguriert sind, aber nur bestimmte überwacht werden sollen

#### Theme
```ini
Theme=Auto
```
- **Optionen**:
  - `Auto` - Folgt Windows-Systemeinstellung (Hell/Dunkel)
  - `Dark` - Dunkles Design
  - `Light` - Helles Design
  - `Custom` - Benutzerdefiniert (verwendet [Theme]-Sektion)

#### AutoClose
```ini
AutoClose=15
```
- **Zweck**: Automatisches Schließen des Fensters
- **Einheit**: Sekunden
- **Werte**:
  - `0` = Deaktiviert (Fenster bleibt offen)
  - `>0` = Sekunden bis zum automatischen Schließen
- **Empfehlung**: 10-30 Sekunden für Support-Szenarien

#### AutoDisconnect
```ini
#AutoDisconnect=DOMAIN
#AutoDisconnect=IP:10.11.12.128/25,IP:192.168.178.0/24,DNS:mydomain.local
```
- **Zweck**: Automatisches Trennen der VPN-Verbindung bei bestimmten Netzwerken
- **Optionen**:
  - `DOMAIN` - Trennt, wenn Computer in Domäne eingebunden ist
  - `IP:x.x.x.x/xx` - Trennt bei bestimmtem IP-Bereich (CIDR-Notation)
  - `DNS:domain.local` - Trennt bei bestimmter DNS-Suffix
- **Mehrere Bedingungen**: Kommagetrennt
- **Anwendungsfall**: VPN automatisch deaktivieren, wenn im Firmennetzwerk

#### PowerMode
```ini
#PowerMode=0
```
- **Zweck**: Aktiviert Energiespar-Checks auch bei geschlossener UI
- **Werte**:
  - `0` = Deaktiviert
  - `1` = Aktiviert (Traffic-Monitoring läuft im Hintergrund)
- **Hinweis**: Erhöht CPU-Last minimal

### [Wireguardmon] Sektion

```ini
#[Wireguardmon]
#POLL_TIME=30
#STEMP_MS=500
```

#### POLL_TIME
- **Zweck**: Intervall für Statusabfragen
- **Einheit**: Sekunden
- **Standard**: 30 Sekunden
- **Empfehlung**: 15-60 Sekunden (niedrigere Werte = höhere CPU-Last)

#### STEMP_MS
- **Zweck**: Zeitstempel-Präzision
- **Einheit**: Millisekunden
- **Standard**: 500 ms
- **Verwendung**: Für präzise Traffic-Messungen

### [Theme] Sektion

Nur aktiv bei `Theme=Custom` in [General].

```ini
[Theme]
WindowBackgroundBrush=#FF252525
ItemCardBackgroundBrush=#FF3C3C3C
ItemHoverBackgroundBrush=#1AFFFFFF
SeparatorBrush=#FF555555
PrimaryTextBrush=#FFFFFFFF
SecondaryTextBrush=#FFB0B0B0
ShadowColor=Black
```

#### Farbformat
- **Format**: `#AARRGGBB` (Hex)
  - `AA` = Alpha (Transparenz): 00 (transparent) - FF (opak)
  - `RR` = Rot: 00-FF
  - `GG` = Grün: 00-FF
  - `BB` = Blau: 00-FF

#### Farbelemente

| Element | Beschreibung | Standard (Dark) |
|---------|--------------|-----------------|
| `WindowBackgroundBrush` | Hauptfenster-Hintergrund | `#FF252525` (Dunkelgrau) |
| `ItemCardBackgroundBrush` | Hintergrund der Check-Karten | `#FF3C3C3C` (Mittelgrau) |
| `ItemHoverBackgroundBrush` | Hover-Effekt bei Mauszeiger | `#1AFFFFFF` (Leicht transparent weiß) |
| `SeparatorBrush` | Trennlinien | `#FF555555` (Grau) |
| `PrimaryTextBrush` | Haupttext | `#FFFFFFFF` (Weiß) |
| `SecondaryTextBrush` | Sekundärtext (Details) | `#FFB0B0B0` (Hellgrau) |
| `ShadowColor` | Schatten | `Black` |

**Beispiel für helles Theme:**
```ini
Theme=Custom
[Theme]
WindowBackgroundBrush=#FFFFFFFF
ItemCardBackgroundBrush=#FFF0F0F0
ItemHoverBackgroundBrush=#1A000000
SeparatorBrush=#FFCCCCCC
PrimaryTextBrush=#FF000000
SecondaryTextBrush=#FF666666
ShadowColor=#33000000
```

---

## Check-Typen und deren Konfiguration

Jeder `[CheckX]`-Abschnitt definiert eine Zeile im VPNTray-Fenster.

### Allgemeine Check-Parameter

Alle Check-Typen unterstützen diese Parameter:

```ini
[CheckX]
Name=Anzeigename
Data=Daten für den Check
Type=Check-Typ
Hidden=True/False
Click=Pfad zur Datei
DblClick=Pfad zur Datei
CmdArguments=Argumente für Click/DblClick
```

#### Name
- **Zweck**: Angezeigter Titel in der UI
- **Unterstützt**: Variablen (siehe [Verfügbare Variablen](#verfügbare-variablen))
- **Beispiel**: `Name=Router ($LAN_GW$)`

#### Data
- **Zweck**: Daten für den Check (IP, URL, etc.)
- **Unterstützt**: Variablen
- **Beispiel**: `Data=$WG0_SERVER_IP$`

#### Type
- **Zweck**: Definiert die Art des Checks
- **Optionen**: `Display`, `Ping`, `GeoIP`, `Speedtest`, `Separator`
- **Standard**: `Display` (wenn nicht angegeben)

#### Hidden
- **Zweck**: Versteckt den Check in der UI
- **Werte**: `True` oder `False`
- **Anwendungsfall**: Checks ausführen, aber nicht anzeigen

#### Click / DblClick
- **Zweck**: Aktion bei Klick auf den Check
- **Format**: Vollständiger Pfad zur ausführbaren Datei
- **Beispiel**: `DblClick=C:\Windows\System32\mstsc.exe`

#### CmdArguments
- **Zweck**: Argumente für Click/DblClick-Aktion
- **Format**: String mit Argumenten
- **Beispiel**: `CmdArguments=/v:server.local`

### Check-Typ: Display

Zeigt nur Name und Data an, ohne aktive Prüfung.

```ini
[Check1]
Name=LAN Adapter
Data=$LAN_IP$
Type=Display
```

**Verwendung:**
- Statische Informationsanzeige
- Netzwerkinformationen
- Konfigurationswerte

**Beispiele:**
```ini
# LAN-Informationen
[Check1]
Name=$LAN_TYPE$ ($LAN_NAME$)
Data=$LAN_IP$ - Gateway: $LAN_GW$

# WireGuard-Status
[Check2]
Name=VPN Status
Data=$WG0_STATUS$

# Letzte Verbindung
[Check3]
Name=Last Handshake
Data=$WG0_LASTHANDSHAKE$
```

### Check-Typ: Ping

Führt einen ICMP-Ping auf das angegebene Ziel aus.

```ini
[Check2]
Name=Router
Data=$LAN_GW$
Type=Ping
```

**Funktionsweise:**
- Sendet ICMP Echo Request
- Zeigt Antwortzeit in ms
- Farbcodierung:
  - Grün: < 50ms
  - Gelb: 50-150ms
  - Rot: > 150ms oder Timeout

**Beispiele:**
```ini
# Lokaler Router
[Check1]
Name=Router
Data=$LAN_GW$
Type=Ping

# Internet-Konnektivität
[Check2]
Name=Internet (Cloudflare DNS)
Data=1.1.1.1
Type=Ping

# VPN-Server
[Check3]
Name=VPN Gateway
Data=$WG0_SERVER_IP$
Type=Ping

# Interner Server
[Check4]
Name=Fileserver
Data=fileserver.company.local
Type=Ping

# Mit Hostname
[Check5]
Name=Domain Controller
Data=dc01.domain.local
Type=Ping
```

### Check-Typ: GeoIP

Ermittelt öffentliche IP-Adresse und geografische Informationen.

```ini
[Check3]
Type=GeoIP
```

**Funktionsweise:**
- Ruft externe GeoIP-API auf
- Zeigt öffentliche IP und Standort
- Aktualisiert bei jedem Check

**Angezeigte Informationen:**
- Öffentliche IP-Adresse
- Land
- Stadt
- Organisation/ISP
- ASN (Autonomous System Number)

**Verfügbare Variablen nach GeoIP-Check:**
```ini
$GEO_IP$              # Öffentliche IP
$GEO_ORG$             # Organisation/ISP
$GEO_CITY$            # Stadt
$GEO_COUNTRY_NAME$    # Land (vollständig)
$GEO_COUNTRY_CODE$    # Ländercode (z.B. DE)
$GEO_ASN$             # AS-Nummer
$GEO_TIMEZONE$        # Zeitzone
$GEO_VERSION$         # IP-Version (IPv4/IPv6)
```

**Beispiel mit Variablen:**
```ini
[Check1]
Type=GeoIP

[Check2]
Name=Standort
Data=$GEO_CITY$, $GEO_COUNTRY_NAME$
Type=Display

[Check3]
Name=Provider
Data=$GEO_ORG$ (AS$GEO_ASN$)
Type=Display
```

### Check-Typ: Speedtest

Führt einen Geschwindigkeitstest durch.

```ini
[Check10]
Name=Speedtest intern
Type=Speedtest
Data=http://speedtest.internal.net/endpoint.php
```

**Voraussetzungen:**
- Speedtest-Endpunkt (PHP-Skript)
- HTTP/HTTPS-Zugriff auf Endpunkt

**Funktionsweise:**
- Lädt Daten vom angegebenen Endpunkt
- Misst Download-Geschwindigkeit
- Zeigt Ergebnis in Mbit/s

**Speedtest-Endpunkt einrichten:**

Die Datei `speedtest.php` ist im Repository enthalten:

```php
<?php
// speedtest.php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="speedtest.bin"');
header('Cache-Control: no-cache');

// Generiere 10 MB Zufallsdaten
$size = 10 * 1024 * 1024; // 10 MB
$chunk = 1024 * 1024; // 1 MB Chunks

for ($i = 0; $i < $size; $i += $chunk) {
    echo str_repeat('0', min($chunk, $size - $i));
    flush();
}
?>
```

**Beispiele:**
```ini
# Interner Speedtest
[Check1]
Name=Speedtest Firmennetz
Type=Speedtest
Data=http://speedtest.internal.company.local/speedtest.php

# Externer Speedtest
[Check2]
Name=Speedtest Internet
Type=Speedtest
Data=https://speedtest.example.com/endpoint.php

# VPN-Speedtest
[Check3]
Name=VPN Geschwindigkeit
Type=Speedtest
Data=http://10.0.0.1/speedtest.php
```

### Check-Typ: Separator

Visuelle Trennlinie zwischen Checks.

```ini
[Check5]
Type=Separator
```

**Verwendung:**
- Gruppierung von Checks
- Visuelle Strukturierung
- Keine weiteren Parameter erforderlich

**Beispiel:**
```ini
# LAN-Informationen
[Check1]
Name=LAN IP
Data=$LAN_IP$

[Check2]
Name=Router
Data=$LAN_GW$
Type=Ping

# Trenner
[Check3]
Type=Separator

# VPN-Informationen
[Check4]
Name=VPN IP
Data=$WG0_IP$

[Check5]
Name=VPN Server
Data=$WG0_SERVER_IP$
Type=Ping
```

---

## Verfügbare Variablen

Variablen können in `Name=` und `Data=` Parametern verwendet werden.

### LAN-Variablen

```ini
$LAN_IP$        # Lokale IP-Adresse (z.B. 192.168.1.100)
$LAN_GW$        # Gateway-IP (z.B. 192.168.1.1)
$LAN_DNS1$      # Primärer DNS-Server
$LAN_DNS2$      # Sekundärer DNS-Server
$LAN_TYPE$      # Verbindungstyp (Ethernet, WiFi)
$LAN_SPEED$     # Verbindungsgeschwindigkeit (z.B. 1 Gbps)
$LAN_NAME$      # Adapter-Name (z.B. "Ethernet 2")
```

**Beispiel:**
```ini
[Check1]
Name=$LAN_TYPE$ Adapter: $LAN_NAME$
Data=IP: $LAN_IP$ | Gateway: $LAN_GW$ | Speed: $LAN_SPEED$
```

### WireGuard-Variablen

Format: `$WGX_VARIABLE$` wobei X die Tunnel-Nummer ist (0, 1, 2, ...)

```ini
$WG0_STATUS$        # Status (Connected, Disconnected)
$WG0_IP$            # Zugewiesene VPN-IP
$WG0_DNS1$          # Primärer VPN-DNS
$WG0_DNS2$          # Sekundärer VPN-DNS
$WG0_SERVER_IP$     # VPN-Server/Peer-IP
$WG0_LASTHANDSHAKE$ # Zeitpunkt des letzten Handshakes
$WG0_BYTESSEND$     # Gesendete Bytes
$WG0_BYTESRECV$     # Empfangene Bytes
```

**Für mehrere Tunnel:**
```ini
# Tunnel wg0
$WG0_IP$
$WG0_STATUS$

# Tunnel wg1
$WG1_IP$
$WG1_STATUS$

# Tunnel wg2
$WG2_IP$
$WG2_STATUS$
```

**Beispiel:**
```ini
[Check1]
Name=VPN Status: $WG0_STATUS$
Data=IP: $WG0_IP$ | Server: $WG0_SERVER_IP$

[Check2]
Name=VPN Traffic
Data=↑ $WG0_BYTESSEND$ | ↓ $WG0_BYTESRECV$

[Check3]
Name=Last Handshake
Data=$WG0_LASTHANDSHAKE$
```

### GeoIP-Variablen

Verfügbar nach einem GeoIP-Check:

```ini
$GEO_IP$            # Öffentliche IP-Adresse
$GEO_ORG$           # Organisation/ISP
$GEO_CITY$          # Stadt
$GEO_COUNTRY_NAME$  # Land (vollständig)
$GEO_COUNTRY_CODE$  # Ländercode (ISO 3166-1 alpha-2)
$GEO_ASN$           # Autonomous System Number
$GEO_TIMEZONE$      # Zeitzone
$GEO_VERSION$       # IP-Version (4 oder 6)
```

**Beispiel:**
```ini
[Check1]
Type=GeoIP

[Check2]
Name=Standort
Data=$GEO_CITY$, $GEO_COUNTRY_NAME$ ($GEO_COUNTRY_CODE$)

[Check3]
Name=Provider
Data=$GEO_ORG$

[Check4]
Name=IP-Adresse
Data=$GEO_IP$ (IPv$GEO_VERSION$)
```

---

## Erweiterte Konfigurationsbeispiele

### Beispiel 1: Minimale Konfiguration

Einfache Überwachung mit grundlegenden Checks:

```ini
[General]
Theme=Auto
AutoClose=15

[Check1]
Name=LAN
Data=$LAN_IP$

[Check2]
Name=Internet
Data=1.1.1.1
Type=Ping

[Check3]
Type=Separator

[Check4]
Name=VPN
Data=$WG0_IP$

[Check5]
Name=VPN Server
Data=$WG0_SERVER_IP$
Type=Ping
```

### Beispiel 2: Umfassende Überwachung

Detaillierte Überwachung mit allen Informationen:

```ini
[General]
Theme=Dark
AutoClose=20
PowerMode=1

[Wireguardmon]
POLL_TIME=15

# === LAN-Informationen ===
[Check1]
Name=$LAN_TYPE$ ($LAN_NAME$) - $LAN_SPEED$
Data=$LAN_IP$

[Check2]
Name=Gateway
Data=$LAN_GW$
Type=Ping

[Check3]
Name=DNS Server
Data=$LAN_DNS1$
Type=Ping

[Check4]
Type=GeoIP

[Check5]
Name=Internet
Data=1.1.1.1
Type=Ping

[Check6]
Type=Separator

# === VPN-Informationen ===
[Check7]
Name=VPN Status
Data=$WG0_STATUS$

[Check8]
Name=VPN IP
Data=$WG0_IP$
Type=Ping

[Check9]
Name=VPN Server
Data=$WG0_SERVER_IP$
Type=Ping

[Check10]
Name=VPN DNS
Data=$WG0_DNS1$
Type=Ping

[Check11]
Name=Last Handshake
Data=$WG0_LASTHANDSHAKE$

[Check12]
Name=Traffic
Data=↑ $WG0_BYTESSEND$ ↓ $WG0_BYTESRECV$

[Check13]
Type=Separator

# === Interne Ressourcen ===
[Check14]
Name=Domain Controller
Data=dc01.company.local
Type=Ping

[Check15]
Name=Fileserver
Data=fs01.company.local
Type=Ping

[Check16]
Name=Speedtest
Type=Speedtest
Data=http://speedtest.company.local/speedtest.php
```

### Beispiel 3: Remote Desktop Integration

VPN-Überwachung mit RDP-Zugriff:

```ini
[General]
Theme=Auto
AutoClose=10

[Check1]
Name=VPN Status
Data=$WG0_STATUS$

[Check2]
Name=VPN Server
Data=$WG0_SERVER_IP$
Type=Ping

[Check3]
Type=Separator

[Check4]
Name=Terminal Server 1
Data=ts01.company.local
Type=Ping
DblClick=C:\Windows\System32\mstsc.exe
CmdArguments=/v:ts01.company.local

[Check5]
Name=Terminal Server 2
Data=ts02.company.local
Type=Ping
DblClick=C:\Windows\System32\mstsc.exe
CmdArguments=/v:ts02.company.local

[Check6]
Name=Application Server
Data=app01.company.local
Type=Ping
DblClick=C:\Windows\System32\mstsc.exe
CmdArguments="C:\RDP-Configs\app01.rdp"
```

### Beispiel 4: Multi-Tunnel Konfiguration

Überwachung mehrerer WireGuard-Tunnel:

```ini
[General]
Theme=Auto
AutoClose=15
# wg2 wird nicht überwacht
Disabled=wg2

# === Tunnel wg0 (Hauptverbindung) ===
[Check1]
Name=VPN Haupt ($WG0_STATUS$)
Data=$WG0_IP$

[Check2]
Name=VPN Server Haupt
Data=$WG0_SERVER_IP$
Type=Ping

[Check3]
Type=Separator

# === Tunnel wg1 (Backup) ===
[Check4]
Name=VPN Backup ($WG1_STATUS$)
Data=$WG1_IP$

[Check5]
Name=VPN Server Backup
Data=$WG1_SERVER_IP$
Type=Ping

[Check6]
Type=Separator

# === Gemeinsame Checks ===
[Check7]
Name=Internet
Data=1.1.1.1
Type=Ping
```

### Beispiel 5: Auto-Disconnect bei Firmennetzwerk

Automatisches Trennen der VPN-Verbindung im Büro:

```ini
[General]
Theme=Auto
AutoClose=15
# Trennt VPN, wenn im Firmennetzwerk (192.168.100.0/24)
AutoDisconnect=IP:192.168.100.0/24,DNS:company.local

[Check1]
Name=Netzwerk
Data=$LAN_IP$

[Check2]
Name=VPN Status
Data=$WG0_STATUS$

[Check3]
Name=Hinweis
Data=VPN wird im Firmennetzwerk automatisch getrennt
```

### Beispiel 6: Support/Helpdesk Konfiguration

Optimiert für Support-Mitarbeiter:

```ini
[General]
Theme=Light
AutoClose=30
PowerMode=1

[Check1]
Name=Computer
Data=$LAN_NAME$ - $LAN_IP$

[Check2]
Name=Verbindungstyp
Data=$LAN_TYPE$ @ $LAN_SPEED$

[Check3]
Name=Gateway
Data=$LAN_GW$
Type=Ping

[Check4]
Type=GeoIP

[Check5]
Type=Separator

[Check6]
Name=VPN Status
Data=$WG0_STATUS$

[Check7]
Name=VPN IP
Data=$WG0_IP$

[Check8]
Name=VPN Server
Data=$WG0_SERVER_IP$
Type=Ping

[Check9]
Name=Letzte Verbindung
Data=$WG0_LASTHANDSHAKE$

[Check10]
Type=Separator

[Check11]
Name=Helpdesk Portal
Data=helpdesk.company.local
Type=Ping
DblClick=C:\Program Files\Mozilla Firefox\firefox.exe
CmdArguments=https://helpdesk.company.local

[Check12]
Name=Ticket System
Data=tickets.company.local
Type=Ping
Click=C:\Program Files\Mozilla Firefox\firefox.exe
CmdArguments=https://tickets.company.local
```

### Beispiel 7: Entwickler-Konfiguration

Mit Zugriff auf Entwicklungsressourcen:

```ini
[General]
Theme=Dark
AutoClose=0
PowerMode=1

[Check1]
Name=LAN
Data=$LAN_IP$

[Check2]
Type=GeoIP

[Check3]
Type=Separator

[Check4]
Name=VPN
Data=$WG0_IP$ ($WG0_STATUS$)

[Check5]
Name=VPN Gateway
Data=$WG0_SERVER_IP$
Type=Ping

[Check6]
Type=Separator

[Check7]
Name=GitLab Server
Data=gitlab.dev.local
Type=Ping
DblClick=C:\Program Files\Mozilla Firefox\firefox.exe
CmdArguments=https://gitlab.dev.local

[Check8]
Name=Jenkins CI
Data=jenkins.dev.local
Type=Ping
DblClick=C:\Program Files\Mozilla Firefox\firefox.exe
CmdArguments=https://jenkins.dev.local

[Check9]
Name=Dev Database
Data=db01.dev.local
Type=Ping

[Check10]
Name=Test Server
Data=test01.dev.local
Type=Ping
DblClick=C:\Windows\System32\mstsc.exe
CmdArguments=/v:test01.dev.local

[Check11]
Type=Separator

[Check12]
Name=Speedtest Dev Network
Type=Speedtest
Data=http://speedtest.dev.local/speedtest.php
```

---

## Troubleshooting

### Installation schlägt fehl

#### Problem: "winget lässt sich nicht ausführen"

**Ursache:** Windows Package Manager (winget) ist nicht installiert oder nicht im PATH.

**Lösung:**
1. Windows 11: Sollte vorinstalliert sein
2. Windows 10: App Installer aus Microsoft Store installieren
3. Alternativ: [Winget manuell installieren](https://github.com/microsoft/winget-cli/releases)

#### Problem: "Administratorrechte erforderlich"

**Ursache:** Skript wurde nicht als Administrator gestartet.

**Lösung:**
1. Rechtsklick auf `wireguard_service_installer.cmd`
2. "Als Administrator ausführen" wählen
3. UAC-Prompt bestätigen

#### Problem: "Konfigurationsdatei nicht gefunden"

**Ursache:** Falscher Pfad zur WireGuard-Konfiguration.

**Lösung:**
```cmd
# Vollständigen Pfad verwenden
wireguard_service_installer.cmd "C:\Users\Username\Downloads\wg0.conf"

# Oder relativ zum aktuellen Verzeichnis
cd C:\Users\Username\Downloads
wireguard_service_installer.cmd wg0.conf
```

### VPNTray startet nicht

#### Problem: VPNTray-Icon erscheint nicht in der Taskleiste

**Ursache 1:** Visual C++ Redistributable fehlt

**Lösung:**
```cmd
winget install --id Microsoft.VCRedist.2015+.x64
```

**Ursache 2:** VPNTray.exe wurde nicht korrekt kopiert

**Lösung:**
```cmd
# Prüfen ob Datei existiert
dir "C:\Program Files\WireGuard\VPNTray.exe"

# Manuell kopieren falls nötig
copy VPNTray.exe "C:\Program Files\WireGuard\"
```

**Ursache 3:** WireGuardMon läuft nicht

**Lösung:**
```cmd
# Service-Status prüfen
sc query wireguardmon

# Service starten
net start wireguardmon

# Falls Service nicht existiert
cd "C:\Program Files\WireGuard"
wireguardmon.exe --install
net start wireguardmon
```

### Checks funktionieren nicht

#### Problem: Variablen werden nicht ersetzt (z.B. $WG0_IP$ wird als Text angezeigt)

**Ursache:** WireGuardMon liefert keine Daten oder ITC-Datei fehlt.

**Lösung:**
```cmd
# WireGuardMon-Status prüfen
sc query wireguardmon

# ITC-Datei prüfen
dir "C:\Program Files\WireGuard\wireguardmon.itc"

# WireGuardMon neu starten
net stop wireguardmon
net start wireguardmon
```

#### Problem: Ping-Checks zeigen immer Timeout

**Ursache 1:** Firewall blockiert ICMP

**Lösung:**
- Windows Firewall: ICMP Echo Request erlauben
- Ziel-Firewall: ICMP-Antworten erlauben

**Ursache 2:** VPN-Verbindung nicht aktiv

**Lösung:**
```cmd
# WireGuard-Service prüfen
sc query WireGuardTunnel$wg0

# Service starten
net start WireGuardTunnel$wg0
```

#### Problem: GeoIP-Check schlägt fehl

**Ursache:** Keine Internetverbindung oder API nicht erreichbar

**Lösung:**
1. Internetverbindung prüfen
2. Proxy-Einstellungen prüfen
3. Firewall-Regeln für VPNTray.exe prüfen

#### Problem: Speedtest zeigt keine Ergebnisse

**Ursache:** Speedtest-Endpunkt nicht erreichbar oder falsch konfiguriert

**Lösung:**
1. URL im Browser testen
2. PHP-Skript auf Server prüfen
3. Netzwerkverbindung zum Server testen

### WireGuard-Verbindung Probleme

#### Problem: WireGuard-Tunnel startet nicht automatisch

**Ursache:** Service ist nicht auf "Automatisch" gestellt

**Lösung:**
```cmd
# Service auf automatisch setzen
sc config WireGuardTunnel$wg0 start= auto

# Service starten
net start WireGuardTunnel$wg0
```

#### Problem: "Last Handshake" zeigt sehr alte Zeit

**Ursache:** Verbindung zum VPN-Server unterbrochen

**Lösung:**
1. Internetverbindung prüfen
2. VPN-Server-Erreichbarkeit prüfen
3. WireGuard-Konfiguration prüfen
4. Service neu starten:
```cmd
net stop WireGuardTunnel$wg0
net start WireGuardTunnel$wg0
```

### Konfigurationsprobleme

#### Problem: Änderungen in VPNTray.ini werden nicht übernommen

**Ursache:** VPNTray muss neu gestartet werden

**Lösung:**
1. VPNTray über Tray-Icon beenden
2. VPNTray neu starten:
```cmd
start "" "C:\Program Files\WireGuard\VPNTray.exe"
```

#### Problem: Custom Theme wird nicht angezeigt

**Ursache:** Theme-Einstellung nicht auf "Custom" gesetzt

**Lösung:**
```ini
[General]
Theme=Custom

[Theme]
# Ihre benutzerdefinierten Farben
WindowBackgroundBrush=#FF252525
...
```

#### Problem: AutoDisconnect funktioniert nicht

**Ursache:** Falsche Syntax oder Netzwerk-Erkennung fehlerhaft

**Lösung:**
```ini
# Richtige Syntax prüfen
AutoDisconnect=IP:192.168.1.0/24

# Mehrere Bedingungen
AutoDisconnect=IP:192.168.1.0/24,DNS:company.local,DOMAIN

# Aktuelles Netzwerk prüfen
ipconfig /all
```

### Performance-Probleme

#### Problem: VPNTray verbraucht viel CPU

**Ursache:** Zu häufige Checks oder PowerMode aktiviert

**Lösung:**
```ini
[General]
PowerMode=0

[Wireguardmon]
POLL_TIME=60  # Erhöhen auf 60 Sekunden
```

#### Problem: Checks dauern sehr lange

**Ursache:** Timeout bei nicht erreichbaren Hosts

**Lösung:**
- Nicht erreichbare Checks entfernen oder auskommentieren
- `Hidden=True` für nicht kritische Checks setzen

### Logs und Diagnose

#### WireGuard-Logs anzeigen

```cmd
# Event Viewer öffnen
eventvwr.msc

# Navigieren zu:
# Windows-Protokolle > Anwendung
# Nach "WireGuard" filtern
```

#### WireGuardMon-Status prüfen

```cmd
# Service-Status
sc query wireguardmon

# Service-Konfiguration
sc qc wireguardmon

# ITC-Datei Inhalt (für Entwickler)
type "C:\Program Files\WireGuard\wireguardmon.itc"
```

#### VPNTray Debug-Informationen

1. VPNTray-Fenster öffnen (Klick auf Tray-Icon)
2. Alle angezeigten Werte notieren
3. Bei Problemen: Screenshot erstellen

---

## Häufig gestellte Fragen (FAQ)

### Allgemein

**F: Kann ich mehrere WireGuard-Tunnel gleichzeitig überwachen?**

A: Ja, VPNTray unterstützt mehrere Tunnel. Verwenden Sie `$WG0_*$`, `$WG1_*$`, `$WG2_*$` etc. für verschiedene Tunnel.

**F: Wie deinstalliere ich WireGuard und VPNTray?**

A:
```cmd
# VPNTray Autostart entfernen
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "VPNTray" /f

# WireGuardMon deinstallieren
cd "C:\Program Files\WireGuard"
wireguardmon.exe --uninstall

# WireGuard Tunnel Service entfernen
wireguard.exe /uninstalltunnelservice wg0

# WireGuard deinstallieren
winget uninstall WireGuard.WireGuard
```

**F: Kann ich VPNTray ohne WireGuardMon verwenden?**

A: Nein, VPNTray benötigt WireGuardMon für die Statusabfrage und Variablen-Ersetzung.

### Konfiguration

**F: Wie viele Checks kann ich definieren?**

A: Theoretisch unbegrenzt. Praktisch empfohlen: 10-20 Checks für gute Performance und Übersichtlichkeit.

**F: Kann ich eigene Variablen definieren?**

A: Nein, nur die vordefinierten Variablen sind verfügbar. Sie können aber statische Werte verwenden.

**F: Wie kann ich Checks temporär deaktivieren?**

A:
```ini
# Option 1: Auskommentieren
#[Check5]
#Name=Test
#Data=test.local
#Type=Ping

# Option 2: Hidden verwenden
[Check5]
Name=Test
Data=test.local
Type=Ping
Hidden=True
```

### Sicherheit

**F: Sind die WireGuard-Konfigurationsdateien sicher gespeichert?**

A: Ja, das Installationsskript setzt restriktive NTFS-Berechtigungen:
- Nur Administratoren und SYSTEM haben Zugriff
- Normale Benutzer können die Konfiguration nicht lesen

**F: Kann ein normaler Benutzer den VPN-Dienst steuern?**

A: Ja, durch die Service-Berechtigungen können authentifizierte Benutzer den Dienst starten/stoppen, aber nicht die Konfiguration ändern.

**F: Werden Passwörter in VPNTray.ini gespeichert?**

A: Nein, VPNTray.ini enthält keine Passwörter. WireGuard verwendet Public-Key-Kryptographie.

### Netzwerk

**F: Funktioniert VPNTray mit IPv6?**

A: Ja, WireGuard und VPNTray unterstützen IPv6. GeoIP-Checks zeigen die IP-Version an.

**F: Kann ich VPNTray über VPN verwenden?**

A: Ja, VPNTray funktioniert auch wenn es selbst über VPN verbunden ist. Beachten Sie mögliche Routing-Probleme.

**F: Wie teste ich die Konfiguration ohne VPN-Verbindung?**

A: Verwenden Sie hauptsächlich LAN-Variablen und Display-Checks. Ping-Checks auf lokale Ressourcen funktionieren auch ohne VPN.

---

## Best Practices

### Konfiguration strukturieren

```ini
# Kommentare für Übersichtlichkeit
# === LAN-Bereich ===
[Check1]
...

# === VPN-Bereich ===
[Check5]
...

# === Interne Ressourcen ===
[Check10]
...
```

### Sinnvolle Check-Reihenfolge

1. **LAN-Informationen** (Basis-Konnektivität)
2. **Internet-Check** (Externe Erreichbarkeit)
3. **GeoIP** (Standort-Informationen)
4. **Separator**
5. **VPN-Status** (Tunnel-Informationen)
6. **VPN-Ressourcen** (Interne Server)
7. **Separator**
8. **Anwendungs-Checks** (RDP, Web, etc.)

### Performance optimieren

```ini
[General]
AutoClose=15          # Fenster schließt automatisch
PowerMode=0           # Nur bei geöffnetem Fenster prüfen

[Wireguardmon]
POLL_TIME=30          # Nicht zu häufig abfragen
```

### Benutzerfreundlichkeit

```ini
# Aussagekräftige Namen
[Check1]
Name=Firmen-Router (Gateway)
Data=$LAN_GW$
Type=Ping

# Hilfreiche Informationen kombinieren
[Check2]
Name=$LAN_TYPE$ @ $LAN_SPEED$ ($LAN_NAME$)
Data=$LAN_IP$

# Interaktive Elemente
[Check3]
Name=Terminalserver (Doppelklick für RDP)
Data=ts01.company.local
Type=Ping
DblClick=C:\Windows\System32\mstsc.exe
CmdArguments=/v:ts01.company.local
```

### Fehlerbehandlung

```ini
# Kritische Checks zuerst
[Check1]
Name=Internet
Data=1.1.1.1
Type=Ping

# Optionale Checks mit Hidden
[Check2]
Name=Optionaler Server
Data=optional.local
Type=Ping
Hidden=True  # Wird nicht angezeigt wenn fehlschlägt
```

---

## Weiterführende Ressourcen

- **GitHub Repository**: https://github.com/bashclub/Wireguard-Installer-and-Tray
- **WireGuard Dokumentation**: https://www.wireguard.com/
- **WireGuard Windows**: https://git.zx2c4.com/wireguard-windows/about/

---

## Changelog und Versionshinweise

Diese Dokumentation basiert auf der aktuellen Version des Projekts. Prüfen Sie das GitHub-Repository für Updates und neue Features.

---

## Support und Community

Bei Problemen oder Fragen:
1. GitHub Issues: https://github.com/bashclub/Wireguard-Installer-and-Tray/issues
2. Dokumentation prüfen
3. Logs analysieren (Event Viewer)

---

**Erstellt:** 2024
**Quelle:** https://github.com/bashclub/Wireguard-Installer-and-Tray
**Lizenz:** Siehe LICENSE-Datei im Repository
