#!/bin/bash ####################################################################### # VM Internet-Verbindung Diagnose und Reparatur # # Speziell für virtuelle Maschinen mit Internet-Verbindungsproblemen # im MYP AIO-Installer ####################################################################### set -euo pipefail # Farben für Ausgabe readonly RED='\033[0;31m' readonly GREEN='\033[0;32m' readonly YELLOW='\033[1;33m' readonly BLUE='\033[0;34m' readonly NC='\033[0m' # No Color log() { local level="$1" shift local message="$*" case "$level" in "INFO") echo -e "${GREEN}[INFO]${NC} $message" ;; "WARN") echo -e "${YELLOW}[WARN]${NC} $message" ;; "ERROR") echo -e "${RED}[ERROR]${NC} $message" ;; "DEBUG") echo -e "${BLUE}[DEBUG]${NC} $message" ;; esac } echo "🔍 MYP VM Internet-Verbindung Diagnose" echo "======================================" echo # 1. VM-Umgebung prüfen log "INFO" "Prüfe VM-Umgebung..." if command -v systemd-detect-virt &>/dev/null; then virt_type=$(systemd-detect-virt) if [[ "$virt_type" != "none" ]]; then log "INFO" "✓ VM-Umgebung erkannt: $virt_type" else log "WARN" "Keine VM-Umgebung erkannt (aber Script wurde manuell gestartet)" fi else log "WARN" "systemd-detect-virt nicht verfügbar" fi # 2. Netzwerk-Interface prüfen log "INFO" "Prüfe Netzwerk-Interfaces..." active_interfaces=$(ip link show | grep "state UP" | wc -l) if [[ $active_interfaces -gt 0 ]]; then log "INFO" "✓ $active_interfaces aktive Netzwerk-Interface(s)" ip link show | grep "state UP" | while read line; do interface=$(echo "$line" | awk -F: '{print $2}' | tr -d ' ') log "DEBUG" " - Interface: $interface" done else log "ERROR" "✗ Keine aktiven Netzwerk-Interfaces" exit 1 fi # 3. IP-Adressen prüfen log "INFO" "Prüfe IP-Adressen..." ip_addresses=$(hostname -I 2>/dev/null | tr ' ' '\n' | grep -v '^$' || echo "") if [[ -n "$ip_addresses" ]]; then log "INFO" "✓ IP-Adressen gefunden:" echo "$ip_addresses" | while read ip; do [[ -n "$ip" ]] && log "DEBUG" " - $ip" done else log "ERROR" "✗ Keine IP-Adressen gefunden" exit 1 fi # 4. DNS-Konfiguration prüfen log "INFO" "Prüfe DNS-Konfiguration..." if [[ -f "/etc/resolv.conf" ]]; then dns_servers=$(grep "^nameserver" /etc/resolv.conf | awk '{print $2}' | head -3) if [[ -n "$dns_servers" ]]; then log "INFO" "✓ DNS-Server konfiguriert:" echo "$dns_servers" | while read dns; do log "DEBUG" " - $dns" done else log "WARN" "Keine DNS-Server in /etc/resolv.conf gefunden" fi else log "WARN" "/etc/resolv.conf nicht gefunden" fi # 5. Gateway prüfen log "INFO" "Prüfe Standard-Gateway..." default_gateway=$(ip route | grep "^default" | awk '{print $3}' | head -1) if [[ -n "$default_gateway" ]]; then log "INFO" "✓ Standard-Gateway: $default_gateway" # Gateway-Ping testen if ping -c 2 -W 10 "$default_gateway" &>/dev/null; then log "INFO" "✓ Gateway erreichbar" else log "ERROR" "✗ Gateway nicht erreichbar" fi else log "ERROR" "✗ Kein Standard-Gateway gefunden" fi # 6. Internet-Konnektivität testen (erweitert) log "INFO" "Teste Internet-Konnektivität (VM-optimiert)..." test_hosts=( "8.8.8.8:Google DNS" "1.1.1.1:Cloudflare DNS" "9.9.9.9:Quad9 DNS" "208.67.222.222:OpenDNS" ) internet_working=false for host_info in "${test_hosts[@]}"; do host=$(echo "$host_info" | cut -d: -f1) name=$(echo "$host_info" | cut -d: -f2) log "DEBUG" "Teste $name ($host)..." if timeout 20 ping -c 3 -W 10 "$host" &>/dev/null; then log "INFO" "✓ Internet-Verbindung über $name erfolgreich" internet_working=true break else log "WARN" "✗ $name nicht erreichbar" fi done # 7. HTTP-Konnektivität testen if [[ "$internet_working" == "true" ]]; then log "INFO" "Teste HTTP-Konnektivität..." test_urls=( "http://connectivitycheck.gstatic.com/generate_204" "http://www.gstatic.com/generate_204" "http://clients3.google.com/generate_204" ) for url in "${test_urls[@]}"; do if timeout 30 curl -sf --connect-timeout 20 --max-time 25 "$url" &>/dev/null; then log "INFO" "✓ HTTP-Verbindung erfolgreich zu $url" break else log "WARN" "✗ HTTP-Verbindung fehlgeschlagen zu $url" fi done fi # 8. Fazit und Empfehlungen echo echo "🎯 DIAGNOSE-ERGEBNIS:" echo "====================" if [[ "$internet_working" == "true" ]]; then log "INFO" "✅ Internet-Verbindung funktioniert!" echo echo "🚀 EMPFOHLENE BEFEHLE FÜR MYP-INSTALLATION:" echo "sudo ./setup/aio_installer.sh --vm-mode --full" echo "oder" echo "sudo ./setup/aio_installer.sh --skip-internet-check --full" echo else log "ERROR" "❌ Internet-Verbindung problematisch" echo echo "🔧 LÖSUNGSVORSCHLÄGE:" echo "1. VM-Netzwerk-Einstellungen prüfen (NAT vs. Bridge)" echo "2. VM neu starten und 2 Minuten warten" echo "3. Host-Internet-Verbindung prüfen" echo "4. Firewall/Proxy-Einstellungen prüfen" echo echo "🚀 TROTZDEM VERSUCHEN:" echo "sudo ./setup/aio_installer.sh --force-offline --full" echo fi echo "📋 WEITERE OPTIONEN:" echo "sudo ./setup/aio_installer.sh --help"