aboutsummaryrefslogtreecommitdiffstats
path: root/roles/jails/16_dl/templates/wg_random_tunnel.j2
blob: c3fb47814cbd7317809ddf3d716053ffb7d18d18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/sh

set -eu

GATEWAY={{ ingress_ip }}
MAX_ATTEMPTS=5
attempt=0

# Shut down current tunnel
wg-quick down $(wg show interfaces) 2>/dev/null || true

while [ $attempt -lt $MAX_ATTEMPTS ]; do
    attempt=$((attempt + 1))
    CONF=$(ls /usr/local/etc/wireguard/ | sort -R | head -n1)

    echo "Attempt ${attempt}/${MAX_ATTEMPTS}: trying ${CONF}"

    wg-quick up "/usr/local/etc/wireguard/${CONF}"

    TUNNEL_IF=$(wg show interfaces)
    TUNNEL_IP=$(wg show $TUNNEL_IF endpoints | awk '{print $2}' | tr ':' ' ' | awk '{print $1}')

    route delete $TUNNEL_IP 2>/dev/null || true
    route add $TUNNEL_IP $GATEWAY

    # Check connectivity
    if ping -c 2 -W 5 8.8.8.8 >/dev/null 2>&1; then
        echo "Tunnel ${CONF} is working."
        exit 0
    fi

    echo "No connectivity via ${CONF}, tearing down."
    wg-quick down $TUNNEL_IF || true

done

echo "ERROR: Failed to establish connectivity after ${MAX_ATTEMPTS} attempts."
exit 1