Skip to content

Instantly share code, notes, and snippets.

@smarteist
Last active March 9, 2025 08:19
Show Gist options
  • Save smarteist/c7bed1d2405c96c7598da0d312b6aff9 to your computer and use it in GitHub Desktop.
Save smarteist/c7bed1d2405c96c7598da0d312b6aff9 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -euo pipefail
exclude_networks=("1.2.3.4" "1.2.3.0/24")
for net in "${exclude_networks[@]}"; do
if sudo ip route del "$net" 2>/dev/null; then
echo "Deleted existing route for $net"
fi
done
mapfile -t interfaces < <(ip -o link show up | awk -F': ' '{print $2}' | grep -v '^lo$')
selected_iface=""
for iface in "${interfaces[@]}"; do
metric=$(ip route show dev "$iface" | awk '/metric/ {print $NF; exit}')
if [[ "$metric" =~ ^[0-9]+$ ]] && (( metric >= 100 )); then
gateway=$(ip route show default dev "$iface" | awk '/default/ {print $3; exit}')
if [[ -n "$gateway" ]]; then
echo "Using interface: $iface (metric: $metric, gateway: $gateway)"
for net in "${exclude_networks[@]}"; do
echo "Adding route for $net via gateway $gateway on interface $iface"
sudo ip route add "$net" via "$gateway" dev "$iface"
done
selected_iface="$iface"
break
fi
fi
done
if [[ -z "$selected_iface" ]]; then
echo "No suitable interface found with metric >= 100 and a default gateway."
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment