ZeroTierOne/pkg/synology/dsm7-docker/entrypoint.sh
zwf 15cfa3bf62
exclude static route with via ip in route helper (#1791)
When adding Routes to zerotier's Managed Routes, the helper will
add a route rule to the device that does not have a via ip,
so that the address of the Destination segment cannot be routed
correctly within the container.
Here, based on the contents of the routes key in
`zerotier-cli -j listnetworks`,
by determining whether the via key has an ip address,
if it is not null, helper will no longer add route rules.
2023-01-20 11:57:13 -08:00

83 lines
2.3 KiB
Bash
Executable File

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