check-vpn-status.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #!/bin/bash
  2. # Script per testare la connessione VPN
  3. # Salva come: storage/scripts/test-vpn-connection.sh
  4. echo "=== VPN CONNECTION TEST ==="
  5. echo "Data: $(date)"
  6. echo ""
  7. SCRIPT_DIR="$(dirname "$0")"
  8. CONFIG_FILE="$SCRIPT_DIR/vpn-config.conf"
  9. # 1. Verifica prerequisiti
  10. echo "1. Checking prerequisites..."
  11. if [[ ! -f "/opt/cisco/anyconnect/bin/vpn" ]]; then
  12. echo " ❌ Cisco AnyConnect not found"
  13. exit 1
  14. fi
  15. echo " ✅ Cisco AnyConnect installed"
  16. if [[ ! -f "$CONFIG_FILE" ]]; then
  17. echo " ❌ VPN config file not found: $CONFIG_FILE"
  18. exit 1
  19. fi
  20. echo " ✅ VPN config file found"
  21. # 2. Carica configurazione
  22. echo ""
  23. echo "2. Loading configuration..."
  24. source "$CONFIG_FILE"
  25. if [[ -z "$VPN_USERNAME" || -z "$VPN_PASSWORD" || -z "$VPN_SERVER" ]]; then
  26. echo " ❌ Configuration incomplete"
  27. echo " Username: ${VPN_USERNAME:-[missing]}"
  28. echo " Password: ${VPN_PASSWORD:+[set]}${VPN_PASSWORD:-[missing]}"
  29. echo " Server: ${VPN_SERVER:-[missing]}"
  30. exit 1
  31. fi
  32. echo " ✅ Configuration loaded"
  33. echo " Username: $VPN_USERNAME"
  34. echo " Server: $VPN_SERVER"
  35. # 3. Test connettività server
  36. echo ""
  37. echo "3. Testing server connectivity..."
  38. SERVER_HOST=$(echo "$VPN_SERVER" | cut -d'/' -f1)
  39. if ping -c 3 "$SERVER_HOST" >/dev/null 2>&1; then
  40. echo " ✅ Server $SERVER_HOST is reachable"
  41. else
  42. echo " ⚠️ Server $SERVER_HOST ping failed (might be normal for VPN servers)"
  43. fi
  44. # 4. Controlla stato attuale
  45. echo ""
  46. echo "4. Checking current VPN status..."
  47. CURRENT_STATUS=$(/opt/cisco/anyconnect/bin/vpn state 2>/dev/null)
  48. echo " Current status:"
  49. echo "$CURRENT_STATUS" | sed 's/^/ /'
  50. # 5. Test di connessione (solo se disconnesso)
  51. if echo "$CURRENT_STATUS" | grep -q "Disconnected"; then
  52. echo ""
  53. echo "5. Testing VPN connection..."
  54. echo " Attempting to connect (this may take 30-60 seconds)..."
  55. # Crea un file temporaneo con le credenziali
  56. TEMP_CREDS=$(mktemp)
  57. echo -e "${VPN_USERNAME}\n${VPN_PASSWORD}\ny" > "$TEMP_CREDS"
  58. # Tenta la connessione con timeout
  59. timeout 60 /opt/cisco/anyconnect/bin/vpn -s connect "$VPN_SERVER" < "$TEMP_CREDS" >/dev/null 2>&1
  60. CONNECT_RESULT=$?
  61. # Pulisci il file temporaneo
  62. rm -f "$TEMP_CREDS"
  63. # Controlla il risultato
  64. sleep 5 # Aspetta che la connessione si stabilizzi
  65. NEW_STATUS=$(/opt/cisco/anyconnect/bin/vpn state 2>/dev/null)
  66. if echo "$NEW_STATUS" | grep -q "Connected"; then
  67. echo " ✅ VPN connection successful!"
  68. echo " New status:"
  69. echo "$NEW_STATUS" | sed 's/^/ /'
  70. # Test di connettività attraverso VPN
  71. echo ""
  72. echo "6. Testing connectivity through VPN..."
  73. if curl -s --max-time 10 https://httpbin.org/ip >/dev/null 2>&1; then
  74. echo " ✅ Internet connectivity through VPN: OK"
  75. # Mostra IP pubblico
  76. PUBLIC_IP=$(curl -s --max-time 5 https://httpbin.org/ip | grep -o '"origin":"[^"]*"' | cut -d'"' -f4)
  77. echo " Public IP: ${PUBLIC_IP:-[unable to detect]}"
  78. else
  79. echo " ⚠️ Internet connectivity test failed"
  80. fi
  81. # Disconnetti dopo il test
  82. echo ""
  83. echo "7. Disconnecting test connection..."
  84. /opt/cisco/anyconnect/bin/vpn disconnect >/dev/null 2>&1
  85. sleep 3
  86. echo " ✅ Disconnected"
  87. else
  88. echo " ❌ VPN connection failed"
  89. echo " Status after attempt:"
  90. echo "$NEW_STATUS" | sed 's/^/ /'
  91. fi
  92. else
  93. echo ""
  94. echo "5. Skipping connection test (VPN already connected or in unknown state)"
  95. fi
  96. echo ""
  97. echo "=== TEST COMPLETED ==="