summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/wg-quick.bash
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/wg-quick.bash')
-rwxr-xr-xsrc/tools/wg-quick.bash25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/tools/wg-quick.bash b/src/tools/wg-quick.bash
index b6fcef8..1eb71b2 100755
--- a/src/tools/wg-quick.bash
+++ b/src/tools/wg-quick.bash
@@ -79,8 +79,10 @@ add_if() {
del_if() {
if [[ $(ip route show table all) =~ .*\ dev\ $INTERFACE\ table\ ([0-9]+)\ .* ]]; then
- cmd ip rule delete table "${BASH_REMATCH[1]}"
- [[ $(ip rule show table main) == *"from all lookup main suppress_prefixlength 0"* ]] && cmd ip rule delete table main suppress_prefixlength 0
+ while [[ -n $(ip rule show table ${BASH_REMATCH[1]}) ]]; do
+ cmd ip rule delete table "${BASH_REMATCH[1]}"
+ [[ $(ip rule show table main) == *"from all lookup main suppress_prefixlength 0"* ]] && cmd ip rule delete table main suppress_prefixlength 0
+ done
fi
cmd ip link delete dev "$INTERFACE"
}
@@ -101,13 +103,22 @@ add_route() {
fi
}
+DEFAULT_TABLE=
+PREVIOUS_ENDPOINT=
add_default() {
- [[ $(join <(wg show "$INTERFACE" allowed-ips) <(wg show "$INTERFACE" endpoints)) =~ .*\ ${1//./\\.}\ \[?([0-9.:a-f]+)\]?:[0-9]+$ ]] && local endpoint="${BASH_REMATCH[1]}"
+ [[ $(join <(wg show "$INTERFACE" allowed-ips) <(wg show "$INTERFACE" endpoints)) =~ ([A-Za-z0-9/+=]{44})\ ([0-9a-f/.:]+ )*${1//./\\.}\ ([0-9a-f/.:]+ )*\[?([0-9.:a-f]+)\]?:[0-9]+ ]] && local endpoint="${BASH_REMATCH[4]}"
[[ -n $endpoint ]] || return 0
- local table=51820
- while [[ -n $(ip route show table $table) ]]; do ((table++)); done
- cmd ip route add "$1" dev "$INTERFACE" table $table
- cmd ip rule add not to "$endpoint" table $table
+ local first=0
+ if [[ -z $DEFAULT_TABLE ]]; then
+ first=1
+ DEFAULT_TABLE=51820
+ while [[ -n $(ip route show table $DEFAULT_TABLE) ]]; do ((DEFAULT_TABLE++)); done
+ fi
+ cmd ip route add "$1" dev "$INTERFACE" table $DEFAULT_TABLE
+ [[ $PREVIOUS_ENDPOINT == "$endpoint" ]] && return 0
+ PREVIOUS_ENDPOINT="$endpoint"
+ cmd ip rule add not to "$endpoint" table $DEFAULT_TABLE
+ [[ $first -eq 1 ]] || return 0
cmd ip rule add table main suppress_prefixlength 0
}