Last active
March 9, 2025 08:19
-
-
Save smarteist/c7bed1d2405c96c7598da0d312b6aff9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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