#!/bin/bash # WebDAV External Access Diagnostic Script # This script helps diagnose why WebDAV is not accessible from external networks echo "==========================================" echo "WebDAV External Access Diagnostic Tool" echo "==========================================" echo "" # Check if running as root (needed for some checks) if [ "$EUID" -ne 0 ]; then echo "⚠️ Some checks may require root privileges" echo "" fi # 1. Check what's listening on port 5006 echo "1. Checking what's listening on port 5006..." echo "-------------------------------------------" if command -v netstat &> /dev/null; then echo "Using netstat:" netstat -tuln | grep 5006 || echo "❌ Nothing found listening on port 5006" elif command -v ss &> /dev/null; then echo "Using ss:" ss -tuln | grep 5006 || echo "❌ Nothing found listening on port 5006" else echo "⚠️ netstat or ss not available" fi echo "" # 2. Check if service is bound to localhost only echo "2. Checking if service is bound to localhost only..." echo "-------------------------------------------" if command -v netstat &> /dev/null; then netstat -tuln | grep 5006 | grep "127.0.0.1\|::1" && echo "❌ Service is bound to localhost only!" || echo "✅ Service is not bound to localhost only" elif command -v ss &> /dev/null; then ss -tuln | grep 5006 | grep "127.0.0.1\|::1" && echo "❌ Service is bound to localhost only!" || echo "✅ Service is not bound to localhost only" fi echo "" # 3. Check if port 5006 is open in firewall echo "3. Checking firewall status..." echo "-------------------------------------------" if command -v ufw &> /dev/null; then echo "UFW Status:" ufw status | grep 5006 || echo "⚠️ Port 5006 not found in UFW rules" elif command -v firewall-cmd &> /dev/null; then echo "firewalld Status:" firewall-cmd --list-ports | grep 5006 || echo "⚠️ Port 5006 not found in firewalld rules" elif command -v iptables &> /dev/null; then echo "iptables rules for port 5006:" iptables -L -n | grep 5006 || echo "⚠️ No iptables rules found for port 5006" else echo "⚠️ No common firewall tool detected" fi echo "" # 4. Check WebDAV service status (common services) echo "4. Checking WebDAV service status..." echo "-------------------------------------------" if systemctl list-units --type=service | grep -i webdav &> /dev/null; then systemctl list-units --type=service | grep -i webdav | while read service; do servicename=$(echo $service | awk '{print $1}') echo "Service: $servicename" systemctl status $servicename --no-pager | head -5 done else echo "⚠️ No WebDAV systemd service found" echo "Checking common WebDAV processes:" ps aux | grep -i webdav | grep -v grep || echo "No WebDAV processes found" fi echo "" # 5. Test local connection echo "5. Testing local connection to port 5006..." echo "-------------------------------------------" if command -v nc &> /dev/null; then if nc -zv localhost 5006 2>&1; then echo "✅ Local connection successful" else echo "❌ Local connection failed" fi else echo "⚠️ netcat (nc) not available for connection test" fi echo "" # 6. Check network interfaces echo "6. Network interface information..." echo "-------------------------------------------" if command -v ip &> /dev/null; then ip addr show | grep -E "^[0-9]+:|inet " | head -10 elif command -v ifconfig &> /dev/null; then ifconfig | grep -E "^[a-z]|inet " | head -10 fi echo "" # 7. Check router/NAT configuration hints echo "7. Router/NAT Configuration Checklist..." echo "-------------------------------------------" echo "Please verify on your router/NAS:" echo " □ Port forwarding: External port 5006 → Internal NAS IP:5006" echo " □ Firewall rules allow incoming connections on port 5006" echo " □ NAT/UPnP is configured correctly" echo " □ External IP matches: $(curl -s ifconfig.me 2>/dev/null || echo 'Unable to determine')" echo "" # 8. Common WebDAV configuration files to check echo "8. Common WebDAV configuration locations..." echo "-------------------------------------------" config_locations=( "/etc/apache2/sites-available/*webdav*" "/etc/apache2/conf.d/*webdav*" "/etc/nginx/sites-available/*webdav*" "/etc/nginx/conf.d/*webdav*" "/etc/lighttpd/lighttpd.conf" "/etc/httpd/conf.d/*webdav*" "/usr/local/etc/apache2/*webdav*" ) for pattern in "${config_locations[@]}"; do for file in $pattern; do if [ -f "$file" ]; then echo "Found: $file" echo " Checking for Listen/ServerName directives..." grep -E "Listen|ServerName|