12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/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
|