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.

start.sh 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/bin/bash
  2. VPN_PROVIDER="${OPENVPN_PROVIDER,,}"
  3. VPN_PROVIDER_CONFIGS="/etc/openvpn/${VPN_PROVIDER}"
  4. if [[ "${OPENVPN_PROVIDER}" == "**None**" ]] || [[ -z "${OPENVPN_PROVIDER-}" ]]; then
  5. echo "OpenVPN provider not set. Exiting."
  6. exit 1
  7. elif [[ ! -d "${VPN_PROVIDER_CONFIGS}" ]]; then
  8. echo "Could not find OpenVPN provider: ${OPENVPN_PROVIDER}"
  9. echo "Please check your settings."
  10. exit 1
  11. fi
  12. echo "Using OpenVPN provider: ${OPENVPN_PROVIDER}"
  13. if [[ -n "${OPENVPN_CONFIG-}" ]]; then
  14. readarray -t OPENVPN_CONFIG_ARRAY <<< "${OPENVPN_CONFIG//,/$'\n'}"
  15. if (( ${#OPENVPN_CONFIG_ARRAY[@]} > 1 )); then
  16. OPENVPN_CONFIG_RANDOM=$((RANDOM%${#OPENVPN_CONFIG_ARRAY[@]}))
  17. echo "${#OPENVPN_CONFIG_ARRAY[@]} servers found in OPENVPN_CONFIG, ${OPENVPN_CONFIG_ARRAY[${OPENVPN_CONFIG_RANDOM}]} chosen randomly"
  18. OPENVPN_CONFIG="${OPENVPN_CONFIG_ARRAY[${OPENVPN_CONFIG_RANDOM}]}"
  19. fi
  20. if [[ -f "${VPN_PROVIDER_CONFIGS}/${OPENVPN_CONFIG}".ovpn ]]; then
  21. echo "Starting OpenVPN using config ${OPENVPN_CONFIG}.ovpn"
  22. OPENVPN_CONFIG="${VPN_PROVIDER_CONFIGS}/${OPENVPN_CONFIG}.ovpn"
  23. else
  24. echo "Supplied config ${OPENVPN_CONFIG}.ovpn could not be found."
  25. echo "Using default OpenVPN gateway for provider ${VPN_PROVIDER}"
  26. OPENVPN_CONFIG="${VPN_PROVIDER_CONFIGS}/default.ovpn"
  27. fi
  28. else
  29. echo "No VPN configuration provided. Using default."
  30. OPENVPN_CONFIG="${VPN_PROVIDER_CONFIGS}/default.ovpn"
  31. fi
  32. # add OpenVPN user/pass
  33. if [[ "${OPENVPN_USERNAME}" == "**None**" ]] || [[ "${OPENVPN_PASSWORD}" == "**None**" ]] ; then
  34. if [[ ! -f /config/openvpn-credentials.txt ]] ; then
  35. echo "OpenVPN credentials not set. Exiting."
  36. exit 1
  37. fi
  38. echo "Found existing OPENVPN credentials..."
  39. else
  40. echo "Setting OPENVPN credentials..."
  41. mkdir -p /config
  42. echo "${OPENVPN_USERNAME}" > /config/openvpn-credentials.txt
  43. echo "${OPENVPN_PASSWORD}" >> /config/openvpn-credentials.txt
  44. chmod 600 /config/openvpn-credentials.txt
  45. fi
  46. # add transmission credentials from env vars
  47. echo "${TRANSMISSION_RPC_USERNAME}" > /config/transmission-credentials.txt
  48. echo "${TRANSMISSION_RPC_PASSWORD}" >> /config/transmission-credentials.txt
  49. # Persist transmission settings for use by transmission-daemon
  50. dockerize -template /etc/transmission/environment-variables.tmpl:/etc/transmission/environment-variables.sh
  51. TRANSMISSION_CONTROL_OPTS="--script-security 2 --up-delay --up /etc/openvpn/tunnelUp.sh --down /etc/openvpn/tunnelDown.sh"
  52. ## If we use UFW or the LOCAL_NETWORK we need to grab network config info
  53. if [[ "${ENABLE_UFW,,}" == "true" ]] || [[ -n "${LOCAL_NETWORK-}" ]]; then
  54. eval $(/sbin/ip r l m 0.0.0.0 | awk '{if($5!="tun0"){print "GW="$3"\nINT="$5; exit}}')
  55. ## IF we use UFW_ALLOW_GW_NET along with ENABLE_UFW we need to know what our netmask CIDR is
  56. if [[ "${ENABLE_UFW,,}" == "true" ]] && [[ "${UFW_ALLOW_GW_NET,,}" == "true" ]]; then
  57. eval $(ip r l dev ${INT} | awk '{if($5=="link"){print "GW_CIDR="$1; exit}}')
  58. fi
  59. fi
  60. ## Open port to any address
  61. function ufwAllowPort {
  62. typeset -n portNum=${1}
  63. if [[ "${ENABLE_UFW,,}" == "true" ]] && [[ -n "${portNum-}" ]]; then
  64. echo "allowing ${portNum} through the firewall"
  65. ufw allow ${portNum}
  66. fi
  67. }
  68. ## Open port to specific address.
  69. function ufwAllowPortLong {
  70. typeset -n portNum=${1} sourceAddress=${2}
  71. if [[ "${ENABLE_UFW,,}" == "true" ]] && [[ -n "${portNum-}" ]] && [[ -n "${sourceAddress-}" ]]; then
  72. echo "allowing ${sourceAddress} through the firewall to port ${portNum}"
  73. ufw allow from ${sourceAddress} to any port ${portNum}
  74. fi
  75. }
  76. if [[ "${ENABLE_UFW,,}" == "true" ]]; then
  77. # Enable firewall
  78. echo "enabling firewall"
  79. sed -i -e s/IPV6=yes/IPV6=no/ /etc/default/ufw
  80. ufw enable
  81. if [[ "${TRANSMISSION_PEER_PORT_RANDOM_ON_START,,}" == "true" ]]; then
  82. PEER_PORT="${TRANSMISSION_PEER_PORT_RANDOM_LOW}:${TRANSMISSION_PEER_PORT_RANDOM_HIGH}"
  83. else
  84. PEER_PORT="${TRANSMISSION_PEER_PORT}"
  85. fi
  86. ufwAllowPort PEER_PORT
  87. if [[ "${WEBPROXY_ENABLED,,}" == "true" ]]; then
  88. ufwAllowPort WEBPROXY_PORT
  89. fi
  90. if [[ "${UFW_ALLOW_GW_NET,,}" == "true" ]]; then
  91. ufwAllowPortLong TRANSMISSION_RPC_PORT GW_CIDR
  92. else
  93. ufwAllowPortLong TRANSMISSION_RPC_PORT GW
  94. fi
  95. if [[ -n "${UFW_EXTRA_PORTS-}" ]]; then
  96. for port in ${UFW_EXTRA_PORTS//,/ }; do
  97. if [[ "${UFW_ALLOW_GW_NET,,}" == "true" ]]; then
  98. ufwAllowPortLong port GW_CIDR
  99. else
  100. ufwAllowPortLong port GW
  101. fi
  102. done
  103. fi
  104. fi
  105. if [[ -n "${LOCAL_NETWORK-}" ]]; then
  106. if [[ -n "${GW-}" ]] && [[ -n "${INT-}" ]]; then
  107. for localNet in ${LOCAL_NETWORK//,/ }; do
  108. echo "adding route to local network ${localNet} via ${GW} dev ${INT}"
  109. /sbin/ip r a "${localNet}" via "${GW}" dev "${INT}"
  110. if [[ "${ENABLE_UFW,,}" == "true" ]]; then
  111. ufwAllowPortLong TRANSMISSION_RPC_PORT localNet
  112. if [[ -n "${UFW_EXTRA_PORTS-}" ]]; then
  113. for port in ${UFW_EXTRA_PORTS//,/ }; do
  114. ufwAllowPortLong port localNet
  115. done
  116. fi
  117. fi
  118. done
  119. fi
  120. fi
  121. exec openvpn ${TRANSMISSION_CONTROL_OPTS} ${OPENVPN_OPTS} --config "${OPENVPN_CONFIG}"