Files
docker-steamcmd-server/tailscale.sh

146 lines
4.4 KiB
Bash

# This script allows you to easily add a container to your Tailscale network
# to share the connection with others without opening a port.
#
# To utilize this script just put this script somewhere on your unRAID
# Server (eg: /mnt/user/appdata/scripts/tailscale.sh is preferred) and make
# sure it is executable `chmod +x tailscale.sh`.
# After that edit the template from the container that you want to add to
# your Tailscale network and do the following:
#
# Add the following variables:
# Key: TAILSCALE_KEY
# Value: <Key generated by Tailscale for the container>
#
# Key: TAILSCALE_HOSTNAME
# Value: <Your preferred hostname for the container>
#
# Finally mount the script to the container in the template:
# Container Path: /opt/scripts/user.sh
# Host Path: /mnt/user/appdata/scripts/tailscale.sh
#
# The script will then add the container to your Tailscale network.
echo
if [[ ! -f /usr/bin/tailscale || ! -f /usr/bin/tailscaled ]]; then
if [ ! -z "${TAILSCALE_EXIT_NODE_IP}" ]; then
if [ ! -c /dev/net/tun ]; then
echo "ERROR: Device /dev/net/tun not found!"
echo " Make sure to pass through /dev/net/tun to the container and add the"
echo " parameter --cap-add=NET_ADMIN to the Extra Parameters!"
exit 1
fi
APT_IPTABLES="iptables "
fi
echo "Installing dependencies..."
echo "Please wait..."
apt-get update >/dev/null 2>&1
apt-get -y install --no-install-recommends jq wget ${APT_IPTABLES}>/dev/null 2>&1
echo "Done"
echo "Tailscale not found, downloading..."
echo "Please wait..."
TAILSCALE_JSON=$(wget -qO- 'https://pkgs.tailscale.com/stable/?mode=json')
if [ -z "${TAILSCALE_JSON}" ]; then
echo "ERROR: Can't get Tailscale JSON"
exit 1
fi
TAILSCALE_TARBALL=$(echo "${TAILSCALE_JSON}" | jq -r .Tarballs.amd64)
TAILSCALE_VERSION=$(echo "${TAILSCALE_JSON}" | jq -r .TarballsVersion)
if [ ! -d /tmp/tailscale ]; then
mkdir -p /tmp/tailscale
fi
if wget -q -nc --show-progress --progress=bar:force:noscroll -O /tmp/tailscale/tailscale.tgz "https://pkgs.tailscale.com/stable/${TAILSCALE_TARBALL}" ; then
echo "Download from Tailscale version ${TAILSCALE_VERSION} successful!"
else
echo "ERROR: Download from Tailscale version ${TAILSCALE_VERSION} failed!"
rm -rf /tmp/tailscale
exit 1
fi
cd /tmp/tailscale
tar -xf /tmp/tailscale/tailscale.tgz
cp /tmp/tailscale/tailscale_${TAILSCALE_VERSION}_amd64/tailscale /usr/bin/tailscale
cp /tmp/tailscale/tailscale_${TAILSCALE_VERSION}_amd64/tailscaled /usr/bin/tailscaled
rm -rf /tmp/tailscale
echo "Done"
else
echo "Tailscale found, continuing..."
fi
unset TSD_PARAMS
unset TS_PARAMS
if [ -v SERVER_DIR ]; then
TSD_STATE_DIR=${SERVER_DIR}/.tailscale_state
if [ ! -d ${TS_STATE_DIR} ]; then
mkdir -p ${TS_STATE_DIR}
fi
echo "Settings Tailscale state dir to: ${TSD_STATE_DIR}"
elif [ -v DATA_DIR ]; then
TSD_STATE_DIR=${DATA_DIR}/.tailscale_state
if [ ! -d ${TS_STATE_DIR} ]; then
mkdir -p ${TS_STATE_DIR}
fi
echo "Settings Tailscale state dir to: ${TSD_STATE_DIR}"
else
if [ -z "${TAILSCALE_STAT_DIR}" ]; then
TAILSCALE_STATE_DIR="/config/.tailscale_state"
fi
TSD_STATE_DIR=${TAILSCALE_STATE_DIR}
if [ ! -d ${TS_STATE_DIR} ]; then
mkdir -p ${TS_STATE_DIR}
fi
echo "Settings Tailscale state dir to: ${TSD_STATE_DIR}"
fi
if [ ! -z "${TAILSCALE_EXIT_NODE_IP}" ]; then
echo "Using ${TAILSCALE_EXIT_NODE_IP} as Exit Node!"
TS_PARAMS=" --exit-node=${TAILSCALE_EXIT_NODE_IP}"
else
if [ -z "${TAILSCALE_USERSPACE_NETWORKING}" ]; then
TSD_PARAMS+="-tun=userspace-networking "
fi
fi
if [ "${TAILSCALE_LOG}" != "false" ]; then
TSD_PARAMS+=">>/var/log/tailscaled 2>&1 "
TSD_MSG=" with log file /var/log/tailscaled"
else
TSD_PARAMS+=">/dev/null 2>&1 "
fi
if [ -z "${TAILSCALE_KEY}" ]; then
echo "ERROR: No Authorization key defined!"
exit 1
fi
if [ ! -z "${TAILSCALE_HOSTNAME}" ]; then
echo "Setting host name to ${TAILSCALE_HOSTNAME}"
TS_PARAMS+=" --hostname=${TAILSCALE_HOSTNAME}"
fi
if [ "${TAILSCALE_EXIT_NODE}" == "true" ]; then
echo "Configuring container as Exit Node!"
TS_PARAMS+=" --advertise-exit-node"
fi
if [ ! -z "${TAILSCALED_PARAMS}" ]; then
TSD_PARAMS="${TAILSCALED_PARAMS} ${TSD_PARAMS}"
fi
if [ ! -z "${TAILSCALE_PARAMS}" ]; then
TS_PARAMS="${TAILSCALE_PARAMS}${TS_PARAMS}"
fi
echo "Starting tailscaled${TSD_MSG}"
eval tailscaled -statedir=${TSD_STATE_DIR} ${TSD_PARAMS}&
echo "Starting tailscale"
eval tailscale up --authkey=${TAILSCALE_KEY} ${TS_PARAMS}