#!/bin/bash # Variables CREDENTIAL_FILE="nord.creds" OVPN_DIR="ovpn_tcp" LOG_FILE="/root/openvpn.log" RESULT_FILE="vpnlist.txt" OVPN_ZIP_URL="https://downloads.nordcdn.com/configs/archives/servers/ovpn.zip" # Get current IP before starting CURRENT_IP=$(curl -s ifconfig.me) echo "$(date) [Main Script]: Current IP before VPN connections: $CURRENT_IP" # Terminate any existing OpenVPN connections PIDS=$(pgrep openvpn) if [ -n "$PIDS" ]; then kill $PIDS echo "$(date) [Main Script]: Existing OpenVPN connections terminated." fi # Download and extract OVPN configurations if [ ! -d "$OVPN_DIR" ]; then mkdir "$OVPN_DIR" fi curl -s -L -o "$OVPN_DIR/ovpn.zip" "$OVPN_ZIP_URL" unzip -q -o "$OVPN_DIR/ovpn.zip" -d "$OVPN_DIR" rm "$OVPN_DIR/ovpn.zip" # Find all OVPN files except those starting with "us", "del", or "uk" OVPN_FILES=$(find "$OVPN_DIR" -name "*.ovpn" ! -name "us*.ovpn" ! -name "del*.ovpn" ! -name "uk*.ovpn") # Get the total number of OVPN files TOTAL_FILES=$(echo "$OVPN_FILES" | wc -l) # Process each OVPN file FILE_NUM=1 for OVPN_FILE in $OVPN_FILES; do OVPN_FILENAME=$(basename "$OVPN_FILE") # Read credentials USERNAME=$(head -n 1 "$CREDENTIAL_FILE") PASSWORD=$(tail -n 1 "$CREDENTIAL_FILE") # Establish VPN connection echo "$PASSWORD" | openvpn --config "$OVPN_FILE" --auth-user-pass "$CREDENTIAL_FILE" --daemon --log-append "$LOG_FILE" # Wait for connection to establish echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: Waiting for VPN connection to establish..." sleep 10 echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: VPN connection established." # Check external IP (with validation and retries) EXTERNAL_IP=$(curl -s ifconfig.me) if ! [[ $EXTERNAL_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: Invalid response from ifconfig.me, retrying with ifconfig.co" EXTERNAL_IP=$(curl -s ifconfig.co) if ! [[ $EXTERNAL_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: Invalid response from ifconfig.co, retrying with ipinfo.io/ip" EXTERNAL_IP=$(curl -s ipinfo.io/ip) if ! [[ $EXTERNAL_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: Unable to get external IP. Skipping this OVPN file." continue # Skip to the next OVPN file fi fi fi echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: External IP via VPN: $EXTERNAL_IP" # Append result to file echo "$EXTERNAL_IP # $OVPN_FILENAME" >> "$RESULT_FILE" # Disconnect VPN PIDS=$(pgrep openvpn) if [ -n "$PIDS" ]; then kill $PIDS echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: VPN disconnected." else echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: No openvpn process found." fi # Wait for a random time between 8 and 30 seconds SLEEP_TIME=$(((RANDOM % 23) + 8)) echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: Waiting for $SLEEP_TIME seconds before the next connection..." sleep $SLEEP_TIME echo "$(date) [$FILE_NUM/$TOTAL_FILES] [$OVPN_FILENAME]: Resuming..." # Increment file number FILE_NUM=$((FILE_NUM + 1)) done