ipsecvpnserver.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env bash
  2. while true;do ls | grep -q dockerbunker.sh;if [[ $? == 0 ]];then BASE_DIR=$PWD;break;else cd ../;fi;done
  3. PROPER_NAME="IPsec VPN Server"
  4. SERVICE_NAME="$(echo -e "${PROPER_NAME,,}" | tr -d '[:space:]')"
  5. declare -a environment=( "data/env/dockerbunker.env" "data/include/init.sh" )
  6. for env in "${environment[@]}";do
  7. [[ -f "${BASE_DIR}"/$env ]] && source "${BASE_DIR}"/$env
  8. done
  9. declare -a containers=( "${SERVICE_NAME}-service-dockerbunker" )
  10. declare -A IMAGES=( [service]="dockerbunker/${SERVICE_NAME}" )
  11. declare -A volumes=( [${SERVICE_NAME}-data-vol-1]="/lib/modules" )
  12. declare -A BUILD_IMAGES=( [dockerbunker/${SERVICE_NAME}]="${DOCKERFILES}/${SERVICE_NAME}" )
  13. [[ -z $1 ]] && options_menu
  14. configure() {
  15. pre_configure_routine
  16. ! [[ -d "${BASE_DIR}/data/Dockerfiles/ipsecvpnserver" ]] \
  17. && git clone https://github.com/hwdsl2/docker-ipsec-vpn-server.git data/Dockerfiles/ipsecvpnserver >/dev/null
  18. echo -e "\n# \e[4mIPsec VPN Server Settings\e[0m"
  19. if [ -z "$VPN_USER" ]; then
  20. read -p "VPN Username: " -ei "vpnuser" VPN_USER
  21. else
  22. read -p "VPN Username: " -ei "${VPN_USER}" VPN_USER
  23. fi
  24. if [ -z "$VPN_PASSWORD" ]; then
  25. stty_orig=`stty -g`
  26. stty -echo
  27. read -p "VPN Password: " -ei "" VPN_PASSWORD
  28. stty $stty_orig
  29. echo ""
  30. fi
  31. prompt_confirm "OK to use Google DNS?"
  32. if [[ $? == 0 ]];then
  33. read -p "Enter DNS 1: " dns1
  34. read -p "Enter DNS 2: " dns2
  35. sed -i 's/8\.8\.8\.8/${dns1}/' "${BASE_DIR}"/data/Dockerfiles/${SERVICE_NAME}/run.sh
  36. sed -i 's/8\.8\.4\.4/${dns2}/' "${BASE_DIR}"/data/Dockerfiles/${SERVICE_NAME}/run.sh
  37. fi
  38. # avoid tr illegal byte sequence in macOS when generating random strings
  39. if [[ $OSTYPE =~ "darwin" ]];then
  40. if [[ $LC_ALL ]];then
  41. oldLC_ALL=$LC_ALL
  42. export LC_ALL=C
  43. else
  44. export LC_ALL=C
  45. fi
  46. fi
  47. cat <<-EOF >> "${SERVICE_ENV}"
  48. # Please use long, random alphanumeric strings (A-Za-z0-9)
  49. VPN_IPSEC_PSK=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 64)
  50. # ------------------------------
  51. # User configuration
  52. # ------------------------------
  53. VPN_USER=${VPN_USER}
  54. VPN_PASSWORD="${VPN_PASSWORD}"
  55. EOF
  56. if [[ $OSTYPE =~ "darwin" ]];then
  57. unset LC_ALL
  58. fi
  59. post_configure_routine
  60. }
  61. setup() {
  62. initial_setup_routine
  63. if ! lsmod | grep -q af_key;then
  64. echo -en "\e[1mLoading the IPsec NETKEY kernel module on the Docker host\e[0m"
  65. modprobe af_key
  66. exit_response
  67. [[ ! $(grep ^af_key$ /etc/modules) ]] && echo af_key >> /etc/modules
  68. fi
  69. docker_run_all
  70. post_setup_routine
  71. }
  72. $1