No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

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