You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dnscrypt-server-docker/entrypoint.sh

115 lines
3.3 KiB
Bash

#! /usr/bin/env bash
9 years ago
set -e
action="$1"
KEYS_DIR="/opt/dnscrypt-wrapper/etc/keys"
6 years ago
# -N provider-name -E external-ip-address:port
9 years ago
init() {
if [ $(is_initialized) = yes ]; then
start
exit $?
fi
6 years ago
while getopts "h?N:E:" opt; do
9 years ago
case "$opt" in
h|\?) usage ;;
N) provider_name=$(echo "$OPTARG" | sed -e 's/^[ \t]*//' | tr A-Z a-z) ;;
6 years ago
E) ext_address=$(echo "$OPTARG" | sed -e 's/^[ \t]*//' | tr A-Z a-z) ;;
9 years ago
esac
done
[ -z "$provider_name" ] && usage
case "$provider_name" in
.*) usage ;;
2.dnscrypt-cert.*) ;;
*) provider_name="2.dnscrypt-cert.${provider_name}"
esac
6 years ago
[ -z "$ext_address" ] && usage
case "$ext_address" in
.*) usage ;;
0.*) echo "Do not use 0.0.0.0, use an actual external IP address" >&2 ; exit 1 ;;
esac
6 years ago
echo "Provider name: [$provider_name]"
9 years ago
cd "$KEYS_DIR"
/opt/dnscrypt-wrapper/sbin/dnscrypt-wrapper \
6 years ago
--gen-provider-keypair --nolog --dnssec --nofilter \
6 years ago
--provider-name="$provider_name" --ext-address="$ext_address" | \
9 years ago
tee "${KEYS_DIR}/provider-info.txt"
chmod 640 "${KEYS_DIR}/secret.key"
chmod 644 "${KEYS_DIR}/public.key"
chown root:_dnscrypt-signer "${KEYS_DIR}/public.key" "${KEYS_DIR}/secret.key"
echo "$provider_name" > "${KEYS_DIR}/provider_name"
chmod 644 "${KEYS_DIR}/provider_name"
hexdump -ve '1/1 "%.2x"' < "${KEYS_DIR}/public.key" > "${KEYS_DIR}/public.key.txt"
chmod 644 "${KEYS_DIR}/public.key.txt"
echo
echo -----------------------------------------------------------------------
echo
echo "Congratulations! The container has been properly initialized."
echo "Take a look up above at the way dnscrypt-proxy has to be configured in order"
echo "to connect to your resolver. Then, start the container with the default command."
}
provider_info() {
ensure_initialized
echo "Provider name:"
cat "${KEYS_DIR}/provider_name"
echo
echo "Provider public key:"
cat "${KEYS_DIR}/public.key.txt"
echo
}
is_initialized() {
if [ ! -f "${KEYS_DIR}/public.key" -a ! -f "${KEYS_DIR}/secret.key" -a ! -f "${KEYS_DIR}/provider_name" ]; then
echo no
else
echo yes
fi
}
ensure_initialized() {
if [ $(is_initialized) = no ]; then
6 years ago
echo "Please provide an initial configuration (init -N <provider_name> -E <external IP>)" >&2
9 years ago
exit 1
fi
}
start() {
ensure_initialized
echo "Starting DNSCrypt service for provider: "
cat "${KEYS_DIR}/provider_name"
exec /sbin/start_runit
9 years ago
}
usage() {
cat << EOT
Commands
========
6 years ago
* init -N <provider_name> -E <external ip>:<port>
initialize the container for a server accessible at ip <external ip> on port
<port>, for a provider named <provider_name>. This is required only once.
9 years ago
* start (default command): start the resolver and the dnscrypt server proxy.
Ports 443/udp and 443/tcp have to be publicly exposed.
6 years ago
* provider-info: prints the provider name and provider public key.
9 years ago
This container has a single volume that you might want to securely keep a
backup of: /opt/dnscrypt-wrapper/etc/keys
EOT
exit 1
}
case "$action" in
start) start ;;
init) shift ; init $* ;;
provider-info) provider_info ;;
*) usage ;;
esac