my dotfiles for arch
at main 1.8 kB view raw
1#!/bin/bash 2# Comprehensive CGNAT and IPv6 connectivity checker for Linux 3 4# ----------- Public IPs ----------- 5PUBLIC_IPV4=$(curl -4 -s https://ifconfig.me) 6PUBLIC_IPV6=$(curl -6 -s https://ifconfig.me) 7 8# ----------- Local Interface Info ----------- 9WAN_IF=$(ip route show default | awk '/default/ {print $5}') 10LOCAL_IPV4=$(ip -4 addr show "$WAN_IF" | awk '/inet / {print $2}' | cut -d/ -f1) 11LOCAL_IPV6=$(ip -6 addr show "$WAN_IF" | awk '/inet6 / && !/fe80/ {print $2}' | cut -d/ -f1) 12 13echo "===== CGNAT / IPv6 Check =====" 14echo "Network interface: $WAN_IF" 15echo 16 17echo "Local IPv4: $LOCAL_IPV4" 18echo "Public IPv4: $PUBLIC_IPV4" 19echo 20echo "Local IPv6: $LOCAL_IPV6" 21echo "Public IPv6: $PUBLIC_IPV6" 22echo 23echo "--------------------------------" 24 25# ----------- IPv4 Analysis ----------- 26if [[ -z "$PUBLIC_IPV4" ]]; then 27 echo "🌐 No public IPv4 address detected (possibly IPv6-only connection)." 28elif [[ "$LOCAL_IPV4" =~ ^10\. || "$LOCAL_IPV4" =~ ^192\.168\. || "$LOCAL_IPV4" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. || "$LOCAL_IPV4" =~ ^100\.(6[4-9]|[7-9][0-9]|1[0-1][0-9]|12[0-7])\. ]]; then 29 if [ "$PUBLIC_IPV4" != "$LOCAL_IPV4" ]; then 30 echo "⚠️ Your local IPv4 ($LOCAL_IPV4) is private, and your public IPv4 differs." 31 echo "➡️ You are likely behind CGNAT or another NAT layer." 32 else 33 echo "✅ Local and public IPv4 match — you have a public IPv4 address." 34 fi 35else 36 echo "✅ Local IPv4 appears to be public ($LOCAL_IPV4). No CGNAT detected." 37fi 38 39echo "--------------------------------" 40 41# ----------- IPv6 Analysis ----------- 42if [[ -n "$PUBLIC_IPV6" ]]; then 43 echo "✅ Public IPv6 is active — your device has global IPv6 connectivity." 44else 45 echo "❌ No global IPv6 address detected." 46fi 47 48echo "--------------------------------" 49echo "Done."