Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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