diff --git a/proxmox_network_diagnostic.sh b/proxmox_network_diagnostic.sh new file mode 100644 index 0000000..3434505 --- /dev/null +++ b/proxmox_network_diagnostic.sh @@ -0,0 +1,257 @@ +#!/bin/bash + +# Colors for better readability +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Function to print colored text +print_color() { + local color=$1 + local text=$2 + echo -e "${color}${text}${NC}" +} + +# Function to check if script is run as root +check_root() { + if [ "$EUID" -ne 0 ]; then + print_color $RED "Please run this script as root" + exit 1 + fi +} + +# Function to test DNS resolution +test_dns() { + print_color $BLUE "\nTesting DNS Resolution..." + echo "Current DNS servers:" + cat /etc/resolv.conf | grep nameserver + + read -p "Enter a domain to test DNS resolution (default: google.com): " test_domain + test_domain=${test_domain:-google.com} + + if dig +short "$test_domain" > /dev/null; then + print_color $GREEN "DNS resolution successful for $test_domain" + echo "IP Address: $(dig +short "$test_domain")" + else + print_color $RED "DNS resolution failed for $test_domain" + fi +} + +# Function to test specific ports +test_ports() { + print_color $BLUE "\nPort Testing Menu" + echo "1. Test specific port" + echo "2. Test common Proxmox ports (8006, 3128, 111, 5900-5999)" + echo "3. Back to main menu" + + read -p "Select an option: " port_choice + + case $port_choice in + 1) + read -p "Enter hostname/IP to test: " host + read -p "Enter port number: " port + if nc -zv $host $port 2>&1 | grep -q 'succeeded'; then + print_color $GREEN "Port $port is open on $host" + else + print_color $RED "Port $port is closed on $host" + fi + ;; + 2) + print_color $YELLOW "Testing common Proxmox ports..." + local ports=(8006 3128 111 5900 5999) + for port in "${ports[@]}"; do + if nc -zv localhost $port 2>&1 | grep -q 'succeeded'; then + print_color $GREEN "Port $port is open" + else + print_color $RED "Port $port is closed" + fi + done + ;; + 3) + return + ;; + esac +} + +# Function to check network interfaces +check_interfaces() { + print_color $BLUE "\nNetwork Interfaces Information:" + echo "1. Show all interfaces" + echo "2. Show specific interface details" + echo "3. Show bridge information" + echo "4. Back to main menu" + + read -p "Select an option: " int_choice + + case $int_choice in + 1) + print_color $YELLOW "All Network Interfaces:" + ip -c a + ;; + 2) + ip -c link show + read -p "Enter interface name to inspect: " interface + if ip link show $interface >/dev/null 2>&1; then + print_color $YELLOW "Details for interface $interface:" + ip -c addr show $interface + ethtool $interface 2>/dev/null || print_color $RED "ethtool not available" + else + print_color $RED "Interface $interface not found" + fi + ;; + 3) + print_color $YELLOW "Bridge Information:" + brctl show 2>/dev/null || print_color $RED "brctl not installed. Installing..." + if ! command -v brctl &> /dev/null; then + apt-get update && apt-get install -y bridge-utils + brctl show + fi + ;; + 4) + return + ;; + esac +} + +# Function to test network connectivity +test_connectivity() { + print_color $BLUE "\nNetwork Connectivity Tests:" + echo "1. Basic ping test" + echo "2. MTR trace" + echo "3. Bandwidth test" + echo "4. Back to main menu" + + read -p "Select an option: " conn_choice + + case $conn_choice in + 1) + read -p "Enter host to ping (default: 8.8.8.8): " ping_host + ping_host=${ping_host:-8.8.8.8} + ping -c 4 $ping_host + ;; + 2) + if ! command -v mtr &> /dev/null; then + print_color $YELLOW "MTR not found. Installing..." + apt-get update && apt-get install -y mtr-tiny + fi + read -p "Enter host to trace (default: 8.8.8.8): " trace_host + trace_host=${trace_host:-8.8.8.8} + mtr -r $trace_host + ;; + 3) + if ! command -v iperf3 &> /dev/null; then + print_color $YELLOW "iperf3 not found. Installing..." + apt-get update && apt-get install -y iperf3 + fi + print_color $YELLOW "Starting iperf3 server..." + iperf3 -s & + sleep 2 + print_color $YELLOW "Testing local bandwidth..." + iperf3 -c localhost + killall iperf3 + ;; + 4) + return + ;; + esac +} + +# Function to check network card information +check_network_cards() { + print_color $BLUE "\nNetwork Card Information:" + echo "1. Show PCI network devices" + echo "2. Show detailed network card info" + echo "3. Show driver information" + echo "4. Back to main menu" + + read -p "Select an option: " card_choice + + case $card_choice in + 1) + print_color $YELLOW "PCI Network Devices:" + lspci | grep -i ethernet + ;; + 2) + print_color $YELLOW "Detailed Network Card Information:" + if ! command -v lshw &> /dev/null; then + print_color $YELLOW "lshw not found. Installing..." + apt-get update && apt-get install -y lshw + fi + lshw -class network + ;; + 3) + print_color $YELLOW "Network Driver Information:" + for i in $(ls /sys/class/net/); do + print_color $GREEN "\nDriver info for $i:" + ethtool -i $i 2>/dev/null || echo "No driver information available" + done + ;; + 4) + return + ;; + esac +} + +# Function to display firewall status +check_firewall() { + print_color $BLUE "\nFirewall Status:" + echo "1. Show Proxmox firewall status" + echo "2. Show iptables rules" + echo "3. Back to main menu" + + read -p "Select an option: " fw_choice + + case $fw_choice in + 1) + print_color $YELLOW "Proxmox Firewall Status:" + pvesh get /nodes/$(hostname)/firewall/rules + ;; + 2) + print_color $YELLOW "IPTables Rules:" + iptables -L -v -n + ;; + 3) + return + ;; + esac +} + +# Main menu function +main_menu() { + while true; do + print_color $BLUE "\nProxmox Network Diagnostic Tool" + echo "1. Test DNS Resolution" + echo "2. Test Ports" + echo "3. Check Network Interfaces" + echo "4. Test Network Connectivity" + echo "5. Check Network Cards" + echo "6. Check Firewall Status" + echo "7. Exit" + + read -p "Select an option: " choice + + case $choice in + 1) test_dns ;; + 2) test_ports ;; + 3) check_interfaces ;; + 4) test_connectivity ;; + 5) check_network_cards ;; + 6) check_firewall ;; + 7) + print_color $GREEN "Exiting..." + exit 0 + ;; + *) + print_color $RED "Invalid option" + ;; + esac + + read -p "Press Enter to continue..." + done +} + +# Script entry point +check_root +main_menu \ No newline at end of file