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.2KB

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