You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.3 KiB
82 lines
2.3 KiB
#!/bin/bash |
|
|
|
set -uo pipefail |
|
|
|
trap 'trap " " SIGTERM; kill 0; wait' SIGTERM SIGQUIT SIGINT |
|
|
|
echo "Starting Zerotier-One" |
|
zerotier-one -d |
|
|
|
echo "Wait for ZT service to come online before attempting queries..." |
|
MAX_WAIT_SECS="${MAX_WAIT_SECS:-90}" |
|
SLEEP_TIME="${SLEEP_TIME:-15}" |
|
if [[ "$SLEEP_TIME" -le 0 ]] |
|
then |
|
SLEEP_TIME=1 |
|
fi |
|
|
|
iterations=$((MAX_WAIT_SECS/SLEEP_TIME)) |
|
online=false |
|
|
|
for ((s=0; s<=iterations; s++)) |
|
do |
|
online="$(zerotier-cli -j info | jq '.online' 2>/dev/null)" |
|
if [[ "$online" == "true" ]] |
|
then |
|
break |
|
fi |
|
sleep "$SLEEP_TIME" |
|
echo " ." |
|
done |
|
|
|
if [[ "$online" != "true" ]] |
|
then |
|
echo "Waited $MAX_WAIT_SECS for zerotier-one to start, exiting." >&2 |
|
exit 1 |
|
fi |
|
echo "done." |
|
|
|
( |
|
echo "Starting route helper" |
|
while true |
|
do |
|
if ! NETWORK_LIST="$(zerotier-cli -j listnetworks)" |
|
then |
|
echo "Route helper: $NETWORK_LIST" >&2 |
|
exit 1 |
|
fi |
|
NETWORK_COUNT="$(jq -r '. | length' <<< "$NETWORK_LIST")" |
|
if [[ "$NETWORK_COUNT" -gt 0 ]] |
|
then |
|
for ((j=0; j<=$((NETWORK_COUNT-1)); j++)) |
|
do |
|
ALLOW_DEFAULT="$(jq -r '.['$j'].allowDefault' <<< "$NETWORK_LIST")" |
|
ROUTE_COUNT="$(jq -r '.['$j'].routes | length' <<< "$NETWORK_LIST")" |
|
for ((k=0; k<=$((ROUTE_COUNT-1)); k++)) |
|
do |
|
ROUTE="$(jq -r '.['$j'].routes['$k'].target' <<< "$NETWORK_LIST")" |
|
VIA="$(jq -r '.['$j'].routes['$k'].via' <<< "$NETWORK_LIST")" |
|
if [[ -n "$ROUTE" ]] |
|
then |
|
# check if route is default and allowDefault enabled for this network |
|
if [[ "$ROUTE" == "0.0.0.0/0" && "$ALLOW_DEFAULT" == "false" ]] |
|
then |
|
continue |
|
fi |
|
EXIST="$(ip -o route show "$ROUTE")" |
|
if [[ -z "${EXIST}" && "$VIA" == "null" ]] |
|
then |
|
IFNAME="$(jq -r '.['$j'] | .portDeviceName' <<< "$NETWORK_LIST")" |
|
echo " Adding route $ROUTE to dev $IFNAME" |
|
ip route add "$ROUTE" dev "$IFNAME" |
|
# Routes will be deleted when ZT brings the interface down |
|
fi |
|
fi |
|
done |
|
done |
|
fi |
|
sleep 15 |
|
done ) & |
|
|
|
wait |
|
|
|
|